😎

現場で差がつく!ローカルLLM並列化の「泥臭い」実践ノウハウ

に公開

「並列化の理論はわかった、でも実際に動かすと全然速度が出ないし、すぐエラーで落ちる!」……そんな現場の叫びに応える、一歩踏み込んだ**「実戦ノウハウ編」**をお届けします。

並列化を成功させる鍵は、単に「並列にする」ことではなく、「ハードウェアの帯域」と「VRAMの奪い合い」をいかに制御するかにあります。

1. ハードウェア選定:PCIeの「レーン数」が死活問題

複数GPUを積めば速くなると思われがちですが、並列処理においてはGPU同士の通信速度が最大のボトルネックになります。

  • PCIe レーン数の罠:
    多くのコンシューマー向けマザーボードは、GPUを2枚刺すと「x8 / x8」動作になります。大規模モデルを並列化(Tensor Parallelism)する場合、GPU間で頻繁にデータを同期するため、この帯域不足が原因で「GPUが遊んでいる(計算待ち)」状態が発生します。
  • NVLinkの価値:
    もし中古のRTX 3090やプロ向けGPU(A6000等)を使えるなら、NVLinkブリッジは必須です。PCIe経由に比べて帯域が桁違いに広いため、並列化による速度低下を劇的に抑えられます。
  • 現場のTips:
    「4枚刺し」をするなら、ThreadripperやXeonのような「PCIeレーン数が多いCPU・マザーボード」を選ばないと、並列化の恩恵が帯域不足で相殺されてしまいます。

2. vLLMを使い倒すための「三種の神器」パラメーター

vLLMをデフォルト設定で動かすのは、フェラーリをローギアで走らせるようなものです。現場で必ず調整するパラメーターがこちらです。

パラメーター 役割と調整のコツ
--gpu-memory-utilization VRAM確保率。 デフォルト0.9。並列数を増やしたいなら0.95まで攻めますが、他のプロセス(OSや画面出力)があると即落ちします。
--max-num-seqs 最大同時並列数。 デフォルト256。ここを増やすと同時処理数は増えますが、VRAMが足りないと各リクエストの生成速度が極端に落ちます。
--enable-chunked-prefill 隠れた重要設定。 長いプロンプト(Aさん)が入ってきた時に、短い返答中(Bさん)の処理を止めないように小分けにする機能。応答の安定性が爆増します。

3. 「KVキャッシュ」と「量子化」の相関関係

並列処理の限界を決めるのはモデルの重さだけではありません。**「KVキャッシュ(推論中の記憶)」**がVRAMをどれだけ食うかです。

現場の知恵:FP8量子化の導入
2025年後半から標準化した「FP8」量子化は、モデルの重さを減らすだけでなく、KVキャッシュのサイズも半分にします。
これにより、同じVRAM容量でも「同時接続数を2倍」にできるため、スループット重視の現場ではもはや必須のテクニックです。

4. なぜか遅い?そんな時のチェックリスト

並列リクエストを投げているのに速度が出ない場合、以下の「現場あるある」を疑ってください。

  • Time to First Token (TTFT) の悪化:
    10人同時にリクエストを投げた際、最初の1文字目が出るのが遅いなら、それは「Prefill(入力解析)」フェーズでGPUが渋滞しています。--max-num-batched-tokens を下げて調整します。
  • プロンプト・キャッシュの未活用:
    RAG(外部知識参照)などで「同じ長い説明文」を全員が送っている場合、--enable-prefix-caching をオンにしてください。同じ文章の解析結果を再利用するため、並列時の負荷が劇的に下がります。
  • PythonのGIL(Global Interpreter Lock):
    実はvLLMなどは裏側でPythonが動いています。リクエストが多すぎると、GPUではなく「CPU(の1コア)」がリクエスト処理で悲鳴をあげていることがあります。

5. 推奨される構成例(2026年版)

  • 最強の個人開発機:
    RTX 5090 x 2枚 + NVLink(またはPCIe 5.0 x16接続)
    vLLMtensor_parallel_size=2 に設定し、Llama-3 70Bクラスを爆速で並列処理。
  • コスパ重視の共有サーバー:
    RTX 3090 (24GB) x 4枚(中古)
    vLLM の「マルチ・インスタンス」構成。各GPUに8Bクラスのモデルを独立して載せ、ロードバランサーでリクエストを振り分けるのが最も安定します。

まとめ:理論より「VRAMの空き」と「通信帯域」

ローカルでの並列化は、**「いかにGPUをサボらせないか」**の戦いです。まずは nvidia-smivllm のログを眺めながら、自分の環境の「限界突破ポイント」を探るのが一番の近道です。

Discussion