メインコンテンツへスキップ
A 70B model at FP16 needs ~140 GB of VRAM. No single consumer GPU holds that. Sharding is how inference engines split a model across multiple GPUs — or multiple machines — so you can serve models that physically cannot fit on 1 device, or serve more users than 1 device handles. 本ページでは4のシャーディング戦略、それぞれの仕事の分担方法、そしてご自身のハードウェアに最適な戦略について解説します。TPとPPの選択に迷う場合は、テンサー並列化とパイプライン並列化の違いをご覧ください。

なぜシャーディングが必要なのか?

You reach for sharding when 1 of 4 things is true:
  1. The model is too large for 1 GPU. A 70B dense model at FP16 needs ~140 GB. Even at Q4 quantization (~35 GB), it fills a single RTX 4090 (24 GB). You need at least 2 GPUs to hold the weights.
  2. You need lower latency per token. When every GPU contributes to each token simultaneously, the wall-clock time per token drops.
  3. スループットを向上させたい場合 GPUの数が増えれば同時に処理できるユーザー数も増加します。
  4. 冗長性が必要な場合 ロードバランサーの背後で2個のレプリカを運用すれば、1基のGPUに障害が生じてもサービス停止を防げます。
モデルがすでに1GPUに収まっておりスループットにも問題がない場合は、そのまま1GPUを使い続けましょう。シャーディングは複雑さや通信オーバーヘッドを増加させるからです。

GPUメモリが実際にどのように消費されるか

シャーディング戦略を選ぶ前に、VRAMを消費する要素が何かを把握しておきましょう。単にモデルの重みだけではありません。 容量が24ギガバイトのRTX 4090で70B Q4モデルを実行すると、重みデータのサイズは約35ギガバイトにもなります。これでは1 GPUには到底収まりません。TPを2に設定すると、各GPUに格納される重みデータは約17.5ギガバイトとなり、KVキャッシュやその他のオーバーヘッド用に約6.5ギガバイトが残ります。この量であれば短い文脈の処理や少数の同時接続ユーザーに対応可能ですが、それ以上は難しいでしょう。
実際に利用可能なメモリ量は総VRAM量より少ない。DGX Spark(統合メモリ量 128ギガバイト)では、OSやランタイムが必要分を確保した後、モデルやKVキャッシュ用に約110ギガバイトしか使えない。個別GPUの場合、vLLMの --gpu-memory-utilizationパラメータ(デフォルト値は 0.90)がこの量を制御する。メモリ不足に陥る場合はこの値を下げて設定する必要がある。
MoEモデルでは内訳が異なり、エキスパートプレーンが大部分を占める。 こうした理由からエキスパート並列処理が存在するのだ。全ての231ギガバイト分のエキスパートを各GPUに読み込む代わりに、各GPUは割り当てられたエキスパートのみを保持する。下記の エキスパート並列処理 もご覧ください。

2つの判断基準:まず収容可能にし、次に高速化する

シャーディング機能は以下の2つの質問に順に答える 収容可能にする — 重みデータ(およびKVキャッシュ用の余裕領域)をGPUメモリの予算内に収める
  • まず量子化を行う。 FP16形式からQ4形式へ変換することで重みデータのメモリ使用量が約4倍削減できる。これが最も低コストで効果的な手段だ。 量子化ガイド も参照されたい。
  • GPU間でシャーディングする。 量子化だけでは不十分な場合、TPやPP、EPを用いてモデルを分割する。
  • Prune experts (MoE only). For MoE models with 256 experts where only 6 fire per token, REAP-style expert pruning cuts routed-expert weights roughly in half without touching active compute.
高速化を実現 — モデルが収まるようになったら、トークンごとのバイト数とデコード手順を削減しましょう。
  • 適切な並列化方式を選ぶ TPはトークンごとのレイテンシを最小にします。PPは通信速度が遅い環境でも耐性があります。DPはスループットを増大させます。
  • Use the model’s documented speculative path. For DeepSeek-V4-Flash-0731, enable the bundled DSpark module with the official vLLM or SGLang flags. Do not configure a separate draft checkpoint. See model serving and scaling.
  • KVキャッシュとバッチサイズを調整 KVキャッシュの余裕が多いほど同時接続可能なユーザー数が増えます。DGX Sparkメモリ調整もご参照ください。

