THE RIG

ゲーミング PC に GPU 5 枚。
ローカル LLM 実行環境

サーバー用パーツはゼロ。ゲームにも使う普通の自作 PC に、スロットとライザーケーブルを総動員して GPU を 5 枚ぶっこみ、VRAM 80GB にしました。AutoDev LG のローカル LLM は、全部この 1 台で動いています。

側面パネルを外した PC の内部。左に GPU が横置きで 3 枚、右の縦置きブラケットに 2 枚、中央に大きな空冷 CPU クーラー
側面パネルを外すとこう。左に横置きで 3 枚、右の縦置きブラケットに 2 枚。
配線の美しさについては、見なかったことにしてください。
5 枚
GPU(RTX 5070 Ti ×1 + 5060 Ti ×4)
80 GB
VRAM の合計
128 GB
メインメモリ
約 220 GB
使っているモデルの合計サイズ

01ハードウェア

パーツ中身ひとこと
CPUIntel Core i9-14900KF(24 コア / 32 スレッド)ゲーム用に買ったもの。32 スレッドすべてを WSL から使用
メモリ128 GB(DDR4 32 GB × 4)WSL にはその約半分(62 GB)を割り当て
マザーボードASRock B760 Pro RS/D4 WiFi普通のゲーミング向け。サーバー用には手が出ない
ケースLIAN LI O11D EVO XLGPU 5 枚を収めるために交換。届いてでかさにびっくり
GPU ブラケットLIAN LI O11DEXL-1X(O11D EVO XL 専用オプションの VGA 垂直配置ブラケット)ライザーケーブルでつないだ GPU を設置するために使用
電源Thermaltake TOUGHPOWER GT 1200W(ATX 3.1、PS-TPT-1200FNFAGJ-3)GPU 5 枚の電力上限の合計は 1,020 W。ただ実際は、フル稼働時でも消費電力は 750 W に収まっている
ストレージNVMe SSD 2 TB × 2 + USB HDD 6 TBモデルは NVMe に置く(USB だと読み込みがかなり遅い)
ネットワークI-O DATA ET10G-US3C(USB Type-C 接続の 10 ギガビット LAN アダプター、Realtek チップ)GPU で PCIe スロットが埋まり、10G NIC を挿す場所がなくなったので USB 接続に。このマザーボードで唯一 10Gb/s 出る前面の USB 3.2 Gen2 Type-C ポートに挿して、リンク速度は 10 Gbps

02GPU 5 枚の中身

GPU の空き箱が 6 つ並んだ写真。左から RTX 5070 Ti、RTX 5070、RTX 5060 Ti が 4 つ
空き箱の行列。左から RTX 5070 Ti(PNY)、8/27 に引退した RTX 5070(MSI)、そして RTX 5060 Ti × 4。
1 か月ちょっとでこの箱の数。どうかしてる。
……あ、5070 余ってる……。

PCIe スロットに直挿しできたのは 3 枚。足りない 2 枚はライザーケーブルでつないでいます(PCIE2 と M.2 スロットの M2_2)。その結果、接続の太さが 1 枚ずつバラバラです。

GPUスロットVRAM電力上限接続(実測)
RTX 5070 TiPCIE116 GB300 Wx16 直挿し
RTX 5060 Ti ①PCIE216 GB180 Wx1 ライザー
RTX 5060 Ti ②PCIE416 GB180 Wx1 直挿し
RTX 5060 Ti ③PCIE316 GB180 Wx4 直挿し
RTX 5060 Ti ④M2_216 GB180 Wx2 ライザー(M.2 変換)

RTX 5060 Ti 4 枚のメーカーは MSI(VENTUS 2X)、Palit(INFINITY)× 2、GAINWARD(PYTHON)。統一感はゼロです。
「接続」は NVIDIA のドライバーが報告した、今のレーン数です。GPU 5 枚の電力上限を足すと 1,020 W になります。

どのスロットに、どの GPU?

マザーボードの配置図とブロック図を元に、Windows が認識している PCI の位置と、実際の接続の太さを突き合わせました。帯の長さがレーン数(x1〜x16)です。

CPUCore i9-14900KF
PCIE1Gen4 x16
RTX 5070 Ti直挿し
M2_1Gen4 x4
NVMe SSD
チップセットIntel B760
PCIE3Gen4 x4
RTX 5060 Ti ③直挿し
M2_3Gen4 x4
NVMe SSD
M2_2Gen4 x2
RTX 5060 Ti ④ライザー(M.2 → PCIe 変換)
PCIE2Gen3 x1
RTX 5060 Ti ①ライザー
PCIE4Gen3 x1
RTX 5060 Ti ②直挿し
PCIe 4.0 のレーンPCIe 3.0 のレーン未使用

スロット名は ASRock B760 Pro RS/D4 WiFi のマニュアルの表記です。

