Prhub

#54482 [CI/Build] Fix Kimi K3 Eagle3 test fixture

原始 PR 作者 jeejeelee 合并时间 2026-08-31 11:29 文件变更 1 提交数 1 评论 3 代码增减 +1 / -0

执行摘要

Kimi K3 Eagle3 测试 fixture 补全 forward,修复 CI

PR body 直接指向 Buildkite #86259 的 CI 失败输出,目标是修复 Kimi K3 Eagle3 测试夹具。结合修改内容可推断:test_kimi_k3_uses_shared_eagle3_layer_configuration 中用 SimpleNamespace 构造的 language_model 缺少 forward 属性,在 EAGLE3 相关接口探测时触发 AttributeError。同文件 test_kimi_linear_advertises_eagle3_support 的注释也印证了背景:Kimi 系列模型此前刚补齐 EAGLE3 接口声明(supports_eagle3),测试夹具与接口契约的同步正是本次修复的关注点。

不值得精读,属于纯测试维护。值得注意的点是 vLLM 测试中"最小 mock"策略与接口契约同步的平衡:模型新增能力接口(如 supports_eagle3)后,手工构造的 fixture 必须与 mixin 实际探测的接口保持一致,否则 CI 会先行暴露不一致。后续若改动 KimiK3 语言模型接口,应同步检查该测试。

讨论亮点

该 PR 没有实质性的技术讨论或设计争议。claude[bot] 自动评论仅提示仓库使用人工 review 流程;作者 jeejeelee 通过 /ci run 触发构建,并确认 Buildkite #86269 "has passed correctly";维护者 ZJY0516 无文字评论直接批准合入。

实现拆解

  1. 定位问题:Buildkite #86259 中 tests/models/kimi_k3/test_eagle3.py 的 test_kimi_k3_uses_shared_eagle3_layer_configuration 失败。该测试用 object.new 绕过构造函数手工搭建模型实例,language_model 使用 SimpleNamespace 模拟,缺少真实语言模型拥有的 forward 方法。
  2. 修复内容:在 SimpleNamespace 中新增一行 forward=lambda input_ids, positions: None,使 mock 与 KimiLinearModel 的调用面保持一致,满足 EAGLE3 mixin 对子模块接口的探测需要。这是本 PR 唯一的代码改动(+1/-0)。
  3. 验证与合入:作者通过 /ci run 触发 Buildkite #86269 并确认通过,维护者 ZJY0516 approve 后合入。无其他测试、配置或部署配套改动。
文件 模块 状态 重要度
tests/models/kimi_k3/test_eagle3.py 投机解码 modified 3.49

关键源码片段

tests/models/kimi_k3/test_eagle3.py test-coverage

本 PR 唯一修改的文件。为 test_kimi_k3_uses_shared_eagle3_layer_configuration 中手工构造的 language_model mock(SimpleNamespace)补上缺失的 forward 属性,修复 Buildkite #86259 的 CI 失败。

def test_kimi_k3_uses_shared_eagle3_layer_configuration():
    # 用 object.__new__ 绕过 __init__ 构造最小实例,聚焦验证
    # aux hidden state layer 配置在 K3 与 KimiLinearModel 间的传递
    target = object.__new__(KimiK3ForConditionalGeneration)
    torch.nn.Module.__init__(target)
    model = _make_kimi_linear_model()
    object.__setattr__(model, "layers", [None] * 93)
​
    # language_model 用 SimpleNamespace 代替真实模块
    # forward 属性是 EAGLE3 探测子模块接口时的必需项
    # 缺失会让本测试在 CI 中抛 AttributeError 异常
    # 本 PR 的修复点就是补上这个属性
    language_model = SimpleNamespace(
        embed_input_ids=lambda _: None,
        forward=lambda input_ids, positions: None,
        model=model,
    )
    object.__setattr__(target, "language_model", language_model)
    object.__setattr__(target, "_language_model_names", ["language_model"])
​
    # 验证 K3 共享 EAGLE3 层配置:写入后可同时从模型与 target 两侧读到
    target.set_aux_hidden_state_layers((2, 46, 90))
​
    assert model.aux_hidden_state_layers == (2, 46, 90)
    assert target.get_eagle3_default_aux_hidden_state_layers() == (2, 46, 90)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

技术风险极低:改动仅限测试文件一行,不触及产品代码、模型实现或推理路径,无回归、性能与安全影响。唯一值得留意的是 mock 的脆弱性——该测试用手工 SimpleNamespace 模拟语言模型,只实现了 embed_input_ids 与 forward 两个接口;若后续 EAGLE3 mixin 或 KimiK3 模型扩展接口探测(如新增属性、改变 forward 签名),同样的 AttributeError 会再次出现,需要同步维护此 fixture。

影响面极小且封闭在测试域内:唯一改动文件是 tests/models/kimi_k3/test_eagle3.py,作用是恢复相关测试在 CI 上的绿灯状态;对推理引擎、模型行为、用户 API 均无影响。团队角度:该修复解除了 Kimi K3 相关测试对主线的阻塞,同时提醒后续修改模型接口时需同步更新手工 mock。

mock 接口契约易失配

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论