[Bug]: GLM-5.2 MTP accepts 0% of drafts on MI355X (gfx950); disabling expert parallelism hits hipErrorIllegalAddress

这是在 AMD MI355X (gfx950) + ROCm 上,用 vLLM 0.27.1 跑 GLM-5.2-MXFP4 并启用 MTP 投机解码时出现的“草稿接受率为 0”问题;通常优先排查 AITER MLA FP4/FP8 BMM 相关开关,以及由 EP 关闭引发的 hipErrorIll

快速结论:这是在 AMD MI355X (gfx950) + ROCm 上,用 vLLM 0.27.1 跑 GLM-5.2-MXFP4 并启用 MTP 投机解码时出现的“草稿接受率为 0”问题;通常优先排查 AITER MLA FP4/FP8 BMM 相关开关,以及由 EP 关闭引发的 hipErrorIllegalAddress。

适用环境:vLLM 0.27.1+rocm723(容器 vllm/vllm-openai-rocm:v0.27.1)、PyTorch 2.11.0+gitd0c8b1f、ROCm 7.2.3、8x AMD Instinct MI355X (gfx950)、amdgpu 6.16.13 / kernel 6.8.0-137-generic;模型 amd/GLM-5.2-MXFP4(quark MXFP4),MoE backend 为 aiter。

最快修复方案:按维护者验证过的做法,设置 export VLLM_ROCM_USE_AITER_FP4BMM=0 与 export VLLM_ROCM_USE_AITER_FP8BMM=0 后重启服务;评论中给出的 EP8 场景接受率恢复到 177/395 = 44.8%。也可尝试切到最新 main(commit 16cfe72)并使用 vllm-recipes 中的启动参数组合。

注意事项:关闭 FP4/FP8 BMM 会改变 MLA 注意力中量化 BMM 路径的行为,属于规避手段;相关根因修复由 PR #53123 跟进,长期应升级到包含该修复的版本。Issue 中的 SGLang 对比数据已由报告者撤回,不能作为验收基准。

问题场景

在 8 卡 MI355X 上通过 vllm serve 加载 /models/GLM-5.2-MXFP4,使用 --tensor-parallel-size 8、--enable-expert-parallel、--kv-cache-dtype fp8、--moe-backend aiter,并配置 --speculative-config '{"method":"mtp","num_speculative_tokens":3}'。服务能正常启动(target 为 GlmMoeDsaForCausalLM,draft 为 DeepSeekMTPModel),但 MTP 草稿 token 接受率为 0,投机解码只带来额外开销。报告者还尝试了 num_speculative_tokens=1、--kv-cache-dtype auto,以及去掉 --enable-expert-parallel。

报错原文

SpecDecoding metrics: Mean acceptance length: 1.00, Accepted throughput: 0.00 tokens/s,
Drafted throughput: 37.80 tokens/s, Accepted: 0 tokens, Drafted: 378 tokens,
Per-position acceptance rate: 0.000, 0.000, 0.000, Avg Draft acceptance rate: 0.0%

WARNING [speculative.py:912] Enabling num_speculative_tokens > 1 will run multiple times
on same MTP layer, which may result in lower acceptance rate

terminate called after throwing an instance of 'c10::AcceleratorError'
Search for `hipErrorIllegalAddress' in https://rocm.docs.amd.com/projects/HIP/en/latest/index.html
Exception raised from ~CUDAGraph at /app/pytorch/aten/src/ATen/hip/HIPGraph.cpp:302

原因分析

维护者给出的根因是:GLM-5.2-MXFP4 刻意将包括 kv_b_proj 在内的所有 MLA 注意力权重以 BF16 保存,而默认开启的 AITER MLA FP4 BMM 路径会在权重加载完成之后,将这些本应保持 BF16 的注意力权重重量化成 MXFP4,导致 MTP 草稿质量崩溃、接受率归零。相关上下文涉及 PR #48051。

报告者的实验也排除了几个方向:num_speculative_tokens=1 时 position 0 仍为 0.000,因此“同一 MTP 层重复执行”的启动警告不是主因;改用 bf16 KV 只使 position 0 从 0.000 提升到约 0.05,说明 fp8 KV 有影响但不是根因;检查 Layer 78 的量化排除配置后,认为 quark 加载器没有错误处理未量化的 nextn 层。

去掉 --enable-expert-parallel 后在内存 profiling 阶段出现 hipErrorIllegalAddress(抛出位置为 ~CUDAGraph / HIPGraph.cpp:302),可能原因与 ROCm 图捕获在非 EP 配置下的资源或图析构路径有关;Issue 未给出该崩溃的独立根因结论,需单独排查。

环境排查

  • 确认 vLLM 版本:Issue 复现于 0.27.1+rocm723,维护者建议验证最新 main(commit 16cfe72)。
  • 确认 ROCm 7.2.3、PyTorch 2.11.0+gitd0c8b1f、容器镜像 vllm/vllm-openai-rocm:v0.27.1。
  • 确认 GPU 为 8x AMD Instinct MI355X (gfx950),amdgpu 6.16.13,kernel 6.8.0-137-generic。
  • 确认模型为 amd/GLM-5.2-MXFP4,MoE backend 为 aiter。
  • 确认是否使用 --enable-expert-parallel、--kv-cache-dtype 取值及 num_speculative_tokens 设置。
  • 确认 AITER 相关环境变量,尤其是 VLLM_ROCM_USE_AITER_FP4BMM、VLLM_ROCM_USE_AITER_FP8BMM 是否被显式置为 0。

解决步骤

  1. 先保留原有 EP 配置,设置:
    export VLLM_ROCM_USE_AITER_FP4BMM=0
    export VLLM_ROCM_USE_AITER_FP8BMM=0,然后重新启动 vLLM 服务。
  2. 可优先尝试:升级到包含修复的版本(Issue 修复 PR:#53123),或使用维护者验证过的最新 main(commit 16cfe72)。
  3. 参考维护者的可工作配置:VLLM_USE_V2_MODEL_RUNNER=1、VLLM_ROCM_USE_AITER_FP8BMM=0、VLLM_ROCM_USE_AITER_FP4BMM=0、VLLM_ROCM_USE_AITER=1、VLLM_ROCM_USE_AITER_FUSION_SHARED_EXPERTS=1,并配合 --kv-cache-dtype fp8_e4m3、--linear-backend aiter、--moe-backend aiter、--speculative-config '{"method":"mtp","num_speculative_tokens":5}'。
  4. 若仍无法启动或想去掉 EP 定位崩溃,先不要以关闭 EP 作为修复手段;hipErrorIllegalAddress 是独立现象,应在能复现的最小配置下单独收集日志。
  5. 避免把 Issue 中已撤回的 SGLang 模拟接受率(SGLANG_SIMULATE_ACC_LEN=2.99 等)当作对比基线。

验证方法

查看服务日志中的 SpecDecoding metrics:在禁用 FP4/FP8 BMM 后,应看到 Per-position acceptance rate 不再全为 0.000,Avg Draft acceptance rate 明显大于 0(维护者复现中 EP8 达到 44.8%;另一组配置下 Mean acceptance length 为 3.00、Avg Draft acceptance rate 为 40.0%)。同时确认服务稳定运行、未出现 hipErrorIllegalAddress。

参考来源

vllm-project/vllm #52833

vllm-project/vllm PR #53123

vllm-project/vllm PR #48051

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 33284

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注