The 4 sharding strategies at a glance

DeepSeek-V4-Flash-0731は実用的なシャーディング例です。13B個のパラメータのみが実際の計算に使われますが、全284B個のパラメータ分の重みメモリが必要です。DeepSeek V4 Flashローカルハードウェアにて各2デバイス経路の最低メモリ要件や実用性を確認できます。

テンサー並列化:GPU間でレイヤーを分割する手法

テンサー並列化では各レイヤーの重み行列が複数のGPUに分散される。各GPUは各レイヤーの一部のみを保持し、全GPUが同一トークンの処理を同時に行う。
各レイヤーの処理後、GPU群はAllReduce処理を実行し、部分結果を統合して完全な出力を生成する。これにより各トークン処理のレイテンシが低く抑えられるが、GPU間の高帯域幅通信が必須となる。 Memory: each GPU holds 1/N of the model weights, where N is the TP degree. A 70B model at Q4 (~35 GB) with TP=2 puts ~17.5 GB of weights per GPU. レイテンシ:トークン単位で最も低い値となる。全GPUが各トークンの計算に参加するため、実際の処理時間は計算時間とAllReduce同期時間の合計となる。 Best for: 2–4 GPUs connected by NVLink or a fast PCIe bus. The 200Gb/s QSFP link between 2 DGX Sparks is ideal. vLLMフラグ: --tensor-parallel-size 2
PCIe delivers 3–5× less bandwidth than NVLink for AllReduce operations. Tensor parallelism over PCIe still works — 2× RTX 4090 at TP=2 is a common setup — but expect 20–30% lower decode throughput than the same model on NVLink-connected GPUs.

Example: 70B on 2× RTX 4090

各GPUには約17.5ギガバイト分のQ4重みが格納される。残りの約6.5ギガバイトは各GPUにおけるKVキャッシュやCUDAグラフ用に使われる。

パイプライン並列化:レイヤーを順次分割する方式

パイプライン並列化(PP)では隣接するレイヤー群を異なるGPUに割り当てる。GPU 0はレイヤー 0~19を、GPU 1はレイヤー 20~39を担当する。トークンは組立ラインのようにパイプライン内を流れていく。
各GPUは割り当てられたレイヤーを処理した後、活性化値を次の段階へ渡す。GPU間でやり取りされるデータは単一レイヤー境界の活性化テンソルであり、TPで交換される全重み行列よりもはるかに小さい。 メモリ: 各GPUは自身に割り当てられたレイヤー群を保持する。PPが2の場合、GPU 0はモデルの前半部分を、GPU 1は後半部分を保持する。 遅延時間: 各段階の遅延が加算される仕組みです。トークンはすべての段階を順番に通過する必要があります。PPが2の場合、全体の遅延時間は各段階の遅延時間の合計値となります。 通信: 隣接する段階間での点対点通信のみ。隣接するGPU同士しか通信しないため帯域要件は低い。このためPPは速度が遅い相互接続環境でも利用可能だ。例えばPCIeやイーサネット、あるいはマシン間のネットワークリンクでも問題ない。 バブル問題: バッチサイズが小さい場合、先行するGPUがレイヤー処理を行う間に後続のGPUは待機状態となる。PPが2かつバッチサイズが1の場合、GPU 1はGPU 0がすべてのレイヤー境界処理を終えるまで待たなければならない。バッチサイズが大きいほどこの問題は緩和され、vLLMの継続的バッチ処理機能がパイプラインを埋めるのに役立つ。 vLLMフラグ: --pipeline-parallel-size 2

いかなる場合にPPがTPよりも有利となるか

以下の場合にはテンサー並列化よりもパイプライン並列化を利用すべきだ:
  • GPUが異なるマシン上にあり、ネットワークで接続されている場合(10GbE~100GbE)。
  • GPU同士はPCIeで接続されており、モデル自体も十分に小さいため、パイプライン並列化によるメモリ消費の増加分がテンソル並列化のためのAllReduce通信コストよりも少なくて済む。
  • 複数の3+ノードを連結して利用する場合、これら全ノードでテンソル並列化を行うと相互接続帯域が飽和してしまう。

