7900 XTX 本地 LLM 優化實測報告(Qwen3.6-27B)
硬體: AMD RX 7900 XTX 24GB / AMD Ryzen 9 7950X / Windows 11 原生
用途: Hermes Agent、加密貨幣分析、查資料、opencode/pi.dev 本地 API
推論框架: llama.cpp Vulkan(Windows Native)
優化前 vs 優化後
| 指標 | 優化前 | 優化後 | 提升 |
|---|---|---|---|
| Prefill(長 context 14k token) | ~273 t/s | ~530 t/s | +94% |
| TG 生成速度(Hermes) | ~37 t/s | 62–80 t/s | +68~116% |
| TG 生成速度(一般對話) | ~37 t/s | ~42 t/s | +14% |
| Qwen3 thinking 卡死問題 | 偶發(8000+ token 無限生成) | 已解決 | ![]() |
| VRAM 佔用 | ~18.7 GB | ~18.7 GB | 不變 |
優化一:KV Cache q8_0 → q4_0
改動: run.bat 和 start-all.bat 的 -ctk q8_0 -ctv q8_0 改成 -ctk q4_0 -ctv q4_0
效果:
- Prefill:273 t/s → 730 t/s(+167%)
- TG:37 t/s → 42 t/s(+14%)
- 品質:差異可忽略(q4_0 vs q8_0 KV cache 品質損失極小)
原因: Vulkan 後端的 q8_0 KV cache 有嚴重 Prefill 瓶頸,q4_0 就沒有這個問題。
這是最簡單、最有效的改動,不需要換模型或換 binary。
優化二:關閉 Qwen3 Thinking(--reasoning off)
改動: run.bat 加上 --reasoning off
效果: 解決 Qwen3.6 偶發性卡死問題。
原因: Hermes Gateway 送的請求會觸發 Qwen3 的 thinking mode,budget 預設為 INT_MAX(無限),
導致 server 有時生成 8000+ 個 thinking token 停不下來,後續所有請求全部卡在 queue 裡。
優化三:MTP(Multi-Token Prediction)升級
升級內容
- Binary: 從 PR #22673 源碼編譯(llama.cpp MTP 分支,尚未合入主線)
- 模型: 換成帶 MTP 層的
Qwen3.6-27B-Q4_K_M-mtp.gguf(15.8 GB,froggeric/Qwen3.6-27B-MTP-GGUF) - 新增參數:
--spec-type draft-mtp --spec-draft-n-max 3 -fa 1 - 注意: 參數名稱是
draft-mtp,不是mtp(新版 PR 已改名)
實測速度(Hermes 結構化輸出)
| 請求 | Prefill | TG | MTP 接受率 |
|---|---|---|---|
| 系統提示暖機(14k tokens) | 531 t/s | 62.8 t/s | 95.6% |
| 第 1 次 Telegram 指令 | 398 t/s | 60.0 t/s | 72.7% |
| 第 2 次 Telegram 指令 | 453 t/s | 73.6 t/s | 98.5% |
| 第 3 次 Telegram 指令 | 469 t/s | 59.5 t/s | 72.6% |
| 直接 API 測試(短句) | — | 79.9 t/s | — |
重要:MTP 加速效果依任務而定
| 場景 | 接受率 | TG 速度 | 說明 |
|---|---|---|---|
| Hermes 結構化輸出(工具呼叫、JSON) | 72–100% | 60–80 t/s | 最佳 ![]() |
| 加密貨幣分析、查資料(固定格式) | 預估 70%+ | 60–75 t/s | 很好 ![]() |
| Web UI 自由對話 | 30–45% | 35–49 t/s | 效果有限 |
結論: MTP 對結構化輸出效果顯著(+68~116%),自由對話效果有限甚至可能略慢。
最終啟動設定
run-mtp.bat(只跑 llama-server,測試用)
@echo off
C:\llama-cpp-mtp\build\bin\Release\llama-server.exe ^
-m C:\llama-cpp\Qwen3.6-27B-Q4_K_M-mtp.gguf ^
--device Vulkan0 -ngl 999 -c 65536 ^
-ctk q4_0 -ctv q4_0 -np 1 ^
--spec-type draft-mtp --spec-draft-n-max 3 ^
--reasoning off -fa 1 ^
--port 8080 --host 0.0.0.0
pause
start-all-mtp.bat(完整啟動:llama-server + Hermes + 暖機)
@echo off
set "H_EXE=C:\Users\jaran\AppData\Local\hermes\hermes-agent\venv\Scripts\hermes.exe"
set "L_EXE=C:\llama-cpp-mtp\build\bin\Release\llama-server.exe"
set "M_PATH=C:\llama-cpp\Qwen3.6-27B-Q4_K_M-mtp.gguf"
set "H_HOME=C:\Users\jaran\AppData\Local\hermes"
set PATH=C:\llama-cpp-mtp\build\bin\Release;%PATH%
echo [STEP 1] Launching llama-server (MTP)...
start "llama-server-mtp" cmd /k "%L_EXE% -m %M_PATH% --device Vulkan0 -ngl 999 -c 64000 -ctk q4_0 -ctv q4_0 -np 1 --spec-type draft-mtp --spec-draft-n-max 3 -fa 1 --reasoning off --port 8080 --host 127.0.0.1"
timeout /t 8
echo [STEP 2] Launching Hermes Gateway...
start "hermes-gateway" cmd /k "set HERMES_HOME=%H_HOME%&& set HERMES_GIT_BASH_PATH=C:\Program Files\Git\bin\bash.exe&& %H_EXE% gateway run --replace"
timeout /t 5
echo [STEP 3] Running Warmup Script...
powershell -ExecutionPolicy Bypass -File "%H_HOME%\scripts\warmup.ps1"
echo.
echo =======================================================
echo SYSTEM READY [MTP Mode: draft-mtp, n-max 3]
echo =======================================================
pause
踩坑紀錄
- BITS Transfer 不支援 HuggingFace redirect → 改用
curl.exe -L -C -(支援斷點續傳) - Vulkan SDK 裝好但 cmake 找不到 → 需手動
set VULKAN_SDK=C:\VulkanSDK\1.4.350.0 - VS Build Tools 需手動勾選「使用 C++ 的桌面開發」 → winget 不帶 --override 只裝框架
- WebUI 編譯需 npm build → node/npm 裝好後先 build WebUI 再編 server
- MTP 參數名稱是
draft-mtp,不是mtp→ PR 更新後改名,文章版本較舊 - llama-common.dll 被 server 鎖住無法重編 → 先關 server 再 build
- Qwen3.6 是 hybrid SSM 架構 → KV cache 無法跨對話複用,每次都重跑全部 prompt(正常現象)
等待中的升級
- PR #22673 合併進主線後:不用自行編譯,直接下載官方 release binary 即可
- MTP Prefill 降速 bug 修復後:Prefill 速度可望進一步提升(目前 Prefill 略慢於非 MTP)
- Vulkan + TurboQuant 整合穩定後:Prefill 和 TG 都有進一步提升空間
測試日期:2026/05/14–15
