国内における大規模言語モデルの開発状況について

スーパーコンピューティング・ジャパン
タワーホール船堀
2024/03/12

東京工業大学
学術国際情報センター
横田 理央

ChatGPT公開以前の流れ
2019/06/22 MicrosoftがOpenAIに10億ドル(当時 約1100億円)を投資
2020/01/23 OpenAIが言語生成モデルに関するScaling Lawの論文を発表
2020/03/28 OpenAIが言語生成モデルGPT3に関する論文を発表
2020/06/11 OpenAIがGPT3のAPIを公開
2020/09/22 OpenAIがMicrosoftに対してGPT3のソースコードを公開
2021/01/05 OpenAIが画像+言語モデルCLIPと画像生成モデルDALL-Eを発表
2021/06/29 GithubがGPT3にコードを追加学習したCodexを利用したCopilotを発表
2021/07/28 Free Software FoundationがGithub Copilotに対するライセンス上の懸念を表明
2021/09/10 Naverが言語生成モデルHyperClovaを発表
2022/02/22 DeepMindがコード生成モデルAlphaCodeを発表
2022/03/29 DeepMindが言語生成モデルChinchillaを発表
2022/05/23 Googleが画像生成モデルImagenを発表
2022/07/20 OpenAIが画像生成モデルDALL-E2を発表
2022/07/22 BigScience (HuggingFace,CNRS,GENCI)が多言語モデルBloomを発表
2022/08/04 精華大学が言語生成モデルGLM-130Bを発表
2022/08/22 Stability AIが画像生成モデルStable Di usionを発表
2022/11/10 DeepMindが汎用モデルGatoを発表

ff

2022/11/15 DeepMindが画像+言語モデルFlamingoを発表

ChatGPT公開以降の時系列
2022/11/30 OpenAIがChatGPTを発表
2022/12/04 公開後5日で100万ユーザを突破
2022/12/05 Stack Over owがChatGPTで生成された投稿を禁止
2022/12/21 GoogleがChatGPTの自社への脅威に対してCode Red(非常事態)を宣言
2023/01/23 MicrosoftがOpenAIに100億ドル(当時 約1.3兆円)を投資
2023/02/01 OpenAIが月額$20の有料サービスChatGPT Plusを開始
2023/02/02 公開後約２ヶ月で1億ユーザを突破
2023/02/03 自民党AIの進化と実装に関するプロジェクトチーム (第１回)
2023/02/06 GoogleがChatGPTに対抗して対話型AIのBardを限定公開
2023/02/07 Microsoftが検索エンジンBingにChatGPTを導入
2023/02/09 ChatGPTが米国の医師国家試験に合格できるレベルとの論文が発表される
2023/02/24 Metaが言語生成モデルLLaMAのソースコードを非商用ライセンスで公開
2023/03/01 OpenAIがChatGPTとWhisper(音声認識)のAPIを公開 (ユーザデータは学習に使わないことを宣言)
2023/03/09 MicrosoftがAzure OpenAI ServiceでChatGPTを提供開始
2023/03/10 Googleが言語生成モデルPaLM2を発表
2023/03/14 ChatGPT PlusでGPT-4が利用可能にfl

2023/03/14 GoogleがPaLM2のAPIを公開ChatGPT公開以降の時系列
2023/03/16 Microsoft 365 CopilotでWord,Outlook,TeamsなどからAIアシスタントが利用可能に
2023/03/20 ChatGPTから氏名,email,住所,カード番号などの個人情報が漏えい
2023/03/20 GitHubがGPT-4を搭載したCopilot Xを公開
2023/03/30 ChatGPTのAPIを利用したAI agentであるAuto-GPTが公開
2023/03/30 UC Berkeley,CMU,StanfordなどがGPT-4の会話データで微調整したVicunaを発表
2023/03/31 イタリアがChatGPTの利用を禁止 (4/28に撤回)
2023/05/19 G7広島サミットにて「広島AIプロセス」立ち上げ
2023/05/21 LLM勉強会 (第１回)
2023/06/01 「富岳」政策対応枠 利用開始
2023/06/05 TTI (Abu Dhabi)がFalcon-40Bのソースコードを商用ライセンスで公開 (09/06に180Bも)2023/07/11 Anthropicが言語生成モデルClaude2を発表
2023/07/18 Metaが言語生成モデルLLaMA2のソースコードを限定的な商用ライセンスで公開
2023/09/07 Turingが画像+言語モデルHeronを公開
2023/09/25 AlibabaがQwen-14Bのソースコードを限定的な商用ライセンスで公開
2023/10/02 AmazonがAnthropicに12億ドル(約1800億円)を投資
2023/10/03 産総研の生成AI開発支援プログラムに国立情報学研究所(NII)とELYZA社が採択

