SGLang 0.4 启动时同时传 --tp 2 和 --dp 2,进程直接退出,报 AssertionError: tp_size * dp_size should not exceed the number of GPUs,只留一个参数就能起。

排查方向其实有限,先把可能性排一排。tp 与 dp 的进程数相乘超过实际卡数;两个参数的组合语义与直觉不同;多机部署还要配 node-rank 与 dist-init-addr;启动脚本里的环境变量覆盖了命令行参数。

动手时先确认机器上可见的卡数

nvidia-smi --query-gpu=index,name --format=csv

只开张量并行启动一次

python -m sglang.launch_server --model-path Qwen/Qwen2.5-14B-Instruct --tp 2 --port 30000

接着按卡数重新计算 tp 与 dp 的组合

python -c "print({'gpus':4,'tp':2,'dp':2})"

等前面都确认过,再用 health 接口确认服务真的起来了

curl http://localhost:30000/health

同一份数据我导出了两份,一份留底,一份拿来试。

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

别只看报错消失,验证要多做一步。服务正常监听,health 返回 200,日志里没有断言失败,推理请求能拿到结果。

这里还有个坑。tp 与 dp 是相乘关系,参数看着独立实际共享同一批卡,启动前先把卡数与组合算一遍。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189