データ並列化とは、複数のGPU上で同一のモデルを実行することだ。

データ並列化(DP)では各GPUにモデルの完全なコピーが配置され、受信したリクエストが各GPUに分散される。推論時にはGPU間の通信は一切発生せず、各GPUはそれぞれ独自に処理を実行する。
Memory: N copies of the full model. A 7B model at Q4 (~4 GB) with DP=4 uses 16 GB total across 4 GPUs. This is the expensive part — you trade memory for throughput. レイテンシ: 単一GPUでの推論時と同等だ。各GPUはそれぞれ独立してトークン処理を行う。 スループット: 線形に増加する。4個のレプリカを用いれば、同時接続可能なユーザー数も約4倍になる。 適しているケース: 多数のユーザーに同時にサービスを提供する必要がある場合で、1個のGPUに収まるモデル(7Bや14B、場合によっては強力な量子化処理を施した32Bも含む)に最適です。 vLLMの設定方法: 複数のvLLMインスタンスを起動し、その前段にロードバランサーを配置する。
その後nginxやHAProxy、あるいは任意のラウンドロビン型バランサーを用いて、/v1/chat/completions件のリクエストを両ポート間で分散させる。

エキスパート並列化はミックスド・オブ・エキスパーツモデル向けの手法だ。

Expert parallelism (EP) applies only to mixture-of-experts (MoE) models. In an MoE model, each token activates only a small subset of the model’s “experts” — for example, Qwen3-235B has 256 routed experts but only 6 fire per token (~22B active parameters out of 235B total). EP puts different experts on different GPUs so you do not waste memory storing inactive experts everywhere.
Memory: each GPU holds only its assigned experts. The dense stack (attention, embeddings, shared layers — ~14 GB at 4-bit for Qwen3-235B) is replicated on every GPU. The expert planes (~231 GB at 2-bit) are sharded. This is far more memory-efficient than TP, which would replicate all 256 experts on every GPU even though most sit idle for each token. 通信: GPU間での全対全通信となる。あるトークンのルーターが別のGPU上のエキスパートを選択した場合、その活性化情報をそちらへ送信する必要がある。その結果、一部のトークンはローカル処理される一方で他のトークンは複数のGPU間を移動するという変動的な通信パターンが生じる。 vLLM flag: --enable-expert-parallel combined with --tensor-parallel-size
DGX Sparkが備える 128 GBの統合メモリは、エキスパート並列処理に最適です。約110 GBの利用可能メモリを備えた単一のSparkノードであれば、高密度なモデル層や多数のエキスパートをローカルに収容できるため、EP処理に伴うGPU間通信の負荷を軽減できます。Qwen3-235Bのようなモデルでは1ノードでもEP処理だけでは不十分な場合があるため、エキスパートのプリーニング処理と2ビット精度のエキスパート量子化を組み合わせることで、各ノードのメモリ消費量を許容範囲内に抑えることが可能です。ハードウェアの詳細については、DGX Sparkの利用事例をご覧ください。

各戦略の組み合わせ:TP、PP、DP

GPUが多数存在する場合、これらの戦略を階層的に組み合わせる。
  • ノード内TP: 相互接続速度が速い環境で用いる。
  • ノード間PP: 相互接続速度が遅い環境で用いる。
  • スループット向上用DP: TPとPPを組み合わせた構成の複数レプリカを実行する。

4個のGPU:TP=2+PP=2

この構成により2段階のパイプラインが形成され、各段階で2-wayのテンサー並列処理が行われる。GPUの0番と1番が前半のレイヤーをTP方式で処理し、2番と3番が後半のレイヤーをTP方式で処理する。

8個のGPU:TP=4+DP=2

Run 2 replicas of a 4-way tensor-parallel setup. Each replica uses 4 GPUs for TP, and a load balancer distributes requests between the 2 replicas. This gives you the low latency of TP=4 with 2× the throughput.

大まかな指針として

  1. まずTP — 利用可能な中で最速の相互接続手段(NVLink、QSFP、PCIe)を活用する。
  2. 次にPP — より速度の遅いリンク(イーサネットやマシン間ネットワーク)を利用する。
  3. 最後にDP — より高いスループットが必要で、レプリカ用に余剰なGPUがある場合に用いる。
