Prhub

#34231 [CI] Keep the torch compilation cache instead of wiping it on install

原始 PR 作者 hnyls2002 合并时间 2026-08-10 16:21 文件变更 1 提交数 3 评论 1 代码增减 +4 / -14

执行摘要

CI 安装不再清空 Torch 编译缓存,消除并发竞态

PR body 指出,在将多个 GPU runner 打包到一台宿主机上的 runner pool 中,缓存目录是共享挂载,原先安装步骤中的清空操作会 unlink 并发任务正在编译的文件,导致 Inductor 报 OSError: source code not available -> ValueError: @jit functions should be defined in a Python file。同时说明 Inductor 和 Triton 缓存条目是按内容哈希寻址的,陈旧条目永远不会被复用,因此清空操作没有益处。

该 PR 是一个小而精准的基础设施修复,值得 CI 相关维护者关注。它体现了“缓存按内容哈希寻址则无需手动清理”这一设计原则,并利用注释记录决策原因,对后续维护者友好。建议合并,并可在未来的 CI 磁盘管理策略中再统一考虑缓存清理策略。

讨论亮点

PR 没有收到人工 review 评论,唯一的 review 来自 copilot-pull-request-reviewer[bot],自动摘要了变更内容:停止删除共享 Torch 编译缓存,防止并发 GPU 任务之间的竞态,并说明缓存保留的原因。未出现任何反对意见或未解决的疑虑。

实现拆解

变更集中在单个 CI 脚本内,可按以下步骤拆解:

  1. 定位清理逻辑scripts/ci/cuda/ci_install_dependency.sh 中的 clean_site_packages 函数原先通过一段内联 Python 脚本尝试清空多个缓存位置(TORCHINDUCTOR_CACHE_DIR/tmp/torchinductor_<user>~/.cache/sglang/inductor)。
  2. 删除清空代码:移除该 Python 脚本,不再对 Torch 编译缓存目录执行 shutil.rmtree,保留函数内对损坏 dist-info 目录的清理逻辑(按 PEP 376 处理缺失 METADATA 的目录)。
  3. 补充设计注释:在原本清理位置添加注释,明确说明缓存不清空的理由:缓存按内容哈希寻址、旧条目不会被复用,以及共享挂载下并发编译文件可能被误删的风险。
  4. 无测试配套:这是纯 CI 基础设施脚本变更,不涉及源码逻辑或测试文件,未增加新测试。
文件 模块 状态 重要度
scripts/ci/cuda/ci_install_dependency.sh CI 脚本 modified 4.33

关键符号

clean_site_packages

关键源码片段

scripts/ci/cuda/ci_install_dependency.sh infrastructure

唯一变更文件,移除了 CI 安装时清空 Torch 编译缓存的逻辑,并补充了设计注释。

clean_site_packages() {
    # torch 编译缓存故意不清空:
    # - 条目按内容哈希寻址,过期条目不会被复用,清空无收益;
    # - 多 runner 共享宿主机时,该目录是共享挂载,
    # 清空会 unlink 并发任务正在编译的文件,
    # 引发 `torch._inductor.exc.InductorError: SubprocException`。
    # 仍然清理损坏的 dist-info 目录(PEP 376 缺失 METADATA)。
    SITE_PACKAGES=$(python3 -c "import site; print(site.getsitepackages()[0])")
    # ... 其余清理逻辑保持不变
}

评论区精华

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

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

风险与影响

主要风险在于移除缓存清空逻辑后,CI 工作节点上的 Torch 编译缓存目录可能随时间累积,占用磁盘空间。但 CI 环境通常是短暂运行的容器或被定期清理,且缓存条目按内容哈希寻址,旧条目不会被复用,因此影响有限。另一个潜在风险是,如果未来缓存目录结构发生变化,旧残留可能导致混淆,但概率极低。整体风险很低。

影响范围为所有使用 scripts/ci/cuda/ci_install_dependency.sh 的 CUDA CI 任务,尤其是多个 GPU runner 共享宿主机(如自托管 runner pool)的场景。变更消除了并发编译时缓存文件被误删导致的随机失败,提升了 CI 的稳定性和可重复性。对用户和运行时功能无直接影响,属于纯内部基础设施改进。

共享缓存并发 磁盘占用增长 CI 脚本无测试

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论