RuntimeError: Worker failed with error ”ROCMAiterMLASparseImpl’ object has no attribute ‘record_logical_topk_ready”

在 ROCm 上启用 VLLM_USE_BREAKABLE_CUDAGRAPH=1 后,引擎启动阶段会把 compilation_config.custom_ops 解析为包含 'all' ,从而启用 sparse_attn_indexer_kpool ;AMD 实现只定义了 forward_nat

快速结论:在 ROCm 上启用 VLLM_USE_BREAKABLE_CUDAGRAPH=1 后,引擎启动阶段会把 compilation_config.custom_ops 解析为包含 'all',从而启用 sparse_attn_indexer_kpool;AMD 实现只定义了 forward_native,ROCm 派发链 forward_hip → forward_cuda 落空,于是在 profile_run 首次 forward 时抛出 NotImplementedError。优先检查是否开启了 breakable cudagraph,以及当前代码是否包含修复。

适用环境:vLLM ROCm nightly 镜像 vllm/vllm-openai-rocm:nightly-0bfc7a15d095fe83ecc82b50561a93c177fece2d(报告版本 v0.29.1rc0.dev265+g0bfc7a15d,实际版本 tag 由 #57295 修正,与本 Bug 无关);8× AMD MI350X(gfx950),TP8;模型 zai-org/GLM-5.3-Flash(fp8);aiter 2693202;开启 VLLM_ROCM_USE_AITER=1VLLM_ROCM_USE_AITER_MLA=1VLLM_ROCM_USE_AITER_MOE=1VLLM_USE_BREAKABLE_CUDAGRAPH=1。Rust frontend 与 MRV2(VLLM_USE_V2_MODEL_RUNNER=1)经确认不影响该问题。

最快修复方案:暂无确认的一步修复方案。Issue 中已验证的修补方式是为 AMD 的 SparseAttnIndexerKpool 补上 forward_cuda(实现于 #57425,采用 forward_hip 实现),使 ROCm 派发有落点;在拿到含该修复的版本前,可先不设置 VLLM_USE_BREAKABLE_CUDAGRAPH=1 规避启动失败,但该规避会失去 breakable cudagraph 相关能力。

注意事项:报错文本中的 'ROCMAiterMLASparseImpl' object has no attribute 'record_logical_topk_ready' 属于另一个问题(#57248 / #57252 / #56604),需单独打补丁;本 Issue 的 NotImplementedError 是在前者被修补后才暴露出来的下一个阻塞点。改用 Rust frontend 或 MRV2 都不能绕开,因为 'all' 仍会被注入 custom_ops

问题场景

在 ROCm 环境用 vLLM 启动 zai-org/GLM-5.3-Flash(fp8,TP8,--max-num-batched-tokens 16384 --max-model-len 524288)时,引擎在 profile_run 阶段、每个 worker rank 的首次 forward 崩溃。触发条件是启用了 breakable cudagraph(VLLM_USE_BREAKABLE_CUDAGRAPH=1),它会把解析后的 compilation_config.custom_ops 变成包含 'all' 的列表,从而启用所有已注册的 CustomOp,包括 sparse_attn_indexer_kpool。调用位置为 vllm/models/glm5next/common/attention.py:392self.indexer_op(...)

报错原文

(APIServer ... ) RuntimeError: Worker failed with error ''ROCMAiterMLASparseImpl' object has no attribute 'record_logical_topk_ready''

File "vllm/model_executor/custom_op.py", line 149, in forward_hip
    return self.forward_cuda(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "vllm/model_executor/custom_op.py", line 145, in forward_cuda
    raise NotImplementedError
NotImplementedError

原因分析

最可能的原因(Issue 中已定位):在 ROCm 上,CustomOp.dispatch_forward 会把已启用的算子路由到 forward_hip,而 forward_hip 又回退到 forward_cuda。AMD 侧 SparseAttnIndexerKpoolvllm/models/glm5next/amd/sparse_indexer.py,注册名 sparse_attn_indexer_kpool)只定义了 forward_native,没有 forward_cuda,因此只要该算子被启用,第一次 forward 就会抛 NotImplementedError。作为对比,NVIDIA 实现同时定义了 forward_nativeforward_cuda,AMD 版缺少 ROCm 派发所需的别名。

触发开关:nightly 上解析出的 compilation_config.custom_ops['+quant_fp8', '+grouped_topk', '+sparse_attn_indexer', 'all', '+quant_fp8'],其中 'all' 会启用全部已注册算子。评论区进一步确认 VLLM_USE_BREAKABLE_CUDAGRAPH=1 是唯一触发因素;在未打补丁的 nightly 上配 MRV2 + Rust Frontend 同样复现,说明 frontend 与 model-runner 版本不改变该派发路径。

环境排查

  • 确认镜像与提交:vllm/vllm-openai-rocm:nightly-0bfc7a15d095fe83ecc82b50561a93c177fece2d,报告版本 v0.29.1rc0.dev265+g0bfc7a15d;注意版本 tag 误报由 #57295 修正,与本 Bug 无关。
  • 确认显卡与拓扑:AMD MI350X(gfx950),TP8。
  • 确认是否设置 VLLM_USE_BREAKABLE_CUDAGRAPH=1(本问题的触发开关)。
  • 确认 ROCm 相关 AITER 开关:VLLM_ROCM_USE_AITER=1VLLM_ROCM_USE_AITER_MLA=1VLLM_ROCM_USE_AITER_MOE=1,aiter 版本 2693202
  • 确认是否已打 #56604、#57192、#57317 等相关补丁,否则会先撞上 record_logical_topk_ready 缺失的问题。
  • 查看引擎初始化日志中的 compilation_config.custom_ops,确认是否出现 'all'
  • 确认注意力后端:--attention-backend ROCM_AITER_MLA_SPARSE

解决步骤

  1. 先确认撞到的是哪一个报错。若出现 'ROCMAiterMLASparseImpl' object has no attribute 'record_logical_topk_ready',先处理 #57248 / #57252 / #56604 相关补丁,再观察是否进入 NotImplementedError
  2. 用与复现一致的最小配置起服务(VLLM_ROCM_USE_AITER=1 VLLM_ROCM_USE_AITER_MLA=1 VLLM_ROCM_USE_AITER_MOE=1 VLLM_USE_BREAKABLE_CUDAGRAPH=1--enable-expert-parallel--max-model-len 524288),确认启动阶段稳定复现该错误。
  3. 检查引擎初始化日志中 compilation_config.custom_ops 是否包含 'all',确认 sparse_attn_indexer_kpool 被启用。
  4. 为 AMD 的 SparseAttnIndexerKpool 补上 ROCm 派发所需的方法,使其不再落到空的 forward_cuda;Issue 中验证过的形式是在类级别做别名 SparseAttnIndexerKpool.forward_cuda = SparseAttnIndexerKpool.forward_native,或把 forward_cuda 定义为一个调用 forward_native 的方法,与 NVIDIA 实现保持一致。官方修复实现见 #57425(在 forward_hip 中实现)。
  5. 若暂时无法改代码,可先不设置 VLLM_USE_BREAKABLE_CUDAGRAPH=1 以规避启动崩溃(此规避在 Issue 中作为触发条件分析得出,非官方推荐修复)。
  6. 替换为包含该修复的镜像或提交后重新启动服务。

验证方法

应用一行别名后,报告者确认引擎可正常启动到 Ready 状态(57 个 FULL + 106 个 PIECEWISE cudagraph),并通过 chunked-prefill 复现用例,以及最高到 524,212 token 的长上下文阶梯测试,全程无内存访问错误。你可以按同样方式验证:引擎进入 Ready,正常完成 profile_run,并在长上下文请求下不再出现 custom_op.py:145 forward_cudaNotImplementedError

参考来源

vllm-project/vllm #57424

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24159

发表回复

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