N卡 vs A卡 推理加速支持矩阵

同一个 Qwen3.8 27B,在 N 卡上开 MTP 快 2.5 倍,在 R9700 上却只比基线快一点点——甚至配错了还会掉速。这篇把 2026 年 10 月时点,MTP、DFlash2、MXFP4/NVFP4 量化、FP8 KV、前缀缓存这些加速技术在 N 卡(CUDA 线)和 A 卡(ROCm 线) 上的支持矩阵和实测数据一次讲清,数据来自 R9700 社区完整实测报告 + vLLM/SGLang 官方 release notes,口径全部标注。

先说结论


一、环境硬件条件(这套东西要什么才能跑通)

A 卡 R9700(本文实测基线)

组件 规格 / 要求
GPU AMD Radeon AI PRO R9700,RDNA4 / gfx1201 / 32GB GDDR6(640 GB/s)
引擎 vLLM 0.28.0(走社区 fork magiccodingman/vllm-radiance:1.0.15,非通用 rocm 映像)
系统 Linux(CachyOS 实测),ROCm;关闭图形界面后开机 VRAM 仅占 65MB
主模型 amd/Qwen3.8-27B-Quark-AWQ-MXFP4(19GB,MXFP4/W4A8)
Drafter tcclaviger/Qwen3.8-27B-DFlash2-FP8(2GB,FP8,block 128)
关键 kernel RadianceMxfp4W4A8LinearKernel(原生 MXFP4 W4A8 GEMM)+ R4D attention(仅支持 GQA=6)

为什么 A 卡必须走社区 fork:RDNA4(gfx1201)没有原生 MXFP4 运算单元。通用 rocm/vllm 映像遇到 MXFP4 会退回"模拟反量化"(BF16 高精度计算),速度落后 3-5 倍。社区 fork vllm-radiance 为 gfx1201 实作了原生 MXFP4 W4A8 kernel 与 R4D attention 后端——这是 R9700 能跑到 2300+ prefill 的前提。启动日志出现 "The current platform does not support native MXFP4/MXFP6 computation" 是 quark 模块另一支 supports_mx() 的误报,真实 kernel 状态以 RadianceMxfp4W4A8LinearKernel for MXFP4 GEMM 行为为准。

N 卡(对照)

