快速结论:在 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=1、VLLM_ROCM_USE_AITER_MLA=1、VLLM_ROCM_USE_AITER_MOE=1 与 VLLM_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:392 的 self.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 侧 SparseAttnIndexerKpool(vllm/models/glm5next/amd/sparse_indexer.py,注册名 sparse_attn_indexer_kpool)只定义了 forward_native,没有 forward_cuda,因此只要该算子被启用,第一次 forward 就会抛 NotImplementedError。作为对比,NVIDIA 实现同时定义了 forward_native 和 forward_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=1、VLLM_ROCM_USE_AITER_MLA=1、VLLM_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。
解决步骤
- 先确认撞到的是哪一个报错。若出现
'ROCMAiterMLASparseImpl' object has no attribute 'record_logical_topk_ready',先处理 #57248 / #57252 / #56604 相关补丁,再观察是否进入NotImplementedError。 - 用与复现一致的最小配置起服务(
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),确认启动阶段稳定复现该错误。 - 检查引擎初始化日志中
compilation_config.custom_ops是否包含'all',确认sparse_attn_indexer_kpool被启用。 - 为 AMD 的
SparseAttnIndexerKpool补上 ROCm 派发所需的方法,使其不再落到空的forward_cuda;Issue 中验证过的形式是在类级别做别名SparseAttnIndexerKpool.forward_cuda = SparseAttnIndexerKpool.forward_native,或把forward_cuda定义为一个调用forward_native的方法,与 NVIDIA 实现保持一致。官方修复实现见 #57425(在forward_hip中实现)。 - 若暂时无法改代码,可先不设置
VLLM_USE_BREAKABLE_CUDAGRAPH=1以规避启动崩溃(此规避在 Issue 中作为触发条件分析得出,非官方推荐修复)。 - 替换为包含该修复的镜像或提交后重新启动服务。
验证方法
应用一行别名后,报告者确认引擎可正常启动到 Ready 状态(57 个 FULL + 106 个 PIECEWISE cudagraph),并通过 chunked-prefill 复现用例,以及最高到 524,212 token 的长上下文阶梯测试,全程无内存访问错误。你可以按同样方式验证:引擎进入 Ready,正常完成 profile_run,并在长上下文请求下不再出现 custom_op.py:145 forward_cuda 的 NotImplementedError。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![Misc. bug: [SYCL] incorrect func sig for `ggml_backend_sycl_split_buffer_type`](https://www.chat-gpts.plus/wp-content/uploads/2026/09/28980-ec167301-768x403.jpg)

