以下の一連の投稿の第二弾です。
-
ASRock 4X4 BOX-8640U上のDebianでAMD iGPU(Radeon 760M)にLemonadeを動かすまで #Vulkan - Qiita
-
ASRock 4X4 BOX-8640U上のAMD iGPU(Radeon 760M )に Lemonadeを動かして、生成AIのローカル推論ベンチマーク #Vulkan - Qiita
-
ASRock 4X4 BOX-8640U上のProxmoxでLemonade Serverをsystemdデーモンとして常駐させる #Vulkan - Qiita
1. はじめに
AMD Radeon 760M(RDNA 3, 8 CU)を搭載したミニPCASRock 4X4 BOX-8640Uに、AMDが開発するオープンソースのローカルLLMサーバー Lemonade を導入し、Vulkanバックエンド経由でLLM推論のパフォーマンスを計測しました。
iGPU(統合GPU)は専用VRAMを持たず、システムメモリを共有します。「iGPUでLLMを動かすのは遅いのでは?」「そもそも大きいモデルは動くの?」という疑問に対して、実測データでお答えします。
また、Proxmox VEのベアメタルホスト上でLLMサービスとVMを同居させる場合のメモリ容量計画についても検討しています。
2. 検証環境
2-1. ハードウェア
| 項目 | 詳細 |
|---|---|
| マシン | ASRock 4X4 BOX-8640U |
| CPU | AMD Ryzen 5 8640U(6C/12T, 最大4.9GHz) |
| iGPU | Radeon 760M(RDNA 3, 8 CU, 512シェーダー) |
| メモリ | DDR5-5600 デュアルチャネル 96GB(48GB × 2) |
| 理論メモリ帯域 | 約89.6 GB/s |
| BIOS VRAM (Share Memory) | 512MB(最小設定) |
2-2. ソフトウェア
| 項目 | 詳細 |
|---|---|
| OS | Proxmox VE(Debian ベース, ベアメタル) |
| Lemonade | v10.0.1 |
| 推論バックエンド | llama.cpp (Vulkan) |
| Vulkanドライバー | Mesa RADV (Vulkan 1.4.305) |
2-3. テスト対象モデル
すべてQ4_K_M量子化のGGUF形式です。
| モデル | パラメータ数 | 重みサイズ(概算) |
|---|---|---|
| Qwen3-0.6B-GGUF | 0.6B | ~0.5 GB |
| Qwen3-1.7B-GGUF | 1.7B | ~1.2 GB |
| Qwen3-4B-GGUF | 4B | ~2.7 GB |
| Qwen3-8B-GGUF | 8B | ~5.0 GB |
| Qwen3.5-27B-GGUF | 27B | ~17 GB |
2-4. Lemonade とは
Lemonade は AMD がスポンサーするオープンソースのローカルLLMサーバーです。llama.cpp / ONNX Runtime / FastFlowLM などの推論エンジンをラップし、OpenAI互換のAPIを提供します。
Vulkan バックエンドにより、ROCm が正式サポートされていない Radeon 760M のような iGPU でも GPU アクセラレーションを利用できます。
インストールは以下の記事を参照してください。
DebianでAMD iGPU(Radeon 760M)にLemonadeを動かすまで #Vulkan - Qiita
実行の概要としては以下のようになります。
# サーバー起動(Vulkan バックエンド)
RADV_PERFTEST=nogttspill lemond --llamacpp vulkan --log-level debug
# モデルを取得して実行
lemonade pull Qwen3-8B-GGUF
lemonade run Qwen3-8B-GGUF --llamacpp vulkan
2-5. アーキテクチャ概要
以下は、今回の検証構成の全体像です。
3. iGPUのVRAM設定に関する発見
3-1. BIOSのShare Memory設定
ASRock 4X4 BOX-8640UのBIOSでは、Advanced → Chipset Configuration → Share Memory でiGPUに予約するVRAMを設定できます。選択肢は Auto / 64M / 128M / 256M / 512M / 1024M / 2048M です。
3-2. RADVドライバーの実際の挙動
Vulkanのメモリヒープを確認すると以下のような結果でした。
$ vulkaninfo | grep -A10 "memoryHeaps"
memoryHeaps: count = 2
memoryHeaps[0]:
size = 15.77 GiB ← Host Visible(フラグなし)
flags: None
memoryHeaps[1]:
size = 31.53 GiB ← Device Local
flags: MEMORY_HEAP_DEVICE_LOCAL_BIT
BIOSで512MBしか予約していないにもかかわらず、RADVドライバーは31.5GBをDevice Localヒープとして公開しています。
一方、DRM(カーネルのGPU管理層)はBIOS設定通りの値が出力されます
$ cat /sys/class/drm/card0/device/mem_info_vram_total
536870912 # = 512MB
3-3. なぜ影響しないのか
ディスクリートGPU(例: RTX 3090)では、VRAMは物理的に別のメモリチップ(GDDR6X等)です。そのため、VRAMに載るか載らないかで大きな速度差が生じます。
しかし iGPU の場合、「VRAM」もシステムRAMも物理的には同じDDR5メモリです。BIOSの Share Memory はDDR5の中から「GPU専用として予約するか否か」の違いにすぎず、アクセス帯域は同一です。
Mesa RADVはこの事実を反映して、BIOS設定に関係なくシステムRAMの大部分をDevice Localとして公開しています。
結論: BIOSのVRAM設定は512MB(デフォルト)のままで問題ありません。2048MBに変更してもパフォーマンスには問題無さそうです。
4. ベンチマーク結果
4-1. トークン生成速度
各モデルに同一プロンプトを投げ、128トークンを生成させた結果です。各条件3回測定の中央値を採用しています。
| モデル | Gen TPS | 体感 |
|---|---|---|
| Qwen3-0.6B | 142 tok/s | 瞬時 |
| Qwen3-1.7B | 59 tok/s | 非常に速い |
| Qwen3-4B | 27 tok/s | 速い |
| Qwen3-8B | 15 tok/s | 会話に十分 |
| Qwen3.5-27B | 3.9 tok/s | やや遅い |
モデルサイズが倍になるとTPSがほぼ半減しています。これは典型的なメモリ帯域律速のパターンです。
4-2. Prefill速度とTTFT
Prefill(プロンプト処理)はGPU演算能力がボトルネックになるフェーズです。短いプロンプト(19トークン)と長いプロンプト(144トークン)の2パターンで測定しました。
| モデル | Prefill TPS (short) | Prefill TPS (long) | TTFT short | TTFT long |
|---|---|---|---|---|
| Qwen3-0.6B | 537 tok/s | 1,266 tok/s | 35ms | 114ms |
| Qwen3-1.7B | 301 tok/s | 543 tok/s | 49ms | 265ms |
| Qwen3-4B | 35 tok/s | 227 tok/s | 123ms | 636ms |
| Qwen3-8B | 90 tok/s | 118 tok/s | 211ms | 1,124ms |
| Qwen3.5-27B | 14 tok/s | 28 tok/s | 1,481ms | 5,256ms |
長いプロンプトの方がPrefill TPSが高い傾向が見られます。これはバッチ処理の効率が上がるためです。
4-3. メモリ帯域効率
DDR5-5600デュアルチャネルの理論帯域幅(89.6 GB/s)に対して、各モデルの帯域利用効率を計算しました。
| モデル | 重みサイズ | 理論上限 TPS | 実測 TPS | 帯域効率 |
|---|---|---|---|---|
| 0.6B | ~0.5 GB | ~179 tok/s | 142 tok/s | 79% |
| 1.7B | ~1.2 GB | ~75 tok/s | 59 tok/s | 79% |
| 4B | ~2.7 GB | ~33 tok/s | 27 tok/s | 82% |
| 8B | ~5.0 GB | ~18 tok/s | 15 tok/s | 83% |
| 27B | ~17 GB | ~5.3 tok/s | 3.9 tok/s | 74% |
メモリ帯域の約80%を活用できており、iGPU + Vulkan としては非常に良好な結果です。
5. Radeon 780M との比較
5-1. スペック差
| 項目 | Radeon 760M | Radeon 780M | 差 |
|---|---|---|---|
| CU数 | 8 | 12 | +50% |
| シェーダー数 | 512 | 768 | +50% |
| 最大クロック | 2.8 GHz | 3.0 GHz | +7% |
| 理論FP32性能 | ~2.87 TFLOPS | ~4.3 TFLOPS | +50% |
| メモリ | システムRAM共有 | システムRAM共有 | 同一 |
5-2. LLM推論への影響
780MはCU数が50%多いですが、LLM推論への影響はフェーズによって大きく異なります。
| フェーズ | 760M vs 780M | 理由 |
|---|---|---|
| トークン生成 | 差は0〜5% | メモリ帯域律速のため、CU数は関係しません |
| プロンプト処理 | 780Mが30〜50%速い | 演算律速のため、CU数の差がそのまま効きます |
つまり「返答が出てくる速度」は760Mでも780Mでもほぼ変わらないと推測されます。
差が出るのは長いプロンプトを入力した際のTTFT(初回応答時間)のみでしょう。
5-3. 性能向上に効くのはメモリ帯域
GPU CU数を増やすよりも、メモリ帯域の改善の方がトークン生成速度に直結します。
| メモリ構成 | 帯域 | 推定 TPS (8B) | 対DDR5-5600比 |
|---|---|---|---|
| DDR5-5600 (本環境) | 89.6 GB/s | 15 tok/s | 基準 |
| DDR5-7200 | 115.2 GB/s | ~19 tok/s | +28% |
| LPDDR5X-7500 | 120 GB/s | ~20 tok/s | +34% |
今後の APU では LPDDR5X-7500 搭載機が増えてくるため、同じ760M/780Mでもメモリが速い機種の方がLLM推論に有利です。
6. Proxmox上でのVM容量プランニング
6-1. モデル別メモリ使用量
Proxmoxのベアメタル上でLLMサービスを動かす場合、VMに割り当てられるメモリの残量を把握する必要があります。推論中の free コマンドの出力をもとに計測しました。
| LLMモデル | メモリ使用量 | Available | VM割り当て可能 |
|---|---|---|---|
| なし (ベースライン) | ~34 GB | ~60 GB | ~56 GB |
| Qwen3-0.6B | 34.6 GB | 59.0 GB | ~55 GB |
| Qwen3-1.7B | 36.3 GB | 57.3 GB | ~53 GB |
| Qwen3-4B | 39.5 GB | 54.1 GB | ~50 GB |
| Qwen3-8B | 44.6 GB | 49.0 GB | ~45 GB |
| Qwen3.5-27B | 70.6 GB | 23.1 GB | ~19 GB |
※ VM割り当て可能 = Available - 4GB(OS/Proxmox予約分)
6-2. スイートスポット
8Bモデルがスイートスポットです。15 tok/s は人間の読む速度(約5 tok/s)の3倍で、チャット用途に十分な速さです。VM用メモリも45GB残せるため、複数のVMを同時に稼働できます。
27Bモデルは最高品質ですが、メモリの大半(+36GB)を消費し、3.9 tok/s とやや遅めです。常時稼働よりは、必要な時だけロードして使う運用が現実的です。
7. ベンチマーク手法
7-1. 測定方法
再現性を確保するため、自動化したシェルスクリプトで計測しています。
ポイント
-
/api/v1/chat/completionsのレスポンスに含まれるtimingsオブジェクトから直接メトリクスを取得しています -
/statsエンドポイントはレースコンディションが発生しやすいため使用していません -
temperature: 0.0で決定論的な出力を得ることで、再現性を確保しています
// レスポンスに含まれる timings の例
"timings": {
"predicted_per_second": 14.81, // ← 生成TPS
"prompt_per_second": 118.32, // ← Prefill TPS
"prompt_ms": 1124.34, // ← TTFT (ms)
"predicted_ms": 8643.74, // ← 生成時間 (ms)
"predicted_n": 128, // ← 生成トークン数
"prompt_n": 144 // ← プロンプトトークン数
}
7-2. Vulkan最適化設定
# RADVドライバーのGTTスピル防止(llama.cpp Vulkanスレッドの推奨設定)
export RADV_PERFTEST=nogttspill
# GPU電力プロファイルをパフォーマンスモードに
echo "high" > /sys/class/drm/card0/device/power_dpm_force_performance_level
RADV_PERFTEST=nogttspill は llama.cpp の Vulkan Performance Discussion で推奨されている設定で、GTTメモリへの不要なスピルを防止してパフォーマンスを改善します。
8. まとめ
| 発見 | 内容 |
|---|---|
| BIOS VRAM設定 | 変更不要です。RADVが自動的にシステムRAMをDevice Localとして公開します |
| 性能の律速要因 | DDR5メモリ帯域(89.6 GB/s)でトークン生成速度が決まります |
| 760M vs 780M | トークン生成速度はほぼ同じと考えられます。Prefillのみ780Mが30-50%速くなるでしょう |
| 96GB RAMの恩恵 | 27Bモデルも問題なく動作します。8Bモデルなら45GB残してVM運用も可能です |
iGPUでのLLM推論は「専用GPU買えない環境の妥協策」と思われがちですが、96GBの大容量メモリと組み合わせることで、8Bクラスのモデルを会話用途に十分な速度で動かしつつ、Proxmox上のVM運用も両立できます。
メモリ帯域がボトルネックであるため、今後DDR5-7200やLPDDR5X-7500搭載のAPUに移行すれば、GPU CU数を増やすよりも大きなパフォーマンス向上が見込めます。