Prhub

#36281 [Unified Cache]: add glm5.2 per commit ci

原始 PR 作者 hzh0425 合并时间 2026-08-26 10:04 文件变更 5 提交数 2 评论 4 代码增减 +207 / -263

执行摘要

GLM5.2 缓存精度测试前移至每提交 CI,抽取双遍精度 Mixin

PR body 只有模板,未给出明确动机描述,但从变更内容可推断:UnifiedRadixTree 与 HiCache 属于相对活跃且易回归的缓存路径,GLM-5.2 的精度保障此前只在 nightly 阶段运行,回归发现周期过长。本次将其提升为 per-commit CI(stage="extra-b"),并结合共享 Mixin 降低多模型测试的维护成本,让精度回归在每次提交时即被发现。

值得快速浏览,重点学习两点:一是如何通过 register_cuda_ci(stage="extra-b") 将模型级精度测试提升到 per-commit 阶段;二是把跨模型复用的测试逻辑抽到 python/sglang/test/kits/ 的共享 Mixin 组织方式。对于需要新增 unified cache 相关精度测试的工程师有直接参考价值;不关心测试基建的读者可以跳过。

讨论亮点

该 PR 没有人类 review 评论,评论区只有作者本人发起的 CI 重跑指令与 bot 的响应。可见的运维动作包括:首次对 test_unified_radix_cache_kl_glm52.py 发起 /rerun-test,在 8-gpu-h200 上重跑通过;随后对 radix_cache/unified_radix_tree/ 目录发起 /rerun-group,4-gpu-h100 上的 4 个测试全部通过。没有出现设计争议或未解决的疑虑。

实现拆解

  1. 抽取共享 Mixin:在 python/sglang/test/kits/unified_radix_cache_kit.py 中新增 AccuracyTwoPassMixin,包含 _run_gsm8k_flush_cache_two_pass 三个辅助方法,以及 test_gsm8k_two_passestest_l3_prefetch_full_prefix_hit_after_flush 两个测试方法;配置文件里引入了 requests 依赖。
  2. 删除旧 nightly 文件:整个删除 test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_nightly.py(258 行),其中原 TestGLM5HiRadixCacheL3Accuracy 测试类与 Mixin 一并移除,避免两处定义漂移。
  3. 新增 GLM-5.2 per-commit 测试:新增 test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_glm52.py,通过 register_cuda_ci(est_time=900, stage="extra-b", runner_config="8-gpu-h200") 注册到每次提交的 extra-b 阶段;测试类 TestGLM5UnifiedRadixCacheL3Accuracy 继承 AccuracyTwoPassMixin,在 setUpClass 中用 zai-org/GLM-5.2-FP8 启动 TP=8 服务,开启 HiCache L3(file 后端)与 EAGLE 投机解码,并设置 SGLANG_ENABLE_UNIFIED_RADIX_TREE=1
  4. 修正 Mamba/DSV4 导入test_unified_radix_cache_kl_mamba.pytest_unified_radix_cache_kl_dsv4.py 从直接从 nightly 文件导入 AccuracyTwoPassMixin,改为从 sglang.test.kits.unified_radix_cache_kit 导入,同时保留 UnifiedRadixTreeTestMixin 的原有引用。
  5. 无独立配置/部署配套:CI 注册完全通过测试文件内的 register_cuda_ci 声明完成,没有新增 workflow 或配置文件。
文件 模块 状态 重要度
python/sglang/test/kits/unified_radix_cache_kit.py 测试套件 modified 7.25
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_glm52.py GLM5 测试 added 6.88
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_nightly.py 缓存测试 removed 7.48
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_mamba.py Mamba 测试 modified 4.16
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_dsv4.py DSV4 测试 modified 4.11

关键符号

AccuracyTwoPassMixin _run_gsm8k _flush_cache _two_pass test_gsm8k_two_passes test_l3_prefetch_full_prefix_hit_after_flush TestGLM5UnifiedRadixCacheL3Accuracy.setUpClass TestGLM5UnifiedRadixCacheL3Accuracy.tearDownClass

关键源码片段

test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_glm52.py test-coverage

新增的 GLM-5.2 per-commit 测试入口,将精度验证注册到 extra-b 阶段,并配置 HiCache L3 与 EAGLE 投机解码。