档位 引擎 量化 说明
RTX 50 系 / Blackwell vLLM 0.31.0 / SGLang NVFP4 / MXFP4(SM100/SM103 原生) NVFP4 走 torch linear backend(#53319)
H 系列数据中心 vLLM / SGLang FP8 / NVFP4 DeepSeek-V4.1-Flash NVFP4 压缩 KV 成 SM100 默认

二、实测数据(全部带口径)

1. MTP vs DFlash2 正面对比(R9700,8 并发 / 4.2K prompt / greedy / 128 out)

指标 MTP spec=3 MTP spec=5 DFlash2 spec=7(采用)
decode(1/TPOT) 23.7 tok/s 23.9 tok/s 67.1 tok/s
e2e 吞吐 82.4 tok/s 55.6 tok/s 181 tok/s
prefill 897 tok/s 913 tok/s 2235 tok/s
draft 接受率 74.7% 59.4% 42.2%

结论:MTP 能跑,但 1 层 MTP 头每步自回归跑 N 次,spec 越多浪费越多——比 DFlash2 慢约 2.8 倍 decode、2-3 倍 e2e。 MTP 仅在需要"零外部 drafter 占用"时使用。另 MTP spec=5 在 7.25GiB KV 预算下无法开机(需 7.32GiB),spec≥4 要把 max_model_len 降到 160000。

2. DFlash2 spec tokens 数实验(8 并发 / 4K prompt / 128 out)

指标 spec=7(采用) spec=5
decode 67.1 tok/s 60.6 tok/s
e2e 181 tok/s 162 tok/s
prefill 2235 tok/s 1747 tok/s
接受率 42.2% 50.5%

不能只看接受率:spec=5 单位接受率更高,但每步 draft 位置少,有效吞吐反而输。spec=7 全面胜出。

3. 生产负载实测(R9700,真实 agent 负载)

指标 数据
单路思考 稳定 ~40 t/s
编程场景 70-80 t/s
冷启动单序列 decode 稳态 ~127 tok/s(batch=1,全 token 口径,7.9 ms/token)
prefill 冷启动 短 ctx ~2337 tok/s → 115K ctx ~1438 tok/s(随长度递减,KV 二次成本)
prefill 长 context 8K=2319 / 32K=2589 / 64K=3311 / 128K=2609 tok/s(稳定 2300-3300)
前缀缓存命中率 75.9% ~ 91.2%
DFlash2 接受率(生产) 26-29%(平均接受长度 2.83-3.04)
并发扩展(每路 max 256 tok) 1 路 41.5 → 8 路聚合 152.4 tok/s
对比 llama.cpp Q4_K_XL 思考 25-40 / 编程 50-75 t/s(vLLM+radiance 明显更快)

口径提醒:单流 127 tok/s 是 batch=1 全 token 吐速(reasoning token 占大头,纯 content 节奏仅 ~16/s);210W 限功率下的数字(参考配置是 350W,功率差异会拉低 prefill)。

4. N 卡侧对照(官方 release + 社区口径)

指标 数据 来源
RTX 50 系 + Qwen3.6 27B NVFP4 + MTP 推理快 2.5 倍 社区实测(头条)
vLLM 0.31 MTP / EAGLE3 / DFlash / DSpark 均已支持(#46994 / #50514) vLLM 官方 release
vLLM 0.31 NVFP4 torch linear backend(#53319) vLLM 官方 release
vLLM 0.31 Fast Restart 含 MTP draft models(#57312) vLLM 官方 release
SGLang MTP / Eagle 投机解码 / FP8 / 多 GPU 均支持(MTP #24955) SGLang 官方 release
SGLang on ROCm MI300X 首测通过(2026.6,RadixAttention 长上下文验证) 社区实测(CSDN,单源)

三、踩坑指南(按发生顺序,现象 → 原因 → 解法)

  1. "平台不支持原生 MXFP4" 误报卡住判断:日志那行是 quark 模块另一支 supports_mx() 的误报。→ 看 RadianceMxfp4W4A8LinearKernel for MXFP4 GEMM 确认 kernel 真启用,别据日志误判 kernel 没开。
  2. MTP 开了反而降速:1 层 MTP 头自回归 N 次 + A 卡带宽瓶颈,spec 越大浪费越多。→ R9700 上 MTP 只作备用,主力用 DFlash2 spec=7。
  3. spec tokens > 7 直接开机崩:dflash2 draft window 8×(n+1),n=10 时 torch.compile 把该维特化成常量 88 标为 DYNAMIC,torch.fx ConstraintViolationError 崩 EngineCore。→ 清缓存重编也无解,spec=7 是硬上限。
  4. MoE 量化模型 decode 慢到 5.8 tok/s:MoE 量化模型(如 Qwen3.6-35B-A3B)在 radiance 映像走 on-the-fly 反量化,比 dense 27B+dflash 慢 4-8 倍。→ 已移除不保留,MoE 走 FP8 非量化路径。
  5. INT4 drafter 无法加载:W4A16 Marlin pack 量化,linear 权重在 packed buffer,radiance DFlash loader 要求 dense .weight → AttributeError。→ 维持 tcclaviger FP8 drafter,改源码才行。
  6. MAX_BATCHED_TOKENS 调高 OOM:8192→16384 使 activation/workspace 峰值翻倍,32GB(权重 19 + KV 7.25 已锁)长 prompt prefill 时 torch.OutOfMemoryError。→ 回退 8192;要重试先缩 KV_MEM。
  7. Quark algo_config 非 null 崩 mapper:config.json 的 quantization_config.algo_config 若非 null,Quark mapper 把 dict 项当字符串 .endswith 检查 → AttributeError。→ 设 null 再加载(纯 mapper 兼容字段,不影响权重)。
  8. R4D 后端只支持 GQA=6:GQA=8 的 MoE 模型(如 Qwen3.6)直接 NotImplementedError。→ 改 TRITON_ATTN 并关 R4D 环境变量。
  9. MTP spec≥4 KV 不足:spec=5 需 7.32GiB > 7.25GiB 可用,engine-init 失败。→ 降 max_model_len 至 160000。

四、避坑指南(没踩但知道会翻车的)


五、配置清单(可照抄,分档)

A 卡 R9700 主力配置(实测验证)

参数 值
引擎映像 magiccodingman/vllm-radiance:1.0.15
量化 MXFP4(W4A8),RADIANCE_MXFP4=1 + radiance 优化旗标(WPERM / HOIST_QUANT / EPIFAST / SKINNY_GEMM / R4D)
投机解码 dflash,num_speculative_tokens=7(硬上限),TRITON_ATTN
KV cache --kv-cache-dtype fp8 + --kv-cache-memory 7,783,339,733(7.25GiB 显式预算)
gpu-memory-utilization 0.98
max-model-len 163,840(想上 204,800 就把 max-num-batched-tokens 降到 2048)
max-num-batched-tokens 8,192(调高会 OOM)
max-num-seqs 8(长 agent 场景 2-4)
attention-backend R4D(仅 GQA=6;GQA=8 改 TRITON_ATTN)
调度 --no-async-scheduling(实测 async 无收益)
MTP 仅备用(比 DFlash2 慢 2.8×,不推荐主力)

可用/不可用最终清单(R9700)

技术 状态
MXFP4(走 radiance fork) ✅ 能开,原生 W4A8 kernel
DFlash2 投机解码 spec=7 ✅ 能开,主力方案
FP8 KV cache ✅ 能开(需显式指定,非默认)
Prefix caching ✅ 能开,命中率 75-91%
R4D attention ✅ 能开(限 GQA=6)
MTP ⚠️ 能跑但慢 2.8×,仅备用
spec tokens > 7 ❌ 开机崩,硬上限 7
INT4 drafter ❌ 无法加载(W4A16 Marlin 不兼容)
MoE 量化模型 ❌ on-the-fly 反量化慢 4-8×,不保留
NVFP4(直接丢 R9700) ❌ 退回 BF16 慢 3-5×,须走 MXFP4 路径
SGLang ROCm 消费卡 ⏳ 上游 gap,继续等

N 卡 Blackwell 对照配置

参数 值
量化 NVFP4(vllm serve unsloth/Qwen3.6-27B-NVFP4)
投机解码 --speculative-config '{ method: mtp, num_speculative_tokens: 2 }'(vLLM 0.31 MTP #46994)
加速收益 推理快 2.5 倍(RTX 50 系实测)
可选 EAGLE3 / DFlash / DSpark(#50514)+ Fast Restart MTP draft(#57312)

硬件档位建议

档位 配置 适合
单卡 A 卡 R9700 + radiance fork + DFlash2 spec=7 27B 单流 40-127 t/s
双卡 A 卡 2× R9700(社区报告单流 150+ t/s) 70B / 高并发
N 卡消费级 RTX 50 系 + NVFP4 + MTP 2.5× 加速甜点
老平台升级 9950X + X870E(双 PCIe 5.0 x8/x8)+ R9700 host 调度瓶颈解除,撑到 2028

数据源:lcz.me t1529(R9700 完整实测报告,paul hou,2026-09-06,210W 限功率口径)、vLLM 0.31.0 官方 release notes(#46994/#50514/#53319/#57312)、SGLang 官方 release(MTP #24955)、RTX 50 系 NVFP4 社区实测(头条)、SGLang ROCm MI300X 首测(CSDN,单源)。单源/限功率口径均已标注。