LLM並列化方式

Definition:LLM Parallelism

LLM並列化方式(LLM Parallelism)とは、LLMの推論・学習処理を複数のGPUなどの計算資源に分散させるための方式であり、データパラレル(DP)テンソルパラレル(TP)パイプラインパラレル(PP)などに分類される。データ、モデルのテンソル、Transformerの層など、異なる対象を分割することで、処理性能の向上、モデルウェイトの分散、GPUメモリの効率的な利用、および大規模モデルの実行を実現するものである。

基本3方式

並列化方式分割対象主な目的
データパラレル(DP)データ/リクエストスループット向上
テンソルパラレル(TP)テンソル/ウェイト計算・メモリ分散
パイプラインパラレル(PP)Transformer層モデルの分散

発展的方式

並列化方式分割対象主な目的
Expert Parallelism(EP)MoEのExpertExpertの分散配置
Sequence Parallelism(SP)Sequence(トークン列)シーケンス方向の計算・メモリ分散
Context Parallelism(CP)長大なContext長コンテキストの計算・メモリ分散

LLM並列化方式の基本的な考え方

LLM並列化方式とは、巨大な言語モデルの計算、モデルウェイト、入力データ、推論時のワーキングメモリなどを複数のGPUへ分散させるための方式である。LLMの規模が単一GPUの計算能力やメモリ容量を超えるにつれて発展してきたものであり、単に「計算を速くする技術」ではなく、「1つのモデルを有限なGPU資源上でどのように実行可能な形へ分解するか」という分散計算の問題である。

基本となる方式は、データパラレル(DP)、テンソルパラレル(TP)、パイプラインパラレル(PP)の3つである。これらはそれぞれ、データ、テンソル、モデルの層という異なる対象を分割する。その後、MoEや長大なコンテキストなどLLM固有の問題に対応するため、Expert Parallelism(EP)、Sequence Parallelism(SP)、Context Parallelism(CP)などが発展した。

データパラレルとその限界

初期のニューラルネットワークでは、複数GPUを利用する最も基本的な方法としてデータパラレルが広く用いられた。各GPUに同じモデルを複製し、異なるミニバッチを処理させ、計算した勾配をAll-Reduceによって同期する方式である。モデル自体が1台のGPUに収まる限り、GPUを追加することで学習データの処理量を増やせるため、水平スケーリングとの親和性が高い。

しかし、TransformerとLLMの巨大化によって、モデルそのものが1台のGPUに収まらない問題が顕在化した。数十億、数百億、さらに1,000億パラメータを超えるモデルでは、「同じモデルをGPUごとに複製する」という素朴なデータパラレルだけでは対応できない。パラメータ、勾配、Adamなどのオプティマイザ状態をすべての GPU が重複して保持するため、GPU数を増やしても1 GPU当たりのメモリ要求は減らないという冗長性が本質的な限界である。

ZeRO/FSDPによるデータパラレルの高度化

この冗長性を解消するために発展したのが、Zero Redundancy Optimizer(ZeRO)およびそれに相当するPyTorchのFully Sharded Data Parallel(FSDP)である。これらはデータパラレルの一種でありながら、モデル状態(オプティマイザ状態・勾配・パラメータ)をGPU間で重複なく分割保持する点でモデル並列化的な性質を併せ持つ。

ZeROは段階的にシャーディング範囲を拡大する。ZeRO-1はオプティマイザ状態のみを分割し、ZeRO-2はこれに勾配の分割を加え、ZeRO-3(FSDPも同様の設計)はパラメータ自体も分割する。ZeRO-3では各GPUは自分が担当するパラメータの断片のみを常時保持し、計算に必要な瞬間だけAll-GatherによってGPU間で完全な重みを再構成し、計算後は再び破棄する。これにより、GPU当たりのモデル状態メモリはGPU数にほぼ反比例して削減されるが、その代償として通信量が増加する。

TPやPPが「モデルそのものをどう分割配置するか」という静的な構造分割であるのに対し、ZeRO/FSDPは「同じモデルを複製しつつ、複製に伴うメモリ冗長性だけを取り除く」という発想であり、DPとモデル並列化の中間に位置する技術と捉えることができる。

