Prhub

#31042 [CI] Fix SGLANG_JIT_KERNEL_RUN_FULL_TESTS never activating the nightly full jit-kernel sweep

原始 PR 作者 BBuf 合并时间 2026-07-14 17:32 文件变更 3 提交数 3 评论 2 代码增减 +7 / -3

执行摘要

修复夜间 JIT kernel 全量测试从未生效

PR body 中指出:nightly-test-nvidia.yml 设置了 SGLANG_JIT_KERNEL_RUN_FULL_TESTS: '1',但 should_run_full_tests() 只将其与 'true' 比较,导致 '1' 被判定为 False,因此夜间全量测试从未实际激活。作者强调 'it just never fired'。

可快速合并并跟进夜间 CI 执行情况。值得关注的是该 PR 体现了 CI 配置与代码行为的不一致性问题,建议未来通过环境变量类型系统强制统一布尔值的解析语义。

讨论亮点

无 review 讨论线程。PR body 中作者注明该修改安全且将合并后监视夜间 CI。

实现拆解

  1. 注册 EnvBool 配置项:在 python/sglang/srt/environ.py# SGLang CI 区域新增 SGLANG_JIT_KERNEL_RUN_FULL_TESTS = EnvBool(False),使环境变量支持 1/true/yes 等常见真值表示,并自动处理非法值。
  2. 替换字符串比较逻辑:删除 python/sglang/jit_kernel/utils.py 中已放弃的 _FULL_TEST_ENV_VAR 常量和基于 os.getenv 的显式小写转换比较,改为通过 envs.SGLANG_JIT_KERNEL_RUN_FULL_TESTS.get() 获取该布尔值。
  3. 调整 CI 超时配置:在 .github/workflows/nightly-test-nvidia.yml 中为 8 GPU 的 'JIT kernel full unit tests' 作业显式指定 --timeout-per-file 3600,并附注释说明全量网格参数化扩展后执行时间增长约为 6 倍,原有默认 1200 秒不足以覆盖。
文件 模块 状态 重要度
python/sglang/jit_kernel/utils.py JIT Kernel modified 5.63
python/sglang/srt/environ.py 环境配置 modified 4.89
.github/workflows/nightly-test-nvidia.yml CI 配置 modified 2.96

关键符号

should_run_full_tests get_ci_test_range

关键源码片段

python/sglang/jit_kernel/utils.py dependency-wiring

修复了根本 bug:将原始的字符串比较逻辑替换为通过 `envs` 读取 `EnvBool` 的方式,确保 `should_run_full_tests()` 能正确识别 `'1'` 等真值。

# python/sglang/jit_kernel/utils.py
# 将原始字符串比较替换为通过 EnvBool 类型读取,
# 现在可以正确识别值为 '1'、'true'、'yes' 等常见真值。
from sglang.srt.environ import envsdef should_run_full_tests() -> bool:
    # 原先的逻辑是:os.getenv(_FULL_TEST_ENV_VAR, "false").lower() == "true"
    # 但 CI 里设置的是 SGLANG_JIT_KERNEL_RUN_FULL_TESTS="1",比较 "1" == "true" 永远为 False。
    # 通过 EnvBool.get() 统一解析,自动处理各种真值格式。
    return envs.SGLANG_JIT_KERNEL_RUN_FULL_TESTS.get()def get_ci_test_range(full_range: List[Any], ci_range: List[Any]) -> List[Any]:
    if should_run_full_tests():
        return full_range # 夜间全量扩展:执行完整的参数网格
    return ci_range if is_in_ci() else full_range
python/sglang/srt/environ.py core-logic

在 Envs 类中注册了新的 EnvBool 配置项,使环境变量解析行为统一,是修复的核心基础设施变更。

# python/sglang/srt/environ.py
# 在 Envs 类的 '# SGLang CI' 区域新增一行,
# EnvBool 的构造函数接收默认值并内部实现 get() 方法,
# 兼容 '1'/'true'/'yes' 等常见真值表示。
class Envs:
    ...
    # SGLang CI
    SGLANG_IS_IN_CI = EnvBool(False)
    SGLANG_IS_IN_CI_AMD = EnvBool(False)
    SGLANG_CUDA_COREDUMP = EnvBool(False)
    SGLANG_CUDA_COREDUMP_DIR = EnvStr(None)
    SGLANG_TEST_MAX_RETRY = EnvInt(None)
    # 新增:展开 jit_kernel 测试网格到完整参数范围(夜间使用)
    SGLANG_JIT_KERNEL_RUN_FULL_TESTS = EnvBool(False)
    ...

评论区精华

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

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

风险与影响

  • 回归风险:低。仅修改了环境变量解析路径和 CI 超时配置,不涉及任何运行时推理逻辑或核心 kernel 行为。
  • 性能风险:中等。夜间全量测试将首次真正执行,可能导致 CI 运行时间显著增加,但已在 PR 中通过增加超时参数和 body 中的测量数据做了预期。
    • EnvBool 的解析因某些意外配置格式引发异常,可能导致相关 job 失败;但 EnvBool 已在多个其他配置项中广泛使用,风险极低。
  • CI 用户:夜间测试将按预期输出全量 grids,有助于更早发现自定义 all-reduce 等 kernel 在更多参数配置下的回归问题。
  • 系统影响:仅限定于夜间 CI 流水线,不影响运行时稳定性或用户 API。
  • 团队影响:小规模修改,无跨部门协调需求。
CI 运行时间增加

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论