きっかけは、Intel GPU の試験で、Vulkan 版から NVIDIA GPU も見えていて、モデルの一部が NVIDIA に載っていたこと(試験結果の「Intel GPU で流した結果」)。混ざったときの速さは測っていないので、併用で速くなるかを改めて測る。
この PC には、NVIDIA GeForce RTX 3050 Ti Laptop GPU(VRAM 4GB)と Intel Iris Xe(メインメモリを共有、最大約 16GB)がある。 いまの使い方は、NVIDIA GPU を使うときは CUDA 版で NVIDIA と CPU に分け、Intel GPU を使うときは Vulkan 版で Intel だけに載せる。 llama.cpp の Vulkan 版は 2 つの GPU を同時に使えるので、4GB に収まらないモデルを NVIDIA・Intel・CPU に分けて載せたときに、どれだけ速くなるかを測る。
速くなる構成が見つかれば、この PC で使うときの既定(start-agent.ps1 と試験スクリプト)に入れる。閉域網の PC には NVIDIA GPU が無いので、配布物の既定は変えない。
| 記号 | llama.cpp | 載せ方 | 引数 |
|---|---|---|---|
| C | CPU 版 | CPU だけ | (なし) |
| N | CUDA 版 | NVIDIA と CPU(いまの NVIDIA の既定。大きいものは自動配置) | -ngl なし(3.2GB 以下は -ngl 99) |
| I | Vulkan 版 | Intel だけ(いまの Intel の既定) | -ngl 99 --device Vulkan0 |
| IN | Vulkan 版 | Intel と NVIDIA に層を分ける | -ngl 99 --device Vulkan0,Vulkan1 --tensor-split に比を渡す(例: 12,3・10,3・8,3) |
| INC | Vulkan 版 | Intel と NVIDIA に分け、MoE の専門家の重みは CPU に置く | IN に -ncmoe(MoE のモデルだけ) |
| NC-vk | Vulkan 版 | NVIDIA と CPU(Vulkan 版で N と同じ形。CUDA 版との差を見る) | --device Vulkan1、-ngl なし |
CUDA 版は Intel GPU を使えないため、NVIDIA と Intel を同時に使えるのは Vulkan 版だけ。
| モデル | 大きさ | 選んだ理由 |
|---|---|---|
| gemma-4-E4B-it-Q4_K_M | 5.0 GB | 普段使いの既定。4GB を少し超える |
| gemma-4-12B-it-QAT-Q4_0 | 6.5 GB | 密なモデル。Intel だけ・CPU だけの値を 2026-10-06 に測ってある |
| gpt-oss-20b-MXFP4 | 11.3 GB | MoE。大きいモデルが要るときの候補 |
| Qwen3-30B-A3B-Instruct-2507-UD-Q4_K_XL | 16.5 GB | MoE。共有メモリと NVIDIA を足してやっと載る大きさ |
timings からプロンプトの処理(tok/s)と生成(tok/s)を読む。プロンプトは、エージェントが最初に送る量に近い約 20,000 トークンと、短い約 600 トークンの 2 つ。生成は 128 トークン。キャッシュは使わない(cache_prompt: false)。各 3 回の中央値-lv 4)から、デバイスごとに載った層の数と大きさを記録する文脈は試験と同じ 65,536、KV キャッシュは CPU 側(-nkvo -ctk q8_0 -ctv q8_0 -fa on)。KV を GPU に置く形は、併用で速くなった構成でだけ追加で測る。
測るスクリプトは tools/50_run/bench-devices.ps1 として作る(構成とモデルを引数で渡し、結果を logs/bench-devices/ に JSON で残す)。
bench-devices.ps1 とテストを作る-ncmoe は MoE の 2 本だけ--tensor-split)は、速さの比ではなくメモリの比で配られるため、比を何通りか試す