- DeepSeek-V3 のような一部のAIモデルは、大規模提供時には安価で高速だが、ローカル実行では遅く高コストになる
- その理由は、GPU活用効率に関わる throughput(スループット)と latency(レイテンシ) の根本的なトレードオフにある
- バッチサイズを大きくするとGPUは効率的に動作するが、ユーザーはトークンが集まるまで待つ必要があり、レイテンシ増加が発生する
- Mixture-of-Experts構造 と ディープパイプライン を持つモデルは、高いバッチと長いレイテンシを必要とする
- ローカルの単一ユーザー環境では、十分に大きなバッチ形成が難しく、性能低下とコスト増加の問題が生じる
- OpenAI、Anthropic などは、アーキテクチャ自体の効率化、高度なバッチ戦略、あるいは大量のGPU投入によって高速応答を実現している
バッチ推論とGPU効率
- GPUは 大規模行列積(GEMM) に最適化されたハードウェアである
- 複数ユーザーのトークンを一度にまとめて大きな行列としてバッチ実行すると、低い往復オーバーヘッドとメモリ効率 によりスループットが大幅に向上する
- 推論サーバーは複数リクエストのトークンをキューに積み、適切なサイズのバッチを選んで大規模なGEMM演算を行う
- この過程でサーバーは、バッチサイズ(throughput増加) と 待ち時間(latency増加) のトレードオフを選択することになる
なぜ一部のモデルは大規模バッチに最適化されているのか
Mixture of Experts(MoE)とバッチ
- MoE構造(DeepSeek-V3、GPT-4と推定)がGPU効率の低い主要因である
- 数百の「専門家」ブロックがそれぞれ独立した行列積を必要とするため、小規模バッチでは各エキスパートの仕事量が少なく効率が落ちる
- すべてのエキスパートを十分に活用するには多くの同時リクエストが必要であり、サービスレベルでは大規模バッチが必須となる
- 短い待機(ウィンドウ5ms) ではエキスパートが頻繁にアイドル状態になり、長い待機(ウィンドウ200ms) では高効率を最大化できる
ディープパイプラインモデルのバッチ問題
- 数百層の大規模トランスフォーマー は、複数GPUにレイヤー単位で分割(パイプライニング)して実行する
- 1つのバッチ内のトークン数がパイプラインステップ数より少ない場合、「パイプラインバブル」が発生し、スループット低下につながる
- これを防ぐには大きなバッチ(長い待機)が必須であり、その結果 モデルの応答時間が長くなる
なぜ常にキューを満たせないのか
- 理論上は、多数の同時トラフィックで常にキューを埋めればバブルを回避できるように見える
- しかし、トランスフォーマーのAttention段階では行列サイズ(長さ)がすべて同じでなければバッチ化できないため、実運用で単一キューを完全に機能させるのは難しい
- また、FFNとattention段階を分離すると、メモリオーバーヘッド の急増とデータ移動の非効率という問題も生じる
要約と結論
- 大規模バッチ処理 はGPUコスト削減とスループット向上に不可欠だが、ユーザーの待ち時間は長くなる
- Mixture-of-Experts、大規模パイプライン構造 のモデルは、本質的に待機ベースの高効率バッチ環境に最適化されている
- ローカルのようにトラフィックが少ない環境 では、最適化された大規模バッチ構成が不可能なため、GPU効率が急低下し実行コストが上昇する
- OpenAI、Anthropic などが高速な応答性を示す理由 は次の可能性がある
- (1) MoEではない、より効率的な構造である可能性
- (2) バッチ/パイプライン最適化や高度な推論テクニックを適用している可能性
- (3) 必要以上に多くのGPUを投入して、速度を買っている構造である可能性
追加: プリフィルバッチと本文バッチの違い
- トランスフォーマーは、1ユーザーのプロンプトにおける プリフィル(長い入力)もバッチ実行でき、初期推論を高速化できる
- ただし本文で論じたバッチは、複数ユーザーのリクエストにおける 本格的なトークン生成段階 で発生する、スループットとレイテンシのトレードオフに関するバッチである
- プリフィルバッチは、本文で述べた同時大規模バッチと直接的な関係はない
参考事項
- 実際の推論システムでは、継続的バッチ処理(continuous batching) を併用し、バッチが埋まると即座に実行する
- しかし、根本的な throughput-latency トレードオフ の構造は同じように適用される
1件のコメント
Hacker Newsの意見