class TestGLM5UnifiedRadixCacheL3Accuracy(AccuracyTwoPassMixin, CustomTestCase):
    """GLM-5.2-FP8 + HiCache L3(file 后端)配合 UnifiedRadixTree 的精度测试。"""
​
    @classmethod
    def setUpClass(cls):
        cls.model = GLM5_MODEL
        cls.base_url = DEFAULT_URL_FOR_TEST
        cls.hicache_dir = tempfile.mkdtemp(prefix="hicache_l3_")
        cls.process = popen_launch_server(
            cls.model,
            cls.base_url,
            timeout=GLM5_LAUNCH_TIMEOUT,
            other_args=[
                "--trust-remote-code",
                "--tp-size", "8",
                "--page-size", "64",
                "--mem-fraction-static", "0.8",
                "--model-loader-extra-config",
                '{"enable_multithread_load": true, "num_threads": 64}',
                "--enable-hierarchical-cache",
                "--hicache-ratio", "2",
                "--hicache-write-policy", "write_through",
                "--hicache-storage-prefetch-policy", "wait_complete",
                "--hicache-io-backend", "kernel",
                "--hicache-mem-layout", "page_first",
                "--hicache-storage-backend", "file",
                "--speculative-algorithm", "EAGLE",
                "--speculative-num-steps", "3",
                "--speculative-eagle-topk", "1",
                "--speculative-num-draft-tokens", "4",
            ],
            env={
                # L1 缓存目录指向测试专属临时目录,便于测试结束清理。
                "SGLANG_HICACHE_FILE_BACKEND_STORAGE_DIR": cls.hicache_dir,
                # 显式开启 unified radix tree 路径,覆盖本次 CI 的目标组合。
                "SGLANG_ENABLE_UNIFIED_RADIX_TREE": "1",
            },
        )
​
    @classmethod
    def tearDownClass(cls):
        # 结束服务进程并清掉 HiCache 临时文件,避免污染后续测试。
        kill_process_tree(cls.process.pid)
        if os.path.isdir(cls.hicache_dir):
            shutil.rmtree(cls.hicache_dir, ignore_errors=True)

评论区精华

GLM-5.2 测试重跑 other

作者在 CI 中针对新增的 GLM-5.2 测试发起 /rerun-test,随后又对 radix_cache/unified_radix_tree/ 目录发起 /rerun-group;bot 分别报告 8-gpu-h200 的单个测试与 4-gpu-h100 的 4 个测试全部通过。

结论:重跑全部通过,未触发代码修改,属于 CI 运维操作而非设计争议。 · 已解决

风险与影响

  1. 删除文件可能遗留导入引用test_unified_radix_cache_kl_nightly.py 被整体删除,虽已同步修改 Mamba 与 DSV4 两个测试文件的导入,但若仓库内还有其他测试或脚本仍从该文件导入 AccuracyTwoPassMixin,将触发 ImportError
  2. CI 资源成本显著上升:新测试注册在 extra-b 阶段,每次提交都会在 8 卡 H200 上运行约 900 秒,长时间占用高性能 CI 资源,可能延长主流水线排队时间。
  3. 外部依赖与稳定性风险:测试依赖 zai-org/GLM-5.2-FP8 外部模型下载,配合 EAGLE 投机解码与 HiCache L3 文件后端;模型仓库网络问题、磁盘空间或环境差异都可能导致非功能性误标红。
  4. AMD ROCm 槽位失败:PR 的 CI 状态显示 AMD ROCm 7.2 槽位为红色,虽然本次改动未触及 AMD 路径,但需要确认该失败是否与本 PR 引入的测试注册方式有关。

对开发者而言,每次提交都会额外触发 GLM-5.2 在 UnifiedRadixCache + HiCache L3 路径上的精度验证,回归发现周期从 nightly 缩短到 commit 级别;对系统资源而言,8 卡 H200 的 15 分钟测试成为常驻成本;对团队而言,AccuracyTwoPassMixin 进入共享测试套件后,后续新增模型只需继承并配置启动参数即可复用双遍精度与 L3 预取校验逻辑,降低了测试编写成本。整体影响面集中在 CI 与测试组织,不影响运行时行为。

删除文件可能遗留导入引用 每提交 8 卡 H200 高成本测试 依赖外部模型下载与 EAGLE 配置 AMD ROCm 槽位 CI 失败

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论