ChatGPT公開以降の時系列
2023/10/26 Google, Microsoft, Anthropic, Open AI が AI Safety Fundに10億ドル(1500億円)を投資
2023/10/30 米国がAI規制に関する大統領令を発令
2023/11/17 Sam AltmanがOpenAIから解任→Microsoftに移る→OpenAIに戻る
2023/11/30 AlibabaがQwen-72Bのソースコードを限定的な商用ライセンスで公開
2023/12/06 AI Alliance立ち上げ：日本からは東大,慶應,SB Institute, sakana.ai, Sonyなどが参加
2023/12/07 GoogleがGemini, Alphacode2を発表
2023/12/08 Elon Muskが立ち上げたAIベンチャーXがGrokを発表
2023/12/21 RinnaがNekomataのソースコードを限定的な商用ライセンスで公開
2024/01/02 Mistral AIがMixtral 8x7Bのソースコードを商用ライセンスで公開
2024/02/15 GoogleがGemini Pro 1.5を発表
2024/02/16 OpenAIが動画生成モデルSoraを発表
2024/02/21 GoogleがGemmaのソースコードを商用ライセンスで公開
2024/02/26 Mistral AIがMistral Largeを発表
2024/03/04 AnthropicがClaude3を発表
2024/03/10 Sam AltmanがOpenAI CEO復帰
2024/03/11 東工大・産総研が Swallow-MS, Swallow-MXを商用ライセンスで公開
2024/03/12 Elon MuskがGrokをオープンソースにするとX上で宣言
2024/03/12 ELYZAがELYZA-70Bのソースコードを商用ライセンスで公開

GENIAC
時期：2024年2月開始
資源：Google Cloud, Microsoft AzureTransformerのスケール則 (Scaling Law)

24
GPT-4(3x10 FLOPs)をスパコンで学習するには？

分散並列学習
データ並列 (DP)

ZeRO (FSDP)

パイプライン並列 (PP)テンソル並列 (TP)

データ：分散データ：分散データ：冗長

データ：冗長モデル：冗長モデル：一時的に分散

モデル：分散モデル：分散通信内容：勾配通信内容：勾配＋重み

通信内容：活性通信内容：活性通信形式：AllReduce

通信形式：ReduceScatter

通信形式：SendRecv

通信形式：AllReduce

通信頻度：層毎

通信頻度：層毎

長所：省メモリ

長所：省メモリ

通信頻度：ステップ毎＋AllGather

長所：実装が簡単

通信頻度：層毎

短所：ラージバッチ問題

長所：実装が簡単

メモリ消費量省メモリ
短所：ラージバッチ問題

演算量低減

演算量低減

短所：パイプラインバブル

短所：通信オーバーヘッド
オーバーラップ不可
実装が複雑深層学習フレームワークの「富岳」への移植「富岳」版がGPU版と乖離・テンソル並列を用いるとGPU版と結果が乖離→乱数Seedの設定と反映タイミングを調整することで解決

Lossが途中でNaNになる

・学習途中でNaNが発生→高速化したtanhにNaNガードが入っていないことが原因

メモリ消費量の異常

・メモリ消費量が異常に増加し、階段状に減少→checkpoint-activationを適用(後段の層は適用外)することで解決

