Prhub

#21331 [CI] Rewrite `killall_sglang` as Python with CI/local dual mode

原始 PR 作者 alisonshao 合并时间 2026-03-25 14:54 文件变更 5 提交数 14 评论 5 代码增减 +275 / -2

执行摘要

重写 killall_sglang 为 Python 脚本,实现 GPU 范围限制的 CI 清理,避免跨容器进程误杀。

PR body 中指出,在共享主机容器中(使用 --pid=host),pgrep 会看到所有容器的进程,导致 killall_sglang.sh 杀死其他容器的 sglang 进程,产生 spurious exit code -9 失败。因此,需要将 kill 操作限制在当前容器的 GPU 上,仅影响 CUDA_VISIBLE_DEVICES 分配的 GPU,以避免跨容器干扰。

该 PR 值得精读,特别是其 GPU 隔离机制和双模式设计(CI 与本地),对优化多 GPU CI 环境有参考价值。关注关键函数如 _get_target_gpus 和 _kill_pids 的实现细节,以及内存检查逻辑,有助于理解如何处理跨容器资源冲突。

讨论亮点

review 评论为空,表示无讨论或直接合并,因此无争议点或决策结论。从提交历史看,变更经历了多次演进(14 次提交),包括合并、简化代码、移除冗余路径等,但缺乏公开讨论。

实现拆解

实现分为几个关键部分:

  1. 新增 Python 脚本 python/sglang/cli/killall.py,包含核心逻辑:通过 nvidia-smi 查询 GPU 进程,根据 CUDA_VISIBLE_DEVICES 环境变量(仅支持数字索引)获取目标 GPU,杀死相关进程,并在清理后检查 GPU 内存使用率,若超过 10% 则退出码为 1。
  2. 修改 CI 配置文件 .github/workflows/pr-test-rust.yml,添加环境变量 SGLANG_IS_IN_CI=true,以启用 CI 模式。
  3. 更新 CI 安装脚本 scripts/ci/cuda/ci_install_dependency.sh,将调用从 bash scripts/killall_sglang.sh all 改为 python3 python/sglang/cli/killall.py,并检查退出码。
  4. 在 pyproject.toml 中添加 killall_sglang 命令行入口点,便于直接调用。
  5. 修改原 shell 脚本 scripts/killall_sglang.sh,添加弃用注释,保留其默认/rocm/all/gpus 模式供本地使用。
文件 模块 状态 重要度
python/sglang/cli/killall.py cli added 9.0
.github/workflows/pr-test-rust.yml CI workflows modified 7.0
scripts/ci/cuda/ci_install_dependency.sh CI scripts modified 6.0
scripts/killall_sglang.sh scripts modified 4.0
python/pyproject.toml package configuration modified 3.0

关键符号

_run_smi _get_pid_cmdline _kill_pids _get_target_gpus _get_gpu_pids main

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

评论区精华

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

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

风险与影响

技术风险包括:

  • 依赖于外部工具 nvidia-smi:在非 NVIDIA 环境或 nvidia-smi 不可用时,脚本会失败(例如在 AMD 或 CPU 环境中)。
  • CUDA_VISIBLE_DEVICES 支持有限:仅处理数字索引(如 '0,1'),不支持 UUID 格式(如 'GPU-xxx'),可能在某些配置下无效。
  • 内存检查阈值:10% 的内存使用率阈值可能导致误报(例如正常残留内存),触发 CI 提前退出,影响测试连续性。
  • 环境变量 SGLANG_IS_IN_CI 设置:若未正确设置,可能导致 CI 模式不生效或行为不一致。
  • 兼容性问题:原 shell 脚本标记为弃用,未来迁移时需处理其多种模式(如 rocm)的替代方案。

影响范围:

  • 对 CI 系统:直接提高测试稳定性和隔离性,减少因跨容器进程误杀导致的失败,优化 CI 资源使用。影响程度为中度,主要影响共享主机环境的 CI 运行。
  • 对用户:本地用户仍可使用原 shell 脚本,影响较小;但未来迁移可能需要更新使用习惯。
  • 对团队:改进了 CI 流程,减少维护成本,但增加了对 Python 脚本的依赖和维护。
依赖外部工具 nvidia-smi 仅支持数字 CUDA_VISIBLE_DEVICES 内存检查可能误报

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论