Prhub

#37345 test: update hybrid attention runner fixtures

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

执行摘要

补充 4 个测试 fixture 的 kv_index_translator 字段,适配 HybridAttnBackend 接口变更。

PR body明确说明 'add kv_index_translator to mocked model runners that construct HybridAttnBackend',目的是 'cover CPU and GPU unit-test fixtures without changing production behavior'。这直接响应了PR#37307引入的接口变更,该变更要求所有HybridAttnBackend wrapper必须接收并转发kv_index_translator。

本PR是典型的“测试配套修复”,虽然改动微小,但值得快速阅读,特别是对于维护HybridAttnBackend或关注测试与生产代码一致性的开发者。它展示了在接口变更后如何系统性地更新测试fixture。

讨论亮点

本PR没有正式的review讨论。从issue评论可见,作者通过/run rerun-test命令手动触发了受影响测试用例的重新运行,并引用了CI失败链接作为修复前的状态。这表明PR的动机是修复CI,而非设计讨论。

实现拆解

  1. 识别缺失字段:分析PR#37307的生产代码变更,发现HybridAttnBackend等wrapper后端现在需要从model_runner读取kv_index_translator属性。测试中使用SimpleNamespace模拟model_runner,但此前未定义该字段,导致测试失败。
  2. 添加字段值:在4个测试文件中,为所有构建HybridAttnBackendSimpleNamespace fixture添加kv_index_translator=None。由于是mock环境,设置为None即可满足接口要求。变更涉及的文件包括:test/registered/unit/model_executor/model_runner_components/test_attention_backend_setup.pytest/registered/attention/test_trtllm_mha_graph_metadata.pytest/registered/unit/layers/attention/test_verify_mask.pytest/registered/unit/spec/test_dflash_overlap_hostsync.py。所有变更均为+1行,不涉及逻辑修改。
文件 模块 状态 重要度
test/registered/unit/model_executor/model_runner_components/test_attention_backend_setup.py 后端初始化测试 modified 3.69
test/registered/attention/test_trtllm_mha_graph_metadata.py 图元数据测试 modified 3.48
test/registered/unit/layers/attention/test_verify_mask.py 掩码验证测试 modified 3.48
test/registered/unit/spec/test_dflash_overlap_hostsync.py DFlash 重叠测试 modified 3.48

关键符号

test_split_full_attention_applies_model_wrapper_once test_hybrid_wrappers_forward_in_graph_hook _make_hybrid_backend TestHybridNeedsCpuSeqLens._make

关键源码片段

test/registered/unit/model_executor/model_runner_components/test_attention_backend_setup.py test-coverage

测试 HybridAttnBackend 的构建流程(`_build_resolved_backend`),确保 wrapper 被正确应用。此文件是验证后端初始化逻辑的关键。

# 测试函数 : test_split_full_attention_applies_model_wrapper_once
# 模拟 model_runner 对象,用于测试 _build_resolved_backend 的包装逻辑。
runner = SimpleNamespace(
    server_args=SimpleNamespace(speculative_attention_mode="prefill"),
    model_config=SimpleNamespace(context_len=2048),
    kv_cache_dtype=None,
    token_to_kv_pool=object(),
    req_to_token_pool=object(),
    kv_index_translator=None, # 新增字段,满足 HybridAttnBackend 构造要求
    init_new_workspace=None,
)
test/registered/attention/test_trtllm_mha_graph_metadata.py test-coverage

测试 HybridAttnBackend 在 CUDA graph 场景下的 `init_forward_metadata_in_graph` 钩子转发行为,是性能关键路径的测试。

# 测试函数 : test_hybrid_wrappers_forward_in_graph_hook
# 模拟 model_runner 用于测试图钩子转发。
hybrid = HybridAttnBackend(
    SimpleNamespace(
        kv_cache_dtype=torch.bfloat16,
        token_to_kv_pool=None,
        req_to_token_pool=None,
        kv_index_translator=None, # 新增字段,确保构造函数不报错
        server_args=SimpleNamespace(speculative_attention_mode="decode"),
        model_config=SimpleNamespace(context_len=2048),
    ),
    prefill_backend=make_fake("prefill", calls),
    decode_backend=make_fake("decode", calls),
)
test/registered/unit/layers/attention/test_verify_mask.py test-coverage

测试 HybridAttnBackend 对验证掩码(VerifyMask)的委托逻辑,是投机解码(speculative decoding)验证路径的一部分。

# 辅助函数 : _make_hybrid_backend
# 构造用于测试的 HybridAttnBackend。
def _make_hybrid_backend(speculative_attention_mode, prefill_mask, decode_mask):
    model_runner = SimpleNamespace(
        kv_cache_dtype=None,
        token_to_kv_pool=object(),
        req_to_token_pool=object(),
        kv_index_translator=None, # 新增字段,适配接口
        server_args=SimpleNamespace(
            speculative_attention_mode=speculative_attention_mode
        ),
        model_config=SimpleNamespace(context_len=_MAX_CONTEXT_LEN),
    )
    with _published(speculative_attention_mode):
        return HybridAttnBackend(
            model_runner,
            prefill_backend=_FakeAttnBackend(prefill_mask),
            decode_backend=_FakeAttnBackend(decode_mask),
        )

评论区精华

CI 失败修复验证 测试

作者通过 `/rerun-test` 命令手动触发了受影响的 4 个测试用例的重新运行,并在评论中引用了失败的 CI 运行链接作为修复前的状态。

结论:修复有效,相关测试(在 ubuntu-latest, 1-gpu-5090 上)已通过。 · 已解决

风险与影响

风险极低。变更仅发生在测试代码中,且为向已有SimpleNamespace对象添加一个键值对。由于生产代码不变,测试fixture的修改不会引入回归。唯一风险是如果未来某个测试仍遗漏此字段,但当前已覆盖所有已知的HybridAttnBackend构建点。

直接影响:修复了因PR#37307引入的接口变更导致的4个单元测试失败。
间接影响:提升了HybridAttnBackend相关测试的健壮性和与生产接口的一致性。
无生产影响:所有改动仅限于测试代码,不改变任何生产逻辑或API。

测试适配 接口一致性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论