テンソルパラレルの登場

テンソルパラレルは、TransformerのLinear層やAttentionなどを構成する巨大なテンソルをGPU間で分割する方式である。Megatron-LMによって大規模Transformerの実用的な並列化手法として確立され、現在のLLM基盤における重要な技術となっている。

例えば重み行列を4分割すれば、4台のGPUがそれぞれ異なる部分を保持して計算する。MLP層では列方向分割と行方向分割を組み合わせることで、層内では通信を発生させず、層の出力段で1回のAll-Reduceのみを行う設計が採られている。これによりモデルウェイトそのものを分散できるため、単一GPUには収まらないモデルを実行できる。また、同じモデルをより多くのGPUに分割すれば、1 GPU当たりのウェイト占有量が減少するため、推論時にはKV Cacheなどのワーキングメモリに利用できるGPUメモリを増やすこともできる。

従って、TPの理論的意味は、単なる計算の並列化ではない。TPは、モデルウェイトと計算をGPU群へ分解し、GPUメモリという有限資源の中で「ウェイト」と「動的なワーキングメモリ」の配分を変える仕組みでもある。ただし、TPは層ごとにAll-Reduce通信を挟むため、GPU間の帯域幅に強く依存し、一般にNVLinkなど高速な相互接続を持つ同一ノード内に閉じて構成されることが多い。

パイプラインパラレルによるモデルの層分割

テンソルパラレルとは別の方向からモデルを分割するのがパイプラインパラレルである。Transformerの前半の層をGPU 0、次の層をGPU 1というように、モデルを層方向に分割する。入力をパイプライン状に流すことで、複数GPUを同時に稼働させる。

PPの理論的意味は、モデルを「横方向のテンソル」ではなく「深さ方向の層」に分解することにある。GPU間の通信はステージ境界での活性化の受け渡しのみであり、TPに比べて通信量が少なく、ノードをまたいだ構成にも適する。一方で、あるGPUが計算している間に別のGPUが入力待ちで遊休状態になる「パイプラインバブル」が発生しやすい。これを抑えるため、マイクロバッチに分割して流し込むGPipe方式や、前向き計算と後ろ向き計算を交互に1回ずつ進めるone-forward-one-backward(1F1B)方式など、バブル削減を目的としたスケジューリング手法が用いられる。

TPとPPを組み合わせれば、例えば各ステージをさらに複数GPUへテンソル分割できるため、非常に大規模なモデルを多数のGPUへ配置できる。

三方式の統合

この段階で、LLMの並列化は単一の方式ではなく、複数の分割軸を組み合わせる多次元並列化へ発展した。DPはモデルの複製方向、TPはテンソル方向、PPは層方向を担当する。例えばTP=4、PP=2、DP=4なら、1つのモデルをTPとPPで8 GPUに分割し、それを4組複製するという構成になる。さらにDP方向にZeROを適用すれば、複製されたレプリカ間でオプティマイザ状態や勾配の冗長性も削減できるため、3D並列化とZeROを組み合わせた4D並列化と呼ばれる構成も広く用いられている。

したがって、LLMのGPU構成は単純な「GPUを何枚使うか」ではなく、どの対象を、どの方向に、何分割するかという構成問題になった。これがLLM並列化の理論的な重要性である。

MoEによるExpert Parallelism

MoE(Mixture of Experts)の普及によって、新しい並列化軸が生まれた。MoEでは多数のExpertを持つ一方、各トークンがすべてのExpertを計算するわけではなく、Routerによって一部のExpertだけが選択される。そこでExpertをGPU間に分散配置するExpert Parallelism(EP)が発展した。学習・推論時には、各トークンがルーティングされたExpertを保持するGPUへAll-to-All通信によって転送され、当該GPU上で計算された後、元のGPUへ送り返される。

EPは、従来のTPが「1つのテンソルを分割する」のに対し、「異なるExpertを異なるGPUへ配置する」という考え方である。これにより、総パラメータ数を大幅に増やしながら、1トークン当たりの計算量を抑えるMoEの特性を分散システム上で活用できる。

