Prhub

#26811 Add the KV-canary mock-model end-to-end test harness

原始 PR 作者 fzyzcjy 合并时间 2026-05-31 09:56 文件变更 7 提交数 1 评论 1 代码增减 +401 / -0

执行摘要

添加 KV-canary mock 模型端到端测试框架

需要一套统一的端到端测试框架来验证 KV-canary 各功能组件(如扰动注入、token 校验、EAGLE 集成等)的正确性。PR body 指出:‘Add the mock-model end-to-end test harness that the KV-canary self-tests build on: a tiny mock model plus the shared perturb-e2e base and utilities, and the generic tp/pp/pd e2e smoke tests.’ 目的是为后续特性测试提供可复用的基础。

值得精读,尤其是 utils.py 中的 run_mock_model_bench_servingperturb_e2e_base.py 中的 MockModelPerturbE2EBase,它们定义了 KV-canary 测试的标准模式。对于要编写新 KV-canary 测试的开发者是必读材料。

讨论亮点

该 PR 无实质性 review 讨论,只有 gemini-code-assist 的配额警告。PR 由作者自行合并。

实现拆解

  1. python/sglang/test/mock_model/utils.py 中定义了 mock 模型启动参数生成函数 mock_model_server_args、环境变量 mock_model_server_env 以及通用基准测试运行器 run_mock_model_bench_serving,它封装了服务器启动、benchmark 执行和结果验证。
  2. python/sglang/test/mock_model/perturb_e2e_base.py 中创建了 MockModelPerturbE2EBase 基类,继承自 CapturedServerE2EBase,为扰动测试提供服务器启动和并行请求发送能力。
  3. python/sglang/test/server_fixtures/disaggregation_fixture.py 中扩展了 PDDisaggregationServerBase,新增了 capture_per_side_logs 选项,允许捕获 prefill/decode 端的 stdout/stderr,以便在 PD 场景下检测 canary 违规。
  4. test/registered/mock_model/ 下添加了三个冒烟测试文件:test_e2e_tp.pytest_e2e_pp.pytest_e2e_pd.py,分别对 tensor parallel、pipeline parallel 和 PD 分离并行进行基本的 canary 无违规验证。
  5. 添加了 python/sglang/test/mock_model/__init__.py 使 mock_model 成为包。
文件 模块 状态 重要度
python/sglang/test/mock_model/utils.py 测试工具 added 7.75
python/sglang/test/mock_model/perturb_e2e_base.py 扰动测试 added 6.95
test/registered/mock_model/test_e2e_pd.py 测试用例 added 7.47
test/registered/mock_model/test_e2e_pp.py 测试用例 added 5.97
test/registered/mock_model/test_e2e_tp.py 测试用例 added 5.97
python/sglang/test/server_fixtures/disaggregation_fixture.py 测试固件 modified 5.31
python/sglang/test/mock_model/__init__.py 包初始化 added 3.32

关键符号

mock_model_server_args mock_model_server_env run_mock_model_bench_serving MockModelPerturbE2EBase.setUpClass MockModelPerturbE2EBase.send_parallel_requests _send_parallel_requests _make_input_ids TestPdTransferCanaryClean.test_pd_transfer_canary_clean TestE2ETensorParallel.test_tp_no_canary_violation TestE2EPipelineParallel.test_pp_no_canary_violation

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

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

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

风险与影响

主要风险是测试框架不够健壮可能造成假阴性或假阳性,尤其是 assert_no_canary_violation 依赖日志扫描,若日志格式变化可能导致误判。此外,修改 disaggregation_fixture.py 增加了 capture_per_side_logs 的类变量,若其他测试未正确重置可能引入副作用。

对用户无直接影响,仅影响内部测试。对团队的影响是标准化了 KV-canary 测试的编写方式,后续所有 KV-canary 特性测试都应继承此框架。

日志依赖断言 测试基础设施变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论