Prhub

#37374 [CI] Fix hybrid wrapper test fake missing kv_index_translator

原始 PR 作者 mmangkad 合并时间 2026-09-01 15:55 文件变更 1 提交数 1 评论 4 代码增减 +1 / -0

执行摘要

修复混合注意力后端测试中 mock 对象缺失 `kv_index_translator` 属性导致的 CI 失败。

PR 标题和 body 明确指出是为了修复 CI 失败。该 CI 失败源于 PR #37307(fix(unified-memory): forward the KV-index translator through every wrapper backend)的后续影响,该 PR 修改了注意力后端的接口要求,但对应的单元测试中的 mock 对象未同步更新,导致测试在 CI 中运行失败。

此 PR 是一个必要且及时的小型 bugfix,旨在修复因更早的、更重要的 PR (#37307) 引入的接口变更所破坏的测试。无需精读其代码逻辑,但可作为理解 #37307 影响范围和项目测试维护实践的补充上下文。它体现了良好的开发流程:接口变更后及时补全或修复相关的测试用例。

讨论亮点

Review 评论主要集中在 CI 流程本身。合作者 hnyls2002 尝试重跑失败测试 /rerun-test test/registered/attention/test_trtllm_mha_graph_metadata.py,但被 GitHub Actions 机器人提示需要更具体的测试路径格式。这本身反映了 CI 自动化工具链的交互规范,而非代码设计讨论。无关于本次代码变更本身的技术争议或设计权衡。

实现拆解

  1. 问题定位:在 test/registered/attention/test_trtllm_mha_graph_metadata.py 文件的 test_hybrid_wrappers_forward_in_graph_hook 测试函数中,make_fake 辅助函数创建的 SimpleNamespace 对象缺少 kv_index_translator 属性。
  2. 修复动作:在 make_fake 函数返回的 SimpleNamespace 对象中,显式添加了 kv_index_translator=None 属性。这使得 mock 对象能匹配 HybridAttnBackend 等真实后端构造函数对参数的预期。
  3. 影响范围:变更仅限于测试文件,不影响任何生产代码逻辑。修复后,该测试用例能够正确验证混合注意力包装器(HybridAttnBackendHybridLinearAttnBackend)在图形捕获模式下正确转发 init_forward_metadata_in_graph 钩子的行为。
文件 模块 状态 重要度
test/registered/attention/test_trtllm_mha_graph_metadata.py TRT MHA 图元数据测试 modified 3.48

关键符号

make_fake

关键源码片段

test/registered/attention/test_trtllm_mha_graph_metadata.py test-coverage

这是唯一被修改的文件,包含了触发 CI 失败的测试用例和最终的修复。

本次修改集中在测试文件的辅助函数中。以下是修复前后 make_fake 函数定义的关键对比片段:

# 修复前的 `make_fake` 函数定义(片段)
def make_fake(name, calls):
    return SimpleNamespace(
        token_to_kv_pool=None,
        req_to_token_pool=None,
        needs_cpu_seq_lens=False,
        # 注意:此处缺少 `kv_index_translator` 属性,
        # 导致传入 HybridAttnBackend 构造函数时失败。
        init_forward_metadata_in_graph=lambda fb: calls.append(name),
    )# 修复后的 `make_fake` 函数定义(片段)
def make_fake(name, calls):
    return SimpleNamespace(
        token_to_kv_pool=None,
        req_to_token_pool=None,
        needs_cpu_seq_lens=False,
        # 新增属性,显式设置为 None,以匹配后端对参数的预期。
        kv_index_translator=None,
        init_forward_metadata_in_graph=lambda fb: calls.append(name),
    )

此修改确保了由 make_fake 创建的 mock 对象在结构上兼容 HybridAttnBackend 的构造函数要求,从而使测试能够顺利执行。

评论区精华

CI 测试重跑命令格式 question

合作者 `hnyls2002` 发出 `/rerun-test test/registered/attention/test_trtllm_mha_graph_metadata.py` 命令尝试重跑失败测试。GitHub Actions 机器人回复错误提示,要求指定具体的测试文件路径格式,例如 `test/registered/core/test_srt_endpoint.py::TestSRTEndpoint.test_simple_decode`。

结论:明确了 `/rerun-test` 命令的正确使用格式,需要提供完整的测试路径(可包含类名和方法名),而不能只提供部分文件名或通配符(除非用反引号包裹)。 · 已解决(通过机器人提示)

风险与影响

风险极低。本次变更仅涉及单个测试文件的 mock 数据结构补充,旨在恢复测试的正确性。不涉及任何生产逻辑、核心路径或数据契约的变更,因此不存在回归、性能、安全或兼容性风险。

  1. 直接影响:修复了 CI 中一个单元测试的失败,确保了相关测试套件的绿色状态,维护了代码库的持续集成可靠性。
  2. 间接影响:该测试验证了 HybridAttnBackend 等关键组件在图形捕获流程中的正确性。修复测试确保了这一正确性逻辑有持续的、自动化的守护,间接提升了对应注意力后端代码的可信度。
  3. 团队影响:为开发者消除了一个 CI 红灯,减少了修复基础设施工具或测试代码的人力投入。
测试覆盖缺口

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论