llama.cpp を使用したマルチGPU LLM:tensor-split 2× RTX 3090
24 GBのRTX 4090では、256kトークンのコンテキストで、2026年の最上位モデルをQ8フル品質で実行するには不十分です。中古の3090 2枚(48 GB)なら、より低コストで対応できます。ただし、モデルをカード間で分割する方法、split layerとtensor parallelの選択、および長時間安定して動作するためのハードウェア設定について理解が必要です。本ガイドでは、一般的な3つのツール(llama.cpp、Ollama、vLLM)と落とし穴を扱います。
マシンを選んでいるところですか? 予算別のおすすめ →
ローカルAI向けでコストパフォーマンスに優れた選択肢: GMKtec EVO-X2 64GB / 1TB (Ryzen AI Max+ 395).
ミニPCはコンピューター一式です。利用可能なメモリとエンジンの互換性を確認してください。macOS/MLXやCUDAの代替にはなりません。
なぜこの選択か? 完全な解説はこちら: GMKtec EVO-X2 64GB / 1TB (Ryzen AI Max+ 395) →
800 €から3,500 €まで、予算別にすべてのオプションを比較 →
低予算向け: RTX 5060 ・大規模モデル: RTX 5090 · Mac Studio.
外出先では: ローカル AI 向けのノートパソコンはどれ? →
アフィリエイトリンク — あなたに追加費用はかかりません。Amazonパートナーとして、ローカルLLMナビは、所定の条件を満たす購入から利益を得ています。
#マルチGPUを使う理由
- モデルのサイズ > GPU 1枚のVRAM容量
- Qwen3-Coder 30B-A3B でQ8 = 32GBであり、256kのコンテキストを有するとKVキャッシュは大きく増加します。一般向けGPUのいずれも対応できません。RTX 5090 (32GB) 以外は、大きなコンテキストを扱う余裕がありません。
- チームのスループット
- vLLMによるテンソル並列で2枚のカードを使用すると、並列で2倍のユーザー数を処理できます。
- 冗長性
- 一方のカードが故障しても、もう一方は縮退モード(より小さいモデル)で動作を続けます。
- Fine-tuning
- 24BモデルのLoRAには、モデル、オプティマイザ、勾配を合わせて30GBが必要です。24GBのGPUが2枚あれば余裕があります。
#2つの戦略:レイヤー分割 vs テンソル並列
- レイヤー単位の分割(layer parallelism)
- 1〜40層をGPU 0に、41〜80層をGPU 1に配置します。層から次の層へ移る際に、活性化ベクトルをコピーします。レイテンシはわずかに高くなります。llama.cppとOllamaが対応しています。
- テンソル並列
- 各層を分割し、その各部分を複数のGPUに振り分けて並列に処理します。カード間の高速な通信が必要です。性能は高くなりますが、構成は複雑です。vLLMとExLlamaV2が対応しています。
#ハードウェア:細部に注意してください
- PCIe
- 各GPUには最低でもPCIe x8接続が必要です。CPUに直結するPCIe 5.0 x16スロットを2基備えたマザーボードが必要で、x16とチップセット経由のx4という構成ではいけません。
- 電源
- 2× 3090 = 700 W(GPUのみ)。CPU、RAM、SSDを加えると、1200~1600 W(80+ GoldまたはPlatinum)を目指してください。
- 間隔
- RTX 3090/4090は3スロットを占有します。7スロットのマザーボードでは、2枚のカードが接触します。構成を管理しやすくするには、PCIeライザーや水冷を利用します。
- 通気性
- 2枚のグラフィックカードに負荷がかかっていると、通気の悪いケースでは85〜90°Cに達します。サーマルスロットリングが起きると、性能が30%低下します。
#1. llama.cppによるマルチGPU
--tensor-split はGPUごとのレイヤーの割合を指定します。同一の2枚のカードの場合:0.5,0.5。3090 24 GBと4070 12 GBの場合:0.67,0.33(3090が2/3を担当)。
#2. OllamaによるマルチGPU設定
Ollamaは複数のGPUを自動検出し、利用可能なすべてのGPUに処理を分散します。調整できる設定項目は少ないものの、特別な設定なしでそのまま動作します。
#3. vLLMによるテンソル並列化
vLLM は各レイヤーを 2 つの GPU に並列で分散します。集計スループットは 1 つの GPU と比べてほぼ倍になり、通信オーバーヘッドは約 10% です。
#NVLinkは役に立ちますか?
NVLink は、高帯域幅の GPU 間接続(3090 で 112 GB/s)を可能にします。一部の RTX 3090 には NVLink コネクタがありますが、4090 には搭載されなくなりました。RTX Quadro / Aシリーズにはすべて搭載されています。
- llama.cppのsplit-layerによる影響
- 非常に低い。層間のデータ転送量は小さいです。
- vLLMのテンソル並列化による影響
- 効果はより大きく、NVLinkを有効にするとスループットが5〜15%向上します。
- ファインチューニングへの影響
- 影響は大きく、勾配の通信負荷が高くなります。複数GPUでのファインチューニングを検討している場合は、NVLinkを推奨します。
#期待されるパフォーマンス
2×RTX 3090上で、Qwen3-Coder 30B-A3B Q8_0、llama.cppを使用し、レイヤーを分割:
- シングルプロンプト
- 約55 tok/s。単一の3090ではQ8形式のモデル(32 GB)を保持できません。速度は依然として高いです。アクティブパラメータが3BのMoEだからです。
- 最初のトークンが出るまでの遅延
- 約200 ms(単一 GPU 上の小型モデルでは約80 ms)。
- 同じGPUをvLLMのテンソル並列処理で使用
- 単一リクエストでは約65トークン/秒ですが、10件の並列リクエストでは合計約400トークン/秒です。
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。