Prhub

#44308 [ROCm] Fix AITER RMSNormQuantFusion for Kimi-Linear

原始 PR 作者 pschlan-amd 合并时间 2026-06-02 22:50 文件变更 1 提交数 2 评论 4 代码增减 +9 / -2

执行摘要

修复 Kimi-Linear 模型 AITER 融合崩溃

Kimi-Linear 模型在 vLLM 中启用 AITER 支持时崩溃,错误为 'KimiGatedDeltaNetAttention' object has no attribute 'num_v_heads'。PR 需要适配 KimiGatedDeltaNetAttention 使用 num_heads 而非 num_v_heads 的属性命名差异。

建议合并。修复是精确且低风险的,已通过 e2e 验证。未来可考虑在类似属性访问模式中统一使用 getattr 回退或定义接口契约。

讨论亮点

审核者 tjtanaa 要求提供本地 e2e 验证结果,作者提交了 lm_eval gsm8k 结果 (accuracy ~0.83),审核者确认合并。此外,作者报告在多并发运行时观察到一些绕回行为(可能与 workspace_manager 的缓冲区分配有关),审核者提示该问题与此 PR 无关,建议另开 Issue。

实现拆解

  1. 定位属性差异:在 rocm_aiter_fusion.pyRocmAiterRMSNormQuantFusionPass.__init__ 中,遍历 GDN 层时原先直接访问 layer.num_v_headslayer.head_v_dim,但 Kimi-Linear 的 KimiGatedDeltaNetAttention 使用 num_headshead_dim 命名。
  2. 改用 getattr 回退:将直接属性访问替换为 getattr(layer, "num_v_heads", None) or getattr(layer, "num_heads", None)getattr(layer, "head_v_dim", None) or getattr(layer, "head_dim", None),确保兼容两种命名约定。
  3. 添加断言保护:如果两个属性均不存在则 assert 失败,避免静默错误传播。
  4. 调整版本:第一个 commit 实现修复,第二个 commit 修复代码风格 (ruff) 问题。
文件 模块 状态 重要度
vllm/compilation/passes/fusion/rocm_aiter_fusion.py 编译优化 modified 5.37

关键符号

RocmAiterRMSNormQuantFusionPass.__init__

关键源码片段

vllm/compilation/passes/fusion/rocm_aiter_fusion.py core-logic

唯一变更文件,修复 AITER RMSNorm 量化的 GDN 层属性查找。

# vllm/compilation/passes/fusion/rocm_aiter_fusion.py
# 在 RocmAiterRMSNormQuantFusionPass.__init__ 中,遍历 GDN 层时
# 使用 getattr 回退兼容 KimiLinear 等模型的属性命名差异
for layer in gdn_layers.values():
    # KimiGatedDeltaNetAttention 使用 num_heads 而非 num_v_heads
    num_v_heads = getattr(layer, "num_v_heads", None) or getattr(
        layer, "num_heads", None
    )
    # 类似处理 head_v_dim / head_dim
    head_v_dim = getattr(layer, "head_v_dim", None) or getattr(
        layer, "head_dim", None
    )
​
    # 确保至少获取到一个有效值
    assert num_v_heads is not None and head_v_dim is not None
​
    # 计算张量并行感知的 (num_heads, head_dim) 对
    gated_norm_shapes.add((num_v_heads // layer.tp_size, head_v_dim))

评论区精华

验证结果与并发问题 question

审核者要求提供 e2e 验证结果;作者提供 lm_eval gsm8k 结果,并提及多并发时观察到绕回行为。

结论:验证通过;绕回问题与此 PR 无关,已建议另开 Issue。 · 已解决

风险与影响

风险低。回退逻辑仅影响 GDN 层的属性查找路径,若两个属性均缺失则会触发 assert,避免静默错误。可能的风险在于未来其他 GDN 变体若使用不同的属性命名,但此 PR 已通过 getattr 链覆盖了两种常见命名。缺少单元测试覆盖此兼容性路径是轻微不足。

直接影响:使 moonshotai/Kimi-Linear-48B-A3B-Base 模型在启用 AITER 时正常加载和推理。间接受益:其他采用类似属性命名的 GDN 变体(如 num_heads 而非 num_v_heads)也能自动兼容。变更限于 ROCm 平台的 AITER 融合路径,不影响其他后端。

缺少测试覆盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论