执行摘要
本PR通过增强killall.py脚本的诊断能力,添加PID命名空间检查和ps auxf输出,解决了CI中因容器共享GPU导致进程清理失败的问题。变更针对CI环境调试,提升问题定位效率,风险包括Linux依赖和错误处理改进。
功能与动机
动机源于CI中反复出现的GPU内存清理失败问题:当nvidia-smi报告的PID无法被杀死时,脚本无法识别进程是否属于其他容器。PR body指出:"Helps diagnose the recurring CI issue where GPU memory stays dirty but the reported PID cannot be killed",通过在kill失败时输出命名空间信息和进程列表,帮助诊断容器间进程归属。
实现拆解
主要修改文件为python/sglang/cli/killall.py,实现拆解如下:
- 新增函数:
_check_pid_namespace:检查PID是否在同一命名空间,通过读取/proc/*/ns/pid实现。
_log_ps_diagnostic:运行ps auxf并过滤输出SGLang相关进程。
_find_sglang_pids_by_name:扫描/proc目录匹配进程命令,捕获nvidia-smi不可见的进程。
- 修改函数:
_kill_pids集成诊断逻辑,在kill失败时调用新函数,并添加重试循环和日志缓冲。
- 辅助改进:引入
_LOG_LINES缓冲区、_log和_flush_box函数格式化输出,使用正则表达式_SGLANG_PROCESS_PATTERNS匹配进程。
- commits演进:从初始添加功能到重构、改善错误处理和添加nvidia-smi版本日志,显示多次迭代优化。
评论区精华
review中gemini-code-assist[bot]提出了关键改进建议:
"To make this function more robust, it's better to catch the general OSError here instead of only PermissionError."
"Enhance the except block to log the stderr from the failed command, which would help with debugging."
讨论聚焦于代码健壮性,建议已被考虑但未明确采纳状态,PR整体加强了错误处理和诊断输出。
风险与影响
风险:
- 兼容性风险:依赖Linux
/proc文件系统,在非Linux环境可能失败。
- 错误处理风险:review指出的OSError捕获和ps命令错误处理不完善,可能导致脚本崩溃或误导日志。
- 性能风险:新增进程扫描和日志输出在进程多时可能引入开销。
影响:
- 系统影响:提升CI清理失败诊断能力,减少故障时间,增强CI稳定性。
- 团队影响:为开发者和运维提供更佳调试工具,促进CI维护效率,但对终端用户透明。
关联脉络
与近期CI相关PR关联紧密:
- PR #21455(简化CI检查):同属CI基础设施优化,共享减少CI失败的目标。
- PR #21423(修复AMD CI容器问题):涉及容器环境修复,与本PR的容器诊断主题相关。
- PR #21385(收窄CI触发):优化CI流程,与本PR的调试增强相辅相成。
这些PR共同反映了仓库在CI稳定性和工具改进上的持续演进。
参与讨论