上級 22 分パフォーマンス

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)と落とし穴を扱います。

マシンを選んでいるところですか? 予算別のおすすめ →

著者 Mohamed Meguedmi·更新 2026-08-27·Windows・macOS・Linuxでテスト済み
推奨ハードウェア

ローカル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が対応しています。
i
経験則
シングルユーザー向けおよびシンプルさのために:層ごとの分割(llama.cpp/Ollama)。マルチユーザー向けのサービングおよびスループットのために:テンソル並列(vLLM)。

#ハードウェア:細部に注意してください

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

レイヤー単位の分割
./build/bin/llama-cli \
  -m ./models/qwen3-coder-30b-a3b-q8_0.gguf \
  -ngl 99 \
  --split-mode layer \
  --tensor-split 0.5,0.5 \
  -p "..."

--tensor-split はGPUごとのレイヤーの割合を指定します。同一の2枚のカードの場合:0.5,0.5。3090 24 GBと4070 12 GBの場合:0.67,0.33(3090が2/3を担当)。

行分割(場合によっては速い)
./build/bin/llama-cli \
  -m ./models/qwen3-coder-30b-a3b-q8_0.gguf \
  -ngl 99 \
  --split-mode row \
  ...

#2. OllamaによるマルチGPU設定

Ollamaは複数のGPUを自動検出し、利用可能なすべてのGPUに処理を分散します。調整できる設定項目は少ないものの、特別な設定なしでそのまま動作します。

便利な変数
# Limiter à certains GPU
export CUDA_VISIBLE_DEVICES=0,1

# Ou pour AMD
export ROCR_VISIBLE_DEVICES=0,1

systemctl restart ollama
割り当てを確認する
ollama ps
# Doit afficher le modèle réparti : PROCESSOR = 100% GPU,
# réparti sur les deux cartes vu par nvidia-smi

#3. vLLMによるテンソル並列化

vLLMを2つのGPUで起動
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen3-Coder-30B-A3B-Instruct \
  --tensor-parallel-size 2 \
  --quantization awq \
  --dtype auto \
  --port 8000

vLLM は各レイヤーを 2 つの GPU に並列で分散します。集計スループットは 1 つの GPU と比べてほぼ倍になり、通信オーバーヘッドは約 10% です。

→
vLLM用に同じカードを用意
テンソル並列化には、同一のGPUを使うのが理想的です。RTX 3090を2枚、または4090を2枚:問題ありません。3090と4070の組み合わせでは、vLLM は遅い方を基準にするため、速い方のGPUを十分に活用できません。

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トークン/秒です。
!
PCIeのボトルネック
お使いのカードの1枚がPCIe x4(例:チップセットに接続されたセカンダリスロット)の場合、レイヤー分割ではパフォーマンスの40%を失い、テンソル並列ではさらに大きな損失が生じる可能性があります。他の要因を疑う前に、nvidia-smiまたはGPU-Zで確認してください。
このガイドは役に立ちましたか?

ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。