vLLMではTP × PP = total GPUs used for one replicaが必須となる。--tensor-parallel-size 4 --pipeline-parallel-size 2を設定すれば、vLLMは8基のGPUを使って1個のレプリカを作成する。

シャーディングの判断基準表

70B台、2基分のRTX 4090(PCIe接続)

PPが適している。 PCIeの帯域幅では効率的なオールリデュースが行えない。パイプライン並列処理ならこのボトルネックを回避できる。

70B台、2基分のA100(NVLink接続)

TPが適している。 NVLinkならオールリデュースに十分な帯域幅が確保でき、トークンごとの遅延も低減できる。

235BのMoE、DGX Spark

EP. ネイティブなMoE処理機能 — 各GPUは全モデルではなく自身が担当するエキスパートのみを保持します。つまり全235Bを保持する必要はありません。

7B、高負荷なトラフィック環境

DP. モデルは単一の1 GPUに収まります。スループット向上のため複数のGPUでデプロイします。

70B、4台のA100マシン(NVLink接続)

TP=4 (レイテンシよりスループットを重視する場合はTP=2 + DP=2でも可)。

70B台、2台のマシン

PP=2. マシン間のネットワーク帯域はTP実行には不十分です。パイプライン方式なら帯域制限の問題を回避できます。

実際に使えるコマンド例

シャーディングが正しく機能しているか確認する方法

各GPU上でnvidia-smiを実行します。参加している全GPUでモデル用のメモリが割り当てられているはずです:
TP=2の場合、両GPUでのメモリ使用量はほぼ同等になるはずです。PP=2の場合、モデルの前半層と後半層のサイズが異なればメモリ配分も不均等になる可能性があります。

よくある失敗例

速度が遅いPCIe環境でのTPの利用法 AllReduce処理では各レイヤーの後で活性化データが送信される。PCIe 3.0を使用する場合、これがデコード処理のスループットを著しく低下させる。GPUにNVLinkが搭載されていない場合は、PP方式も試して比較してみるべきだ。 バッチサイズ 1を用いたPPの利用法 一度に処理されるトークン数が 1個のみの場合、パイプライン内で無駄な計算が大量に発生する。vLLMの継続的バッチ処理機能はこの問題を緩和してくれるので、パイプラインが十分に活用されるよう十分な数の同時リクエストを送信する必要がある。 DP方式ではモデルメモリがN倍必要になることを見落とさないこと 4個の 70B Q4モデル(各々約35GB)を運用する場合、合計で 140GBのメモリが必要となる。レプリカを追加する前に必ずメモリ計画を立てるべきだ。 KVキャッシュの存在を考慮しないこと GPUメモリの使用量はモデル重みだけではない。KVキャッシュが残りのメモリを占めることになる。2個のGPUに重みを分散配置する際、KVキャッシュも同様に分散されるため、同時接続可能なユーザー数が実質的に倍増する。しかし重み分のみを考慮してメモリを確保するとメモリ不足に陥る。分散配置方式を選定する前に、重み分・KVキャッシュ分・さらに約3GBのオーバーヘッド分も含めたメモリを確保する必要がある。 TPとPPの適用順序を誤らないこと vLLMでは各パイプライン段階内でTPが適用される。--tensor-parallel-sizeには単一ノード内のGPU数を、--pipeline-parallel-sizeにはノード数を設定する。逆に設定するとノード内でPPが適用され高速な相互接続が無駄になり、またノード間でTPが適用されることでネットワークがAllReduce処理で飽和してしまう。

次に行うべき手順

テンサー並列処理とパイプライン並列処理の違い

TPとPPの詳細な比較および性能ベンチマーク結果

DGX Sparkを一台使用する場合と二台使用する場合

いつ二つ目のスパークを追加し、どのようにして200ギガビット/秒のリンクを設定すればよいか。

DGX Sparkにおけるメモリチューニング方法

分散配置時のKVキャッシュの計算方法およびメモリパラメータについて

モデルの提供とスケーリング

推論エンジンがバッチ処理や精度管理、並列処理をどのように実施するかについて。