Sequence ParallelismとContext Parallelismの違い

両者はともに「シーケンス方向の分割」と呼ばれるが、対象とする範囲が異なる別個の技術である。

Sequence Parallelism(SP)は、Megatron-LMのTPを補完する技術として提案されたものである。TPはAttentionやMLPのLinear層を分割するが、LayerNormやDropoutはトークン間に依存しない演算であるにもかかわらずTPでは分割されず、各GPUに同じ活性化が重複して保持されていた。SPは、この非TP部分の活性化のみをシーケンス方向に分割することで、追加の計算・通信コストをほとんど増やさずに活性化メモリの冗長性を削減する。SPは基本的にTPグループ内で完結する補助的な最適化であり、単独で使われるものではない。

これに対しContext Parallelism(CP)は、LayerNormやDropoutに限らず、モデルへの入力そのものと、ほぼすべての活性化をシーケンス長方向に分割する、より広範な分割方式である。長大なコンテキストではKV Cacheや中間活性化が入力長に比例して増大し、単一GPUのメモリを圧迫するため、CPはトークン列そのものを複数GPUに分割して保持する。Attention以外の演算(Linear、LayerNormなど)はトークン間の依存がないためそのまま計算できるが、Self-Attentionでは各トークンのQueryが系列全体のKey・Valueを必要とするため、GPU間でKVをAll-Gatherし、逆伝播ではReduce-Scatterする通信が必要になる。

すなわちSPは「TPが分割し残した一部の活性化を埋め合わせる補完技術」であり、CPは「入力とほぼ全活性化をシーケンス方向に分割する独立した並列化軸」である。両者は目的を共有しつつも分割範囲が異なり、混同すべきではない。

LLM並列化の理論的意味

以上の発展を一つの視点から見ると、LLM並列化とは「巨大な計算を複数GPUに分散すること」だけではない。より本質的には、モデルウェイト、オプティマイザ状態、入力データ、計算、KV Cache、Expert、Transformer層など、異なる資源・計算構造を複数のGPUへ写像する資源分解・配置問題である。

特に推論では、モデルウェイトは基本的に固定であるのに対し、KV Cacheなどのワーキングメモリはリクエスト数やコンテキスト長によって大きく変動する。このため、最適なGPU構成も負荷によって変化する。TPを大きくすればウェイトをより多くのGPUへ分散でき、GPU当たりのウェイト占有量を減らせる一方、層ごとのAll-Reduce通信のコストは増大する。DPを大きくすればレプリカを増やしてスループットを高められるが、各レプリカにモデルウェイト(あるいはZeROによるその断片と再構成コスト)を保持する必要がある。

水平スケーリングからElastic Parallelismへ

現在のLLM Servingでは、TPを固定し、DPのレプリカ数を増減させる水平スケーリングが基本的な方法である。例えばTP=4なら、4 GPUを1つの実行単位として、8 GPU、12 GPU、16 GPUと増やしていく。しかし、この方式ではGPUの利用粒度がTPサイズに制約される。

例えば実際の負荷が5 GPU相当であるにもかかわらず、固定TP=4の構成では8 GPUを必要とするなら、GPU資源の一部が余る。これに対して、負荷に応じてTPとDPの組み合わせ自体を変更できれば、5 GPUの構成を選択することも可能になる。この発想は、単純な水平スケーリングを超えたElastic Parallelism、すなわち負荷に応じて並列化構成そのものを動的に変更する考え方につながる。

したがってLLM並列化の歴史は、単に「GPUを増やす技術」の歴史ではない。データを分割するDPから始まり、その冗長性を除くZeRO/FSDP、モデルを分割するTP・PP、さらにExpertやContextを分割するEP・SP・CPへと分割対象を拡張し、最終的にはモデル、計算、メモリ、データ、GPU資源を負荷に応じて動的に再配置する方向へ進んでいると捉えることができる。

Mathematics is the language with which God has written the universe.





















LLM並列化方式 通信機器の歴史 CPUの歴史 Intel CPUの栄枯盛衰 NVLinkとSwitch LLMの世代