4 ポイント 投稿者 xguru 2025-02-27 | まだコメントはありません。 | WhatsAppで共有
  • DeepSeek V3/R1で使用していた戦略とコード
    • DualPipe : 計算と通信のオーバーラップのための双方向パイプライン並列化アルゴリズム
    • EPLB: Expert-Parallel ロードバランサー
    • Profile-Data: DeepSeekインフラのデータプロファイリングにより、計算と通信のオーバーラップを分析

DualPipe

  • DualPipeは、DeepSeek-V3 Technical Reportで紹介された革新的な双方向パイプライン並列アルゴリズム
  • 順伝播および逆伝播の計算・通信ステップを完全にオーバーラップさせ、パイプラインバブルを減らす役割を果たす
  • より詳しい計算・通信オーバーラップの情報は、profile dataで確認可能

Expert Parallelism Load Balancer (EPLB)

  • Expert Parallelism(EP)では、異なるエキスパート(experts)を各GPUに割り当てる
  • しかし、エキスパートごとに作業量が異なる可能性があるため、GPU間の負荷を均等に調整することが重要
  • DeepSeek-V3では、冗長エキスパート(redundant experts) 戦略を用いて高負荷のエキスパートを複製し、それをGPUに効率よく配置して負荷分散を実現
  • また、グループ制限エキスパートルーティング(group-limited expert routing) を活用し、同じグループのエキスパートをできるだけ同一ノードに配置することで、ノード間のデータ転送を最小化
  • これを再現およびデプロイしやすくするため、eplb.pyでEP負荷分散アルゴリズムをオープンソースとして提供
    • このアルゴリズムは、予測されたエキスパート負荷に基づいて、バランスの取れたエキスパート複製および配置計画を計算
    • ただし、エキスパート負荷を予測する具体的な方法は当該リポジトリの範囲外であり、一般的には過去の統計を用いた移動平均方式がよく使われる
  • 負荷分散アルゴリズムは2つのポリシーを提供し、それぞれ異なる状況で使用される。
    • 階層型負荷分散(Hierarchical Load Balancing)
      • サーバーノード数がエキスパートグループ数を割り切れる場合、階層型負荷分散 ポリシーを使用してグループ制限エキスパートルーティングを最適化
      • まず、エキスパートグループを均等にノードへ配置し、ノード間の負荷を均等に調整
      • その後、各ノード内でエキスパートを複製
      • 最後に、複製されたエキスパートを個別GPUに配置してGPU間の負荷分散を行う
      • このポリシーは、エキスパート並列規模が小さい プリフィル(prefilling)段階 で使用可能
    • グローバル負荷分散(Global Load Balancing)
      • それ以外の場合は、グローバル負荷分散 ポリシーを用いて、エキスパートグループに関係なくグローバルにエキスパートを複製し、これを個別GPUに配置
      • このポリシーは、エキスパート並列規模が大きい デコーディング(decoding)段階 に適している。

DeepSeek InfraのProfiling Data

  • DeepSeekの学習および推論フレームワークからプロファイリングデータを公開し、コミュニティが通信・計算オーバーラップ戦略と低レベル実装の詳細をよりよく理解できるよう支援
  • このプロファイリングデータは PyTorch Profiler を使用して収集されており、ダウンロード後は Chrome では chrome://tracingEdge では edge://tracing で可視化可能
  • また、実験では バランスの取れたMoEルーティング戦略 をシミュレーションしてプロファイリングを実施
  • 学習(Training)
    • 学習プロファイルデータは DualPipe における順伝播および逆伝播チャンクのオーバーラップ戦略を示している
    • 各チャンクは 4つのMoE(Mixture of Experts)レイヤー を含み、DeepSeek-V3の事前学習設定と一致する並列構成を持つ:
  • 推論(Inference)
    • プリフィル(Prefilling)
      • この段階では 2つのマイクロバッチ を活用して、計算と all-to-all 通信をオーバーラップ
      • また、attention演算負荷を2つのマイクロバッチ間で均等に分配 し、同一プロンプトを複数のマイクロバッチに分割できるようにする
    • デコーディング(Decoding)
      • デコーディングでもプリフィルと同様に、2つのマイクロバッチを使用して計算と all-to-all 通信をオーバーラップ
      • ただし、デコーディングでは all-to-all 通信が GPU SMを占有しないRDMAメッセージ送信後にGPU SMを解放 し、計算終了後に通信完了を待機する方式で動作
      • より詳しい all-to-all 実装情報は DeepEP で確認可能

DeepSeek Open Infraとして公開される5つのオープンソース のうち4番目

まだコメントはありません。

まだコメントはありません。