Prhub

#27721 Add TP server GPU process regression test

原始 PR 作者 merrymercy 合并时间 2026-06-10 07:25 文件变更 1 提交数 1 评论 2 代码增减 +137 / -0

执行摘要

新增 TP 服务进程 GPU 上下文回归测试

确保 TP 模式下服务器父进程不会在 fork worker 之前意外初始化 CUDA 上下文,从而浪费 GPU 显存或导致后续 fork 异常。PR body 提到通过人为注入 torch.ones(10).cuda()ServerArgs.__post_init__ 可验证测试能有效捕获此类问题。

建议精读此测试的实现思路,特别是 _wait_for_server_gpu_processes 中的稳定等待策略以及如何利用进程树过滤 GPU 进程;该模式可用于其他与 GPU 资源分配相关的回归测试。

讨论亮点

该 PR 无 review 讨论,仅包含自动 CI 评论和作者触发的 /tag-and-rerun-ci 命令。

实现拆解

  1. CI 注册与依赖:使用 register_cuda_ci 注册测试,指定 stage="base-b"runner_config="2-gpu-large"est_time=120,确保该测试在 2 GPU 大节点上运行。
  2. 测试夹具setUpClass 启动一个 TP=2 的 SGLang 服务器,禁用 CUDA 图和分段 CUDA 图以减少干扰;tearDownClass 使用 kill_process_tree 清理进程树。
  3. 核心测试方法test_tp_server_has_only_worker_gpu_processes 首先检查 nvidia-smi 可用性,然后调用 _wait_for_server_gpu_processes 等待直至出现至少 tp_size 个属于服务器进程树的 GPU 进程并稳定 3 秒,最后断言父进程不在 GPU 进程列表中且 GPU 进程数量恰好等于 tp_size
  4. 辅助方法_server_process_tree_pids 通过 psutil 递归获取进程树 PID 集合;_query_gpu_processes 执行 nvidia-smi --query-compute-apps 解析 CSV 输出;_format_rows 用于格式化错误消息。
  5. 测试配置:服务器使用 DEFAULT_SMALL_MODEL_NAME_FOR_TESTmem-fraction-static=0.70 及其他禁用加速的选项,以保持轻量。
文件 模块 状态 重要度
test/registered/core/test_no_extra_forked_cuda_context.py 回归测试 added 7.5

关键符号

setUpClass tearDownClass test_tp_server_has_only_worker_gpu_processes _wait_for_server_gpu_processes _server_process_tree_pids _query_gpu_processes _format_rows

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

评论区精华

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

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

风险与影响

风险极低。该 PR 仅新增测试文件,不修改任何生产代码。测试需要 2 块 GPU 和 nvidia-smi 工具,所注册的 CI 阶段也明确要求 2 卡大型节点。若 CI 环境缺失 nvidia-smi 或 GPU,测试会正确 skip。潜在风险是测试运行时长时间占用两卡资源,但 est_time=120 已在 CI 调度中考虑。

对用户无直接影响。对 CI 系统,将新增一个 base-b 阶段的回归测试,为 TP 服务进程的 GPU 上下文管理提供基线保障。测试命名和注册方式可被后续类似回归测试复用。

新增回归测试 无生产代码变更 依赖 nvidia-smi CI 消耗 2 卡资源

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论