ROCmFP4搭配DFlash2演進實測(AMD AI Max+395)
-
繼下午分享幾個實測包含SGLang與Llama.cpp的ROCmFP4的配置
小弟繼續操這台迷你主機 能想到的方法都上
前幾天搞ROCmFP4的優化框架與模型我是滿意的,但當時用的是mtp解碼,其實那個版本沒上DFlash2
現在開幹給兄弟們找樂子,適用於所有RDNA3以後的架構(RDNA2的卡我手上沒有,無法告知有沒有用)
ROCmFP4 搭配 DFlash2 演進實測指南(AMD Strix Halo gfx1151)
實測日期:2026-09-09
測試主機:FEVM FAEX1(Ryzen AI Max+ 395 / Nobara 44 / ROCm 7.2.4)
核心結論:DFlash2 全面取代 MTP。生成吞吐打平微幅領先、推測接受率更高、預填充(Prefill)長短兩端全勝、Draft 權重體積縮減 500 MB,且長文本深度無衰減。Preset 已平滑切換,可直接套用。
1. 軟硬體環境與模型規格
1.1 主機硬體與系統配置
項目 規格參數 備註與說明 APU AMD Ryzen AI Max+ 395 gfx1151,32 線程統一記憶體(UMA) 68.7 GB(實用約 58~62 GB) 依賴 UMA 直通,全層完全卸載至顯存 系統碟 NVMe 0 ( nvme0n1)Toshiba KXG6 1 TB,PCIe Gen3 x4(系統與 /home)資料碟 NVMe 1 ( nvme1n1)Kingston Renegade 2 TB,PCIe Gen4 x4,掛載於 /mnt/nvme-data(權重放置處)OS / Kernel Nobara Linux 44(Fedora 系) 核心版本: 7.1.4-200.nobara.fc44ROCm 運行庫 ROCm 7.2.4 必要環境變數: HSA_OVERRIDE_GFX_VERSION=11.5.1GGML_HIP_ENABLE_UNIFIED_MEMORY=1
1.2 推論框架:ROCmFPX 分支llama.cpp(原 charlie12345 / 官方線)
標準 Stock llama.cpp 無法識別 ROCmFP4 格式(GGML Type 100–106),必須採用專屬 Fork 分支編譯:
# 取得 ROCmFPX 源碼並編譯 git clone https://github.com/ROCmFPX/ROCmFPX.git /mnt/nvme-data/ROCmFPX cd /mnt/nvme-data/ROCmFPX export PATH=/opt/rocm-7.2.4/bin:$PATH export HIP_PATH=/opt/rocm-7.2.4 bash scripts/build-strix-rocmfp4-mtp.sh # 編譯產物:build-strix-rocmfp4/bin/llama-server # 具備 HIP + Vulkan 雙後端,32 核心耗時約 30~60 分鐘分支特性解構:針對 AMD RDNA 3.5 架構深度客製。內建手寫 HIP Dequant 算子、
gfx1151原生 INT4(IU4)指令對齊、修復 MTP 崩潰問題、整合 TurboQuant KV 傳輸路徑,並對 Agent 任務進行敏感層(Embedding / Attention)位元保留。
1.3 測試模型權重清單
檔案名稱 容量 來源倉庫 角色說明 Qwen3.8-27B-Q4_0_ROCMFP4_STRIX.gguf13.75 GB kingjones777/Qwen3.8-27B-ROCmFP4-STRIX-MTP-GGUF主模型(專用 FP4 矩陣) mtp-Qwen3.8-27B-Q4_0.gguf1.60 GB 同上 原 MTP Draft Head(正式退役) Qwen3.8-27B-DFlash2-Q4_K_M.gguf1.10 GB z-lab/Qwen3.8-27B-DFlash2-GGUFDFlash2 Draft(本次升級核心) mmproj-Qwen3.8-27B-F16.gguf885 MB unsloth/Qwen3.8-27B-GGUF(原檔更名)多模態 Vision 投影層 # 下載官方 DFlash2 草稿模型 hf download z-lab/Qwen3.8-27B-DFlash2-GGUF \ --include 'Qwen3.8-27B-DFlash2-Q4_K_M.gguf' \ --local-dir /mnt/nvme-data/models/
2. DFlash2 整合與部署
2.1 框架支援度驗證(無需重新編譯)
DFlash2 於 upstream PR #27342(2026-08-27,
b10f9ca58)正式併入,ROCmFPX 最新 HEAD 已自動繼承。可透過以下兩步驟驗證二進位檔支援性:# 1. 驗證源碼提交紀錄 git -C /mnt/nvme-data/ROCmFPX merge-base --is-ancestor b10f9ca58 HEAD && echo "IN-HEAD" # 2. 驗證 llama-server 支援選項 export LD_LIBRARY_PATH=/mnt/nvme-data/ROCmFPX/build-strix-rocmfp4/bin:/opt/rocm-7.2.4/lib /mnt/nvme-data/ROCmFPX/build-strix-rocmfp4/bin/llama-server --help | grep spec-type # 輸出選單中若包含 draft-dflash 即表示完整支援- 8 月底建置之 Binary 已包含此功能,無須重跑編譯。
- 僅在 Fork 長期落後 upstream 或 HIP 底層 Kernel 更新時才需執行
git pull重新編譯。
2.2 機制特性:DFlash2 vs. MTP
- 機制原理:MTP 為傳統序列推測(一次預測單一前進方向);DFlash2 採用 Block-Diffusion Drafter,利用小型擴散結構一次預測一整組 Token 區塊。
- 部署需求:需要加掛專屬 Draft 權重(1.1 GB),透過指定
--spec-type draft-dflash與--model-draft即可啟用。
2.3 啟動命令與參數配置
#!/usr/bin/env bash export LD_LIBRARY_PATH=/mnt/nvme-data/ROCmFPX/build-strix-rocmfp4/bin:/opt/rocm-7.2.4/lib export HSA_OVERRIDE_GFX_VERSION=11.5.1 export GGML_HIP_ENABLE_UNIFIED_MEMORY=1 /mnt/nvme-data/ROCmFPX/build-strix-rocmfp4/bin/llama-server \ -m /mnt/nvme-data/models/Qwen3.8-27B-Q4_0_ROCMFP4_STRIX.gguf \ --mmproj /mnt/nvme-data/models/mmproj-Qwen3.8-27B-F16.gguf \ --spec-type draft-dflash \ --model-draft /mnt/nvme-data/models/Qwen3.8-27B-DFlash2-Q4_K_M.gguf \ --spec-draft-n-max 4 \ -ngl 99 -fa on -dio --jinja -fit off --parallel 1 -dev ROCm0 \ -c 131072 --reasoning off --image-min-tokens 1024 -b 4096 -ub 2048 \ --temp 0.4 --top-p 0.95 --top-k 20 --min-p 0.0 \ --host 0.0.0.0 --port 8080與 MTP 啟動參數差異:
- 調整為
--spec-type draft-dflash。 --model-draft指向 DFlash2 權重檔。- 移除
--spec-draft-ngl、--spec-draft-n-min、--spec-draft-p-min(DFlash2 算子不相容此類 MTP 專用標籤)。
2.4 Preset 設定檔
[qwen3.8-27b-rocmfp4] model = /mnt/nvme-data/models/Qwen3.8-27B-Q4_0_ROCMFP4_STRIX.gguf mmproj = /mnt/nvme-data/models/mmproj-Qwen3.8-27B-F16.gguf spec-type = draft-dflash model-draft = /mnt/nvme-data/models/Qwen3.8-27B-DFlash2-Q4_K_M.gguf spec-draft-n-max = 4 c = 131072 load-on-startup = false
2.5 避坑導航(實戰經驗彙整)
- 推測長度必須固定為 4:測試驗證
spec-draft-n-max=4為最佳甜蜜點。在gfx1151架構下,設為 7 反而會引發排程反轉,32K 上下文時寬度 4 的表現領先寬度 7 達 29%。 - 認明官方 Draft 來源:請務必選用
z-lab官方倉庫;社群部分轉檔(如incoai版本)存在上游已知張量缺陷。 - Vision 多模態相容性:DFlash2 草稿路徑僅負責純文字推測,不走多模態張量;因此舊版 mmproj 仍可正常支援主模型的多模態辨識。
- 多卡分散式限制:目前 DFlash2 在多 GPU 環境下仍存在已知 Issue;單顆 Strix Halo APU(全載 UMA)運作正常。
- 嚴禁改走 Vulkan 後端:DFlash2 在 Vulkan 後端存在數值無效的 Bug(PR #27805 尚在合併中),Strix Halo 請維持
-dev ROCm0。
3. 測試基準與實測方法
- Decode 測試:固定 Prompt(Fibonacci 矩陣快速冪,輸入 53 tokens),
max_tokens=250,temp=0.4。連續測試 3 次取平均,推測接受率(Draft Acceptance)取自 Server 日誌。對照組為相同 Prompt 之 MTP 配置。 - Prefill 測試:標準英文填充文本放大至目標 Token 級距(2K~128K 共七階),
max_tokens=3,統計 Wall-clock time 並換算usage.prompt_tokens。 - Agentic 實戰測試:自研 ReAct 沙盒測試集(t1–t6:檢索、連鎖呼叫、狀態恢復、複雜除錯、惡意陷阱、長日誌診斷),工具調用與推測解碼全開。
4. 效能對決:DFlash2 vs. MTP
4.1 Decode 吞吐與推測接受率(生成 250 Tokens)
評測指標 DFlash2(n-max 4) MTP(n-max 4) 差異分析 第 1 次輸出 45.7 tok/s 45.3 tok/s 微幅勝出 第 2 次輸出 46.8 tok/s — 穩定維持在 46+ 第 3 次輸出 45.8 tok/s — 波動極小 平均驗證接受率 0.98(198/202,均長 4.88) 0.95~0.97 區塊推測命中率更高 短序列 Decode 表現持平微勝(約 +1%~3%),與社群外部測試趨勢一致(如 RTX 3090 上 DFlash2 62.2 vs. MTP 57.8,+7.6%)。
4.2 Prefill 七階梯次吞吐測試
上下文級距 DFlash2 (tok/s) MTP (tok/s) 增益幅度 運行分析 2K 315.6 250.5 +26% 起步階段開銷低,顯存佔用減小 4K 319.2 317.2 持平 進入 GEMM 矩陣計算常態 8K 376.1 371.5 持平 算力單元逐步吃滿 16K 431.6 424.9 持平 算力吞吐峰值區間 32K 415.8 400.7 +4% 序列拉長,記憶體搬運負擔顯現 64K 308.8 277.1 +11% 循環狀態與 Attention 負擔加重 128K 189.6 150.9 +26% 深度長文本下,VRAM 釋放效益顯著 Prefill 增益來源:中段計算密集區(4K~16K)兩者皆受限於硬體密集計算,因此表現持平;兩端(極短 2K 與極長 128K)DFlash2 提速達 26%,主要受益於 Draft 權重較輕(1.1 GB vs. 1.6 GB),降低了 UMA 記憶體頻寬與排程壓力。
4.3 長序列深度衰減表現(引用外部驗證數據)
以
gfx1151測試基準為例,對比不同推測方案隨 Context 深度拉長之吞吐衰減趨勢:上下文深度 Base (無推測) DFlash v1 DFlash2 (n-max 4) 0(極短文本) 11.81 tok/s 21.09 tok/s 26.39 tok/s 8K 11.44 tok/s 12.87 tok/s 21.58 tok/s 32K 10.54 tok/s 10.75 tok/s (加成歸零) 21.11 tok/s (持續保持 2x 加速) 技術迭代本質:DFlash v1 在序列拉長至 32K 時推測命中率會徹底衰竭,吞吐退回至基準線;DFlash2 在全序列深度下皆能保持 2 倍左右的推測解碼增益,解決了長文本推理掉速的痛點。
5.AMD Strix Halo(gfx1151)跨框架推論實測全景總覽
測試基準:AMD Ryzen AI Max+ 395(
gfx1151,40 CU,32 執行緒);UMA 總計 68.7 GB(BIOS Carve 固定);模型統一為 Qwen3.8-27B。
四大推論組態橫向規格對照
評測維度 1. Stock llama.cpp*(官方非 Fork 主線)* 2. ROCmFPX (MTP)(專用 Fork 舊版) 3. ROCmFPX (DFlash2)(專用 Fork 定案版) 4. SGLang*(GPTQ + Triton)* 底層運行核心 原生 HIP Kernel 客製 HIP Dequant 算子*(對齊 RDNA 3.5 IU4)* 客製 HIP Dequant 算子*(對齊 RDNA 3.5 IU4)* Python 獨立 venvAOT sgl_kernel+ Triton支援模型格式 標準 Q4_K_M(~16.5 GB) Q4_0_ROCMFP4(13.75 GB) Q4_0_ROCMFP4(13.75 GB) GPTQ-Int4(~19 GB) 推測解碼方案 無(純自回歸)或標準 MTP Draft MTP Draft Head( mtp-Q4_0, 1.6 GB)DFlash2 Block-Diffusion( DFlash2-Q4_K_M, 1.1 GB)EAGLE / MTP(靜態 5/4/8 樹狀推測) KV Cache 精度 FP16 FP16 FP16 FP8 ( fp8_e4m3)Prompt Cache Slot 環狀序列*(分叉即失效,依賴磁碟)* Slot 環狀序列*(同左)* Slot 環狀序列*(同左)* Radix Tree (基數樹)(跨 Session 秒級喚醒)
5.1 單路與併發解碼吞吐(Decode)
運行組態 單路 Decode 速率 4 路併發 Decode 總量 推測驗證接受率 Stock llama.cpp (純自回歸) ~19.0 tok/s 45 ~ 50 tok/s N/A Stock llama.cpp (標準 MTP) 24.0 tok/s ~50.0 tok/s 0.60 ~ 0.70 SGLang (GPTQ + MTP) 28.9 tok/s (Code)~21.0 tok/s (常規) 63.3 tok/s 0.41 ~ 0.55 (Accept Len ~4.5) ROCmFPX (MTP) 40.8 ~ 41.7 tok/s 62.0 tok/s 0.95 ~ 0.97 ROCmFPX (DFlash2) 45.7 ~ 46.8 tok/s*(全場最快)* 62.5 tok/s 0.98 (均長 4.88) 記憶體頻寬天花板:4 路併發解碼下,所有框架總吞吐皆受制於 Strix Halo 實體 256-bit 頻寬物理極限,上限鎖死在 62 ~ 63 tok/s。
5.3 預填充吞吐階梯(Prefill Sweep)
上下文級距 Stock llama.cpp SGLang (GPTQ) ROCmFPX (MTP) ROCmFPX (DFlash2) 2K ~180.0 tok/s 369.7 tok/s 250.5 tok/s 315.6 tok/s 4K ~240.0 tok/s 504.4 tok/s (峰值) 317.2 tok/s 319.2 tok/s 8K ~230.0 tok/s 390.1 tok/s 371.5 tok/s 376.1 tok/s 16K ~200.0 tok/s 266.2 tok/s 424.9 tok/s 431.6 tok/s (峰值) 32K ~160.0 tok/s 140.2 tok/s 400.7 tok/s 415.8 tok/s 64K ~110.0 tok/s 112.6 tok/s 277.1 tok/s 308.8 tok/s 128K 嚴重溢出拖累 需靠 Cache 攤平 150.9 tok/s 189.6 tok/s (領先 26%)
5.4 推論引擎架構特點與瓶頸分析
Prefill 性能特徵對比 Tokens/s 600 | [SGLang 4K: 504.4] 500 | \ 400 | \ [DFlash2 16K: 431.6] 300 | \ \________ [DFlash2 64K: 308.8] 200 | [Stock 4K: 240] \ \ 100 | \_______________\[SGLang 64K: 112.6] 0 +--------------------------------------------------------- 0 16K 32K 48K 64K 80K 128K-
Stock llama.cpp(非 Fork 主線):
-
運行標準
Q4_K_M需承擔非對稱解包開銷,ALU 產生指令空泡,Prefill 峰值受限於 240 tok/s。 -
逐字生成需多搬運約 3 GB 權重,純自回歸速度僅 19 tok/s。
-
SGLang (GPTQ + FP8 KV):
-
Triton GEMM Kernel 在短序列(4K)能將算力完全打滿,Prefill 峰值達 504.4 tok/s。
-
具備 Radix Tree 快取,6K 重複 Prompt 首字延遲自 17~68 秒降至約 1 秒。
-
序列拉長至 64K 時受 Attention $O(N^2)$ 計算拖累,Prefill 速率下滑至 112.6 tok/s。
-
ROCmFPX + DFlash2:
-
採用對齊 RDNA 3.5 向量暫存器的對稱 FP4 算子,權重壓縮至 13.75 GB。
-
結合 Block-Diffusion Drafter(1.1 GB Draft 檔),單路解碼達 45.7~46.8 tok/s。
-
64K~128K 超長文本預填充表現最佳(128K 達 189.6 tok/s),在長序列深度下保持約 2 倍推測加速。
6. 總結
DFlash2 在保持單路 Decode 峰值吞吐(~46 tok/s)的同時,實現了更高接受率、超長序列 Prefill 提速 26%、Draft 模型減重 500 MB、以及 32K+ 深度不衰減的全面優勢。
- 單人極限吞吐 / 超長文分析(>32K):選用 ROCmFPX + DFlash2。單路輸出達 46+ tok/s,64K Prefill 速率領先其他組態 2.1~2.8 倍。
- 團隊高併發 / 多輪 Agent 工具調用:選用 SGLang (GPTQ)。依賴 Radix Tree 提示詞快取降低重覆 Prefill 開銷,搭配 Chunked Prefill 排程維持多路穩定響應。
- Stock llama.cpp(非 Fork):作為官方上游基準測試使用,不建議在 Strix Halo 產線環境作為主力推論引擎。
我用這小玩具測試是為了拋磚引玉,歡迎擁有更大SRAM的RX7900XTX 或是R9700的來試