Prhub

#40597 [Bugfix][CI] Fix `v1/kv_connector/unit/test_nixl_connector_hma.py::test_fewer_blocks_with_hma`

原始 PR 作者 NickLucche 合并时间 2026-04-22 21:21 文件变更 1 提交数 1 评论 0 代码增减 +7 / -2

执行摘要

修复 NixlConnector HMA 测试因 GPU 内存残留导致的 flaky 失败。

PR body 指出,该测试在 CI 中持续失败,错误信息显示 GPU 空闲内存不足(4.51/22.05 GiB)低于期望的 GPU 内存利用率(0.47,10.36 GiB)。作者认为之前的修复(PR #39938)未解决核心问题,推测是由于 VLLM_ENABLE_V1_MULTIPROCESSING=0 环境变量导致内存清理不彻底,残留内存被其他测试占用。因此,本 PR 尝试手动刷新内存,并调整配置以避免内存不足。

该 PR 是典型的测试稳定性修复,无需深入精读。值得关注的点:

  1. 对于 flaky 测试,作者优先采用显式内存清理而非复杂重构,体现了务实策略。
  2. 配置参数调整(如 gpu_memory_utilizationmax_num_batched_tokens)展示了测试环境优化的常见手法。
  3. 可作为处理类似内存残留问题的参考案例。
讨论亮点

Review 中讨论较少:

  • gemini-code-assist[bot] 简要总结了变更内容,指出调整了配置参数并添加了内存清理,无进一步反馈。
  • markmc 直接批准了 PR,未提出异议或深入讨论。
  • 无争议点或未解决疑虑,变更被视为直接修复。

实现拆解

  1. 导入依赖调整:在 tests/v1/kv_connector/unit/test_nixl_connector_hma.py 中新增 import gcimport torch,为后续内存清理提供工具。
  2. 配置参数优化:在 test_fewer_blocks_with_hma 函数中,将 gpu_memory_utilization 从 0.47 降低至 0.3,减少内存需求;新增 max_num_seqs: 1 限制并发序列数;将 max_num_batched_tokens 从 1024 提升至 2048,避免因 token 数限制影响测试逻辑。
  3. 显式内存清理:在 run_test_and_cleanup 函数中,于 LLM 初始化前添加 gc.collect()torch.accelerator.empty_cache(),强制清理 Python 垃圾回收和 GPU 缓存,减少残留内存影响。
文件 模块 状态 重要度
tests/v1/kv_connector/unit/test_nixl_connector_hma.py KV 连接器 modified 4.41

关键符号

test_fewer_blocks_with_hma

关键源码片段

tests/v1/kv_connector/unit/test_nixl_connector_hma.py test-coverage

唯一变更文件,包含测试逻辑和配置调整,直接解决 flaky 失败问题。

def test_fewer_blocks_with_hma(monkeypatch, model_name, sw_size):
    """Test that a prefill instance returns fewer "remote blocks" for the SWA groups
    when sequence exceeds the sliding window.
    """
    kv_transfer_config = KVTransferConfig(
        kv_connector="NixlConnector",
        kv_role="kv_both",
    )
    block_size = 16
    llm_kwargs = {
        "model": model_name,
        "enforce_eager": True,
        "gpu_memory_utilization": 0.3, # 从 0.47 降低至 0.3,减少内存需求
        "kv_transfer_config": kv_transfer_config,
        "max_model_len": 2048,
        "max_num_seqs": 1, # 新增参数,限制并发序列数
        "disable_hybrid_kv_cache_manager": False,
        "max_num_batched_tokens": 2048, # 从 1024 提升至 2048,避免 token 数限制
        "enable_prefix_caching": False,
        "block_size": block_size,
    }
​
    monkeypatch.setenv("VLLM_ENABLE_V1_MULTIPROCESSING", "0")
​
    def run_test_and_cleanup():
        gc.collect() # 强制 Python 垃圾回收,清理残留对象
        torch.accelerator.empty_cache() # 清空 GPU 缓存,释放显存
        llm = LLM(**llm_kwargs)
        try:
            run_hma_test(llm) # 执行实际测试逻辑
        finally:
            llm.llm_engine.engine_core.shutdown()
​
    run_test_and_cleanup()

评论区精华

测试配置与内存清理调整 测试

gemini-code-assist[bot] 总结了变更内容,指出调整了 LLM 配置参数并添加了显式内存清理。

结论:变更被接受,无进一步讨论。 · 已解决

风险与影响

低风险

  • 变更仅影响测试文件,不涉及生产代码逻辑,无回归风险。
  • 内存清理操作(gc.collect()torch.accelerator.empty_cache())是标准做法,不会引入副作用。
  • 配置参数调整(如降低 gpu_memory_utilization)可能使测试覆盖场景略有变化,但仍在合理范围内,不影响测试目的。
  • 潜在风险:如果内存清理不足,测试可能仍会间歇性失败,但作者已预留后续使用 clean_gpu_memory_between_tests 的备选方案。

影响范围有限

  • 对用户:无直接影响,纯测试修复。
  • 对系统:提升 CI 稳定性,减少 flaky 测试导致的构建失败。
  • 对团队:减少维护负担,确保 kv-connector 模块测试可靠性。
  • 影响程度:低,仅针对特定测试用例。
测试环境依赖 内存清理不足

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论