x1 でも動くの?
MoE モデルなら動きます(Dense モデルについては下の「04」で)。AutoDev LG では、1 つのモデルを層ごとに 5 枚へ分けて載せています(llama.cpp の「層分割」)。この方式だと、生成中に GPU 同士がやり取りするのは層の境目の小さなデータだけなので、細い接続でもそれなりに走ります。細さが効いてくるのは、主にモデルを読み込むときです。
ただし、tensor parallelism には要注意。1 つの層を複数の GPU で分担する方式なので、GPU 同士がひっきりなしにデータをやり取りし、この構成では性能がまったく出ません。こんな奇特な構成をとる人は少ないと思いますが、ご注意を。

03ソフトウェア

Windows 11 Pro→WSL2(Ubuntu 24.04)→CUDA 13.3→llama.cpp(llama-server)→AutoDev LG(LangGraph + OpenHands)
層使っているものメモ
OSWindows 11 Pro + WSL2(Ubuntu 24.04.5 LTS)Windows ネイティブ版も試したが、長い文脈で遅く WSL に戻した
GPU まわりNVIDIA ドライバー 617.14 / CUDA 13.3
推論エンジンllama.cpp 公式版(build 11151)+ Unsloth 版(build 11160)Unsloth 版は Qwen3.8-Flash-Next の MTP 用。ほかのモデルは公式版
言語Python 3.12AutoDev LG 本体は Python で書かれている
ワークフローLangGraph 1.2工程の順番と分岐(失敗したらどこへ戻るか)を管理
AI エージェントOpenHands SDK 1.46オープンソースの自律型 AI 開発エージェント基盤。ワーカー役のローカル LLM が、これを通してファイルの編集やコマンドの実行を行う

04使っているモデル

モデルは 1 つずつ、5 枚の GPU にまたがって載せます。役割が替わるたびに入れ替えるので、そのたびに数十 GB を読み込みます。

モデル構造役割量子化・サイズ高速化(MTP など)
Qwen3.8-Flash-NextMoEリーダー/ワーカーAP-Q4_K_XL・95 GBMTP ヘッド(別ファイル・Q8_0・3.9 GB)
Qwen3.8-27BDenseテストコード作成UD-Q4_K_M・16 GBMTP(モデル内蔵)
Gemma-4-26B-A4B-itMoE(26B のうち約 4B が稼働)レビュアーBF16・48 GBMTP 用の補助モデル(Q8_0・0.4 GB)
gpt-oss-120bMoE予備MXFP4・60 GBEAGLE3(Q8_0・0.8 GB)※
Dense モデルは苦手。ほぼ MoE 専用機です。
この環境で Dense モデル(1 トークンごとに全部の重みを使うモデル)を複数の GPU に分けて載せると、性能が出ません。ボトルネックは PCIe の帯域。x1・x2 の細い接続や、5 枚中 4 枚がチップセット経由で共有している DMI Gen4 x4 が詰まってしまいます。
MoE(Mixture of Experts)モデルなら、総パラメータは大きくても、1 トークンごとに働くのは一部の「専門家」だけ。たとえば Gemma-4-26B-A4B-it は、26B のうち毎回使うのは約 4B(名前の「A4B」)です。
というわけで、ここで動かしているのは Qwen3.8-Flash-Next・Gemma-4-26B-A4B-it・gpt-oss-120b と、MoE ばかり。Dense モデルは、GPU 1 枚の VRAM(16 GB)に収まる場合だけ使うことにしています。唯一の Dense モデルの Qwen3.8-27B も、そのルールに収まるサイズです(さらに MTP で速度を底上げ)。VRAM 80 GB と聞いて「大きな Dense モデルも動くのでは?」と思った方、残念ながらこれは MoE 専用機です。

Dense:1 トークンを出すたびに、モデルのすべての重みを使う構造。昔からある一般的な形です。
MoE(Mixture of Experts):モデルの中に多数の「専門家(エキスパート)」を持ち、1 トークンごとにその一部だけを使う構造。総パラメータは大きくても、1 回に動かす量は小さく済みます。
MTP(Multi-Token Prediction、複数トークン予測):次の 1 トークンだけでなく数トークン先まで予測し、本体のモデルがまとめて答え合わせする高速化の仕組み。答え合わせをするので、出力の中身は変わりません。
※ gpt-oss-120b は MTP 用の層を持たないため、同じ考え方の別方式「EAGLE3」の補助モデルを後付けしています。
文脈の長さは 65,536 トークン。KV キャッシュは 4bit(q4_0)に圧縮し、Flash Attention を有効にしています。高速化の効果はチューニング記録にまとめています。

05ついでに

斜めから見た PC の内部。GPU とメモリが虹色に光っている
光る。なお、どれだけ光っても LLM は 1 トークンも速くなりません。
M6 Mac mini の本体と箱
箱から出して、写真を撮って、……以上です。

M6 Mac mini(最小構成)も 1 台あります。「いずれ iPhone アプリも作るから」と自分に言い聞かせて買いました。……今のところ出番なし(笑)。

GPU の購入費用がどこまで回収できたか(もし Claude API で動かしていたら?)は、開発ログの回収メーターで毎日更新しています。

開発ログを見る →仕組みを見る →