执行摘要
- 一句话:更新多KV连接器边缘情况测试,适配PrefillStats严格统计变更。
- 推荐动作:该PR是必要的测试维护,值得快速浏览以理解PrefillStats统计变更对测试的影响。关注点在于KV连接器场景下令牌来源统计的归属逻辑变化,这对于调试相关指标异常有参考价值。
功能与动机
PR body明确指出,PR #37460引入的PrefillStats带来了严格的非重叠令牌来源统计不变式(local_compute + local_cache_hit + external_kv_transfer = num_prompt_tokens)。在此新不变式下,PD解聚场景中的最后一个令牌重计算不再单独归属于local_compute,因为PrefillStats.set()在_update_waiting_for_remote_kv()的-1调整之前被调用。因此需要更新相关测试的断言以反映这一变化,防止测试因统计归属变更而失败。
实现拆解
- 更新测试文档字符串:修改
test_cold_decode_no_cache_hit_metrics函数的文档字符串,明确说明local_compute==0,以反映新的统计归属。
- 调整冷解码测试断言:将
test_cold_decode_no_cache_hit_metrics中local_compute的断言从==1改为==0,因为最后一个令牌重计算不再计入本地计算。
- 调整全缓存命中测试断言:在
test_full_decode_gpu_cache_hit_metrics中,将local_cache_hit的断言从cached - 1改为cached,将local_compute的断言从1改为0,以匹配新的统计逻辑。
- 调整部分缓存命中测试断言:在
test_partial_decode_gpu_cache_hit_metrics中,同样将local_cache_hit从cached - 1改为cached,local_compute从1改为0,确保所有相关测试用例的一致性。
- 测试配套验证:PR body提到已通过
run_multi_connector_edge_case_test.sh脚本验证测试通过,确保变更不会破坏现有集成测试流程。
关键文件:
tests/v1/kv_connector/nixl_integration/test_multi_connector_edge_cases.py(模块 KV连接器;类别 test;类型 test-coverage;符号 test_cold_decode_no_cache_hit_metrics, test_full_decode_gpu_cache_hit_metrics, test_partial_decode_gpu_cache_hit_metrics): 这是唯一被修改的文件,包含了多KV连接器边缘情况的集成测试,变更直接反映了PrefillStats统计不变式对测试断言的影响。
关键符号:test_cold_decode_no_cache_hit_metrics, test_full_decode_gpu_cache_hit_metrics, test_partial_decode_gpu_cache_hit_metrics
关键源码片段
tests/v1/kv_connector/nixl_integration/test_multi_connector_edge_cases.py
这是唯一被修改的文件,包含了多KV连接器边缘情况的集成测试,变更直接反映了PrefillStats统计不变式对测试断言的影响。
def test_cold_decode_no_cache_hit_metrics():
"""Cold decode: external_kv_transfer==P, local_cache_hit==0, local_compute==0."""
# ... 省略初始化代码 ...
d = _metrics_delta(m0, m1)
print(f"COLD DECODE: {P} prompt tokens, metrics delta: {d}")
assert d["external_kv_transfer"] == P, f"expected external_kv_transfer={P}, got {d['external_kv_transfer']}"
assert d["local_compute"] == 0, f"expected local_compute=0, got {d['local_compute']}" # 从1改为0,因为最后一个令牌重计算不再计入本地计算
assert d["local_cache_hit"] == 0, f"expected local_cache_hit=0, got {d['local_cache_hit']}"
# ... 省略剩余断言 ...
def test_full_decode_gpu_cache_hit_metrics():
"""Prime decode, resend via proxy: local_cache_hit==cached blocks."""
# ... 省略初始化代码 ...
cached = (P // BLOCK_SIZE) * BLOCK_SIZE
expected_nixl = P - cached
print(f"FULL CACHE HIT: {P} tokens, cached={cached}, nixl={expected_nixl}")
assert d["local_cache_hit"] == cached, f"expected local_cache_hit={cached}, got {d['local_cache_hit']}" # 从cached-1改为cached,反映完整缓存命中
assert d["external_kv_transfer"] == expected_nixl, f"expected external_kv_transfer={expected_nixl}, got {d['external_kv_transfer']}"
assert d["local_compute"] == 0, f"expected local_compute=0, got {d['local_compute']}" # 从1改为0,理由同上
# ... 省略剩余断言 ...
评论区精华
review中未出现实质性技术讨论。gemini-code-assist[bot]的评论仅概述了变更内容(更新测试以反映指标报告变化),并指出没有反馈可提供。markmc直接批准了PR,表明变更被认可为必要的测试维护。
- 测试断言更新概述 (other): 变更被认可,没有提出异议。
风险与影响
- 风险:1. 回归风险低:变更仅涉及测试断言调整,不修改生产代码逻辑,因此不会引入功能回归。
2. 测试覆盖风险:如果新的统计不变式本身存在逻辑错误,测试调整可能掩盖真实问题,但这是PR #37460引入的核心变更,本PR只是被动适配。
3. 集成测试稳定性:测试断言依赖于外部服务(如NIXL传输)的可用性,但这是原有测试的固有风险,本PR未加剧。
- 影响:1. 对用户无直接影响:这是纯测试变更,不影响运行时行为或API。
2. 对系统影响:确保测试套件与核心统计模块(PrefillStats)保持一致,避免因统计归属变更导致的测试误报,提升测试可靠性。
3. 对团队影响:工程师需要了解PrefillStats的严格统计不变式,以便在涉及KV连接器指标时正确编写或更新测试。
- 风险标记:测试覆盖调整
关联脉络
- PR #37460 未知(根据PR body提及推断): PR body明确引用PR #37460引入了PrefillStats及其严格统计不变式,这是本PR测试变更的直接原因。
- PR #37206 [KV Offload] Unified memory layout for offloading workers: 同属KV连接器相关PR,涉及KV卸载和内存布局,可能共享类似的测试场景或指标统计逻辑。
参与讨论