Upgrade to Pro — share decks privately, control downloads, hide ads and more …

大規模言語モデルの学習知見

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Kazuki Fujii Kazuki Fujii
November 15, 2024
160

 大規模言語モデルの学習知見

NVIDIA AI Summit 2024 Japan Tokyo
https://www.nvidia.com/ja-jp/events/ai-summit/

横田理央 , 教授, 東京科学大学
藤井一喜, 修士課程, 東京科学大学

GENIAC プロジェクトにおける 172B 規模の LLM の学習をはじめとする大規模モデルの学習には、分散学習に関する知識と、大規模な計算機環境を使いこなす知見が必要です。本セッションでは、Megatron-LM を用いた大規模モデルの実例と知見について紹介します。

Avatar for Kazuki Fujii

Kazuki Fujii

November 15, 2024
Tweet

Transcript

  1. 自己紹介: 横田理央 東京科学大学 総合研究院 スーパーコンピューティング研究センター 教授 専門:高性能計算、大規模深層学習、大規模行列演算 2 ImageNet on ResNet50 を2分で学習 フラクタルによる

    ViTの 事前学習 大規模言語モデルの  事前学習 Tensor Coreの精度保証 Fugaku-LLM 13B LLM-jp 175B, 172B Swallow 7B,13B,70B Swallow-MS 7B Swallow-MX 8x7B Llama3-Swallow 8B,70B Llama3.1-Swallow 8B,70B [CVPR'19,KDD'20,TPAMI'24] [CVPR'22,CVPR'23,ICCV'23] [COLM'24] FP16 Tensor Coreを用いて FP32の精度を実現 INT8 Tensor Coreを用いて FP64の精度を実現 [IJHPCA'22,IJHPCA'24]
  2. 自己紹介: 藤井 一喜 (Kazuki Fujii) • 2023〜 Turing株式会社 リサーチインターン •

    2023〜 Swallow Project • 2024〜 SB Intuitionsリサーチインターン • 2024〜 Sakana AI リサーチインターン https://twitter.com/okoge_kaz 11
  3. 学習に必要なコスト LLM-jp 172Bモデルを2.1Tトークン学習するには 約 2.3 x 1e24 FLOPs 仮に 380

    TFLOP/s で学習する場合、AWSのH100料金換算で 12.3 億円 もし、同じ数値精度でも 500 TFLOP/s で学習できるなら? → 9.3 億円 (3億円 の節約) 学習効率次第で、必要なコストは 大きく変化する 12
  4. 学習を高速化する技術 1. 適切な分散学習設定 a. テンソル並列とパイプライン並列 b. micro-batch-size c. シーケンス並列 2.

    パイプライン並列 3. 通信と計算の overlap a. データ並列に関する overlap 4. distributed checkpoint 5. 低精度化 (FP8 hybrid training) 13
  5. 学習を高速化する技術 1. 適切な分散学習設定 a. テンソル並列とパイプライン並列 b. micro-batch-size c. シークエンス並列 2.

    パイプライン並列 3. 通信と計算のoverlap 4. distributed checkpoint 5. 低精度化 (FP8 hybrid training) 15
  6. micro batch size なぜ、MBSを増加させると FLOP/s/GPUが上昇するのか? 1. GPUに対する処理要求が集中 2. GPU上で実行される算術演算密度 (atithmetic

    intensity)が上昇 ↑ 3. GPUリソースが効率的に利用できる → パフォーマンスの向上 ↑ では、常にFLOP/s/GPUは上昇するのか? パイプライン並列と併用しているときは 場合による GPUの効率的利用 ↔ パイプラインバブルの増加 どちらの影響が上回るかにかかっている 19
  7. シーケンス並列 backward計算のために必要な Activationを以下の式のように削減することができる • テンソル並列 (Tensor Parallel) のみ Transformer 1層

    あたり = • テンソル並列 + シーケンス並列 (Sequence Parallel) Transformer 1層 あたり = 22 10 → 10/t となるので 1GPUあたりの activation memory を削減
  8. 学習を高速化する技術 1. 適切な分散学習設定 a. テンソル並列とパイプライン並列 b. micro-batch-size c. シーケンス並列 2.

    パイプライン並列 3. 通信と計算のoverlap 4. distributed checkpoint 5. 低精度化 (FP8 hybrid training) 23
  9. 1F1B vs. interleaved 1F1B micro batch sizeが同じなとき activationが消費するメモリが増加 → OOMの危険性

    余分なP2P communication(前述)が発生する → 下図ほど速くはならない 25
  10. 学習を高速化する技術 1. 適切な分散学習設定 a. テンソル並列とパイプライン並列 b. micro-batch-size c. シークエンス並列 2.

    パイプライン並列 3. 通信と計算のoverlap 4. distributed checkpoint 5. 低精度化 (FP8 hybrid training) 26
  11. 通信と計算の overlap 学習にかかる時間を短縮するために使用する GPU数を増加させる → 通信(communication) 時間が増え始める → 効率の悪化 (最悪の場合

    DPの通信のために20%を消費) 27 forward backward communication communication forward forward backward forward 通信と計算のoverlapの模式図
  12. 学習を高速化する技術 1. 適切な分散学習設定 a. テンソル並列とパイプライン並列 b. micro-batch-size c. シーケンス並列 2.

    パイプライン並列 3. 通信と計算のoverlap 4. distributed checkpoint 5. 低精度化 (FP8 hybrid training) 29
  13. distributed checkpoint 通常の torch checkpoint 特定のGPUにparameter, optimizer statesを集めて保存を行う (通信と保存時間が必要 )

    torh-dist checkpoint 複数のGPUで分割してparameter, optimizer statesを保存 → 通信量が減少 & 1つあたりのサイズが減 ↓ → 並列書き込み性能が高いストレージでは保存にかかる時間が減少 ↓ async checkpoint • main stream: 計算 • ckpt stream: checkpoint saveを行う 30
  14. 通常のcheckpoint async checkpoint async checkpoint 31 forward backward parameter update

    checkpoint save forward backward … forward backward forward backward …
  15. 学習を高速化する技術 1. 適切な分散学習設定 a. テンソル並列とパイプライン並列 b. micro-batch-size c. シーケンス並列 2.

    パイプライン並列 3. 通信と計算のoverlap 4. distributed checkpoint 5. 低精度化 (FP8 hybrid training) 32
  16. 低精度化 (FP8 hybrid) 33 FP8 E4M3: 精度優先 → forward に向いている

    FP8 E5M2: 数値幅優先 → backward に向いている forwardはE4M3 backwardはE5M2 を使用すれば、影響を最小化 → FP8 hybrid NVIDIA TransformerEngine Docsより
  17. FP8 Scaling 34 NVIDIA TransformerEngine Docsより FP8 hybridでも何も工夫なしでは学習が上手くいかない → overflow,

    underflow を防ぐために(主にgradient) scaling を行う (左図) FP16 mixed precision trainingでも同様の措置が取られている → FP8 では、activation, gradient全体でなくテンソルごとにscalingを調整することで対応
  18. FP8 Delayed Scaling scalingする値をどのように決定するのか? → NVIDIA Transformer Engine では Delayed

    Scalingが使用されている ユーザーが決めた期間 (history)に基づき、maximums of absolute values(amaxes)からscalingを決定 35 1. amaxes から機械的にscaling factorを求める 2. 採用された値に基づき FP8 operator は演算を行う 3. FP8 output と 新しい amax が得られる 4. amax historyを更新 5. 1へ(繰り返し)
  19. ライブラリの関係性 37 • TransformerEngine → componentの効率的な定義、FP8 support • Megatron-LM (MCore)

    → 分散学習のための実装、モデル定義など • NeMo → 学習のためのfrontend
  20. まとめ • 大規模モデルの学習には多額のコストがかかる → 学習効率は非常に重要 • 学習効率を上げる方法 ◦ 適切な分散学習設定 ◦

    発展的なパイプライン並列の採用 ◦ 通信と計算のoverlap ◦ checkpoint形式の工夫 ◦ 低精度計算 (FP8) • Megatron-LM、NeMo は、上記をすべてサポート ◦ optionを適切に設定することで学習効率を上げられる • 各環境、学習するモデルごとに最適な設定は異なる ◦ optionをイジるのにも、知識と何をしているのかの 理解が必要 38