A64FX上での行列積(GEMM)とtanh関数の高速化
行列積(GEMM)

tanh関数

高速化前

高速化前

・GEMMを実行する際の配列形状などのパラメータ調整
・スレッド並列化の工夫

高速化後

6倍高速化

・exp関数を使用
・インライン展開
・SIMD化

高速化後

2.5倍高速化

集団通信(AllReduce)の高速化
Trinaryアルゴリズムの独自実装

・Trinaryは富士通が開発したTofuネットワークを活かしたアルゴリズム
・ただし、サブコミュニケータでは利用できない
・データ並列とテンソル並列を併用する場合はサブコミュニケータを使わざるを得ない→Trinaryアルゴリズムの独自実装を行う必要がある
・isend,irecvによる1対1通信を使って手動でAllReduce
・6方向のring AllReduceを実装 (3軸に対して双方向BCastと双方向Reduce)
・Rank mapを用いてノードの配置を最適化
・uTofuを用いたRDMA実装

足しこみの高速化

・Inline関数化
・OpenMPのスレッド競合の解決
・アシスタントコアを用いた通信と演算のオーバーラップ

3倍高速化

「富岳」4608ノードにおける実行時間の内訳
30Bパラメータ，4608ノードの設定では：高速化前0.8TFLOP/s → 高速化後1.6TFLOP/s
13Bパラメータ，13,824ノードの設定では： 高速化前0.6TFLOP/s → 高速化後0.9TFLOP/s
データ並列数を増やすと汎化性能が下がるため、テンソル並列・パイプライン並列が必要→13,824ノードではパイプラインバブルによる性能低下

1.3B and 13B models
Data size: 270B tokens
Model size: 1.3B, 13B
Resource: 16 nodes x 8 A100s

1.3B

13B

175B model
Data size: Stopped at 70B tokens
Model size: 175BResource: 49 nodes x 8 A100s
Fitting this big model while maintaining throughput
DP=2, TP=4, PP=49, micro-batch: 4→OOM
DP=2, TP=4, PP=49, micro-batch: 2→156 TFLOPS/GPU
DP=4, TP=2, PP=49, micro-batch: 1→156 TFLOPS/GPU+ ZeRO 1→ 42300 token/sec

LLM @ Tokyo Tech. (model name: Swallow)
The logo of our university is a Swallow
Our supercomputer “Tsubame” means “Swallow” in JapaneseContinual pre-training from LLaMA-2 7B, 13B, 70B
Framework: Megatron-LM
3D Parallelism + Sequence Parallel + Distributed Optimizer(ZeRO 1)

Research questions:・E ect of extending the vocabulary
・Ratio of Japanese : English = 9 : 1 or 5 : 5・Quality of the Japanese corpora

ff

DALL-E generated image of swallows playing with a llama in TokyoLLM @ Tokyo Tech. (model name: Swallow)

DALL-E generated image of swallows playing with a llama in Tokyo

日本語 LLM ベンチマーク

東工大・産総研で開発

Llama2ベース
Swallow-7B
Swallow-13B
Swallow-70B

Mistralから継続
Swallow-MS-7B
Mixtralから継続
Swallow-MX-8x7B

https://wandb.ai/wandb-japan/llm-leaderboard/reports/Nejumi-Leaderboard-Neo--Vmlldzo2MTkyMTU0

まとめ大規模言語モデルの事前学習は、最大級のスパコンの全系を使っても何ヶ月もかかる
全系までスケーリングさせるためには、４種類の並列化手法を組み合わせる必要がある
・データ並列・ZeRO・パイプライン並列・テンソル並列「富岳」では12.5PFLOP/sが限界であった・ノードあたりのメモリが32GB → ローカルバッチサイズが増やせない・ラージバッチ問題 → データ並列数が増やせない (Weak Scalingできない)
・パイプライン並列とテンソル並列(Strong Scaling)に頼らざるを得ない
LLM-jp → スクラッチから日英で事前学習
Swallow → 最新のオープンソースモデルから日本語で継続事前学習