【マルチGPU】NVIDIA複数GPU AI推論環境構築ガイド(vLLM/SGLang対応)

問題の説明:大規模言語モデル推論におけるマルチGPU活用の必要性

大規模言語モデル(LLM)の推論をローカル環境で実行する際、モデルのパラメータ数が増大するにつれて、単一GPUのVRAM容量ではメモリ不足に陥ることが頻繁に発生します。例えば、70BパラメータクラスのモデルをFP16精度でロードするには、約140GB以上のVRAMが必要となり、これは単体のコンシューマー向けGPUではほぼ対応不可能です。この問題を解決し、より大規模なモデルを高速に推論するために、複数のGPUに計算とモデルを分散する「マルチGPU推論」が必須となっています。特にvLLMやSGLangといった高性能推論エンジンでは、テンソル並列(Tensor Parallelism)やパイプライン並列(Pipeline Parallelism)を活用することで、複数GPUを単一の大きな計算リソースとして扱うことが可能です。

結論:安定したマルチGPU推論環境構築のポイント

vLLMやSGLangで安定してマルチGPU推論を行うには、以下の3点が最も重要です。

  • 十分なGPUメモリの確保: 使用するGPUの合計VRAMがモデルサイズを上回るように、--tensor-parallel-sizeでGPU数を設定します。
  • NCCL通信の最適化: マルチGPU間のデータ転送を担うNCCLライブラリの適切なインストールと、タイムアウトエラーへの対処が必須です。
  • 共有メモリの適切な設定: Docker環境などでは、コンテナの共有メモリサイズ(--shm-size)をデフォルトより大きく(例: 20GiB)設定する必要があります。

具体的な手順:vLLMを用いたマルチGPU推論サーバーの起動

1. 基本環境の構築と確認

まず、システムに複数枚のNVIDIA GPUが正しく認識されていることを確認します。

$ nvidia-smi

すべてのGPUが表示され、ドライバーが正常に動作していることを確認してください。次に、NCCLを含む必要なライブラリがインストールされていることを確認します。vLLMの公式Dockerイメージを使用する場合は、これらは予め含まれています。

2. Dockerを用いたvLLMサーバーの起動(テンソル並列)

4枚のGPUを使用してモデルをロードし、テンソル並列で推論を行う例です。重要なのは--tensor-parallel-sizeオプションをGPU数(この例では4)に設定することです。

$ sudo docker run --runtime nvidia --gpus all 
  -v ~/.cache/huggingface:/root/.cache/huggingface 
  -p 8000:8000 
  --shm-size=20g 
  --env "HUGGING_FACE_HUB_TOKEN=<your_token>" 
  vllm/vllm-openai:latest 
  --model facebook/opt-125m 
  --tensor-parallel-size 4

ここで--shm-size=20gを指定している点に注意してください。vLLMのプロダクション環境では20GiBの共有メモリが推奨されており、これを設定しないとマルチGPU環境でプロセス間通信に失敗する可能性があります。

3. 並列化戦略の選択基準

vLLMの公式ドキュメントでは、分散推論戦略を以下のガイドラインに従って選択することを推奨しています。

  • まず、モデルを格納するのに十分なGPUメモリが確保できる���で、GPU数およびノード数を増やします。
  • テンソル並列サイズ(tensor_parallel_size)は、1ノード内のGPU数に設定します。
  • パイプライン並列サイズ(pipeline_parallel_size)は、使用するノード数に設定します。

一般的に、単一の物理サーバー(ノード)内で複数GPUを使用する場合は、テンソル並列が主要な手法となります。

よくあるトラブルと対処法

1. NCCL関連のエラー(接続タイムアウト、通信失敗)

マルチGPU実行時に最も頻発する問題です。以下の環境変数を設定することで、デバッグ情報を有効にし、タイムアウト時間を延長できます。

export NCCL_DEBUG=INFO
export NCCL_IB_TIMEOUT=22
export NCCL_P2P_DISABLE=1 # PCIeピアツーピア通信に問題がある場合

エラーメッセージにNCCL errorが含まれる場合は、まずこれらの設定を試してください。また、Dockerコンテナ内で実行する場合は、ホストのNCCLバージョンとコンテナ内のバージョンの互換性も確認が必要です。

2. 単一ノードでは動作するが、複数ノードでは失敗する

あるユーザーは、同一仕様のマシン2台(各4GPU)で、単体では4GPUのテンソル並列が成功したものの、2台を組み合わせた8GPU環境ではNCCLエラーが発生したと報告しています。このような場合、ノード間のネットワーク帯域幅とレイテンシ、およびファイアウォール設定が原因である可能性が高いです。InfiniBandや高速イーサネットなどの低遅延ネットワークの使用を検討し、ノード間の必要なポートが開放されていることを確認してください。

3. PCIe帯域幅とNVLinkの確認

テンソル並列の性能は、GPU間のデータ転送速度に大きく依存します。可能であればNVLinkで接続されたGPUを選択し、そうでない場合はPCIeレーン数が十分である(x16など)ことを確認します。以下のコマンドでNVLinkの状態を確認できます。

$ nvidia-smi nvlink --status

参考元

  • Parallelism and Scaling – vLLM: https://docs.vllm.ai/en/stable/serving/parallelism_scaling/
  • [NCCL Error] Tensor Parallelism with multi GPUs. Please · vllm-project/vllm · Discussion #7462: https://github.com/vllm-project/vllm/discussions/7462
  • Help for error when run vllm with tensor parallel – General – vLLM Forums: https://discuss.vllm.ai/t/help-for-error-when-run-vllm-with-tensor-parallel/655
  • NCCL error across 2 machines 2x4GPUs need advice – General – vLLM Forums: https://discuss.vllm.ai/t/nccl-error-across-2-machines-2x4gpus-need-advice/1846
  • [Docs] Document how to configure shared memory for multi GPU deployments · Issue #4259 · sgl-project/sglang: https://github.com/sgl-project/sglang/issues/4259

🔧 AI開発におすすめのGPU・パーツ

本記事の手順を快適に進めるための推奨スペック:

⚡ GPU環境をすぐに使いたいなら

ハードウェアの購入・セットアップなしで、すぐにGPU環境を使えるクラウドサービスがおすすめです。

  • RunPod — RTX 4090/A100/H100を即座に利用可能
  • Vast.ai — 最安のGPUクラウド、オークション方式で低コスト
  • RTX 5090をAmazonで見る — 自宅GPU環境を構築するなら
この記事は役に立ちましたか?