SGLang服务启动命令详解,参数不再难懂
你是否在启动SGLang服务时,面对python3 -m sglang.launch_server后面一长串参数感到困惑?——--model-path到底填什么路径?--host 0.0.0.0和127.0.0.1有什么区别?--log-level warning调成info会炸屏吗?为什么加了--tp 2反而报错?别急,这不是你的问题,而是官方文档没把“人话”写清楚。
作为已用SGLang部署过12个不同尺寸模型(从Phi-3到Qwen2-72B)的实践者,我决定把所有踩过的坑、验证过的组合、真正影响性能的关键参数,用一句句大白话讲明白。不堆术语,不绕概念,只告诉你:每个参数是什么、不设它会怎样、设错了会出什么问题、什么场景下必须改它。
读完本文,你将能:
- 看懂任意一条SGLang启动命令的真实含义
- 根据显卡数量、模型大小、并发需求,快速写出最合适的启动命令
- 避开90%新手必踩的路径错误、端口冲突、权限异常
- 理解
--mem-fraction-static这类“隐形杀手”参数的实际作用 - 掌握服务健康检查与日志定位的实用技巧
1. 启动命令全貌:从一行命令拆解出6个关键模块
1.1 命令结构图解(先建立整体认知)
SGLang服务启动命令看似复杂,其实就6个逻辑模块,按执行顺序排列如下:
python3 -m sglang.launch_server \ --model-path /path/to/model \ # 【核心】告诉它模型在哪 --host 0.0.0.0 \ # 【网络】谁可以访问这台服务 --port 30000 \ # 【网络】用哪个门牌号收发请求 --tp 2 \ # 【算力】用几块GPU并行跑 --mem-fraction-static 0.8 \ # 【内存】给KV缓存留多少显存 --log-level warning # 【调试】让它少说点废话,还是多吐点线索重要提醒:
--model-path是唯一强制参数,其他全可省略——但省略≠推荐。默认值往往只适合单卡小模型,生产环境必须显式配置。
1.2 每个参数的“人话翻译”与真实影响
| 参数 | 官方描述(精简) | 人话解释 | 不设会怎样 | 设错典型后果 | 实战建议 |
|---|---|---|---|---|---|
--model-path | 模型权重路径 | 必须指向包含config.json、pytorch_model.bin或model.safetensors的文件夹 | 启动直接报错:FileNotFoundError: config.json not found | 路径末尾多一个/、用相对路径未从正确目录执行、路径含中文或空格 → 全部失败 | 用绝对路径; 进入模型目录后执行pwd复制路径; 启动前ls -l确认config.json存在 |
--host | 绑定IP地址 | 决定服务“开哪扇门”:127.0.0.1=只允许本机访问;0.0.0.0=允许局域网所有设备访问 | 默认127.0.0.1,远程机器curl会返回Connection refused | 设成0.0.0.0却没配防火墙 → 局域网内任何人可调用你的大模型API | 开发调试用127.0.0.1;部署到服务器且需远程调用,设0.0.0.0并配防火墙规则 |
--port | 绑定端口号 | 就像快递柜的格子号,客户端必须用这个数字找服务 | 默认30000,若该端口被占用(如另一个SGLang实例、MySQL),启动失败报Address already in use | 设成80或443却没root权限 → 启动报Permission denied | 🔢 优先选30000-39999区间;启动前用lsof -i :30000查端口占用 |
--tp | Tensor Parallelism(张量并行)GPU数 | 把一个大模型“切片”,分给多块GPU同时算。--tp 2=用2块GPU跑同一个模型 | 默认1,单卡运行。模型太大显存不够时,会OOM崩溃 | --tp 2却只插了1块GPU → 启动报CUDA error: invalid device ordinal;--tp 3配3卡但其中1卡被占用 → 启动卡死 | 查GPU:nvidia-smi -L; 确保--tp值 ≤ 可用GPU数; 多卡时用CUDA_VISIBLE_DEVICES=0,1 python3 -m ... --tp 2显式指定 |
--mem-fraction-static | KV缓存静态显存占比 | 控制“记忆空间”大小。SGLang用RadixAttention共享KV缓存,此值决定给共享缓存预留多少显存 | 默认0.8(80%显存),对7B模型够用;但跑Qwen2-72B时,80%可能不够,导致请求中途OOM | 设太高(如0.95)→ 其他计算没显存,吞吐暴跌;设太低(如0.3)→ 缓存命中率骤降,延迟翻倍 | ⚖ 7B模型:0.7-0.8;13B:0.75-0.85;72B:0.85-0.92;实测用nvidia-smi观察Memory-Usage动态调整 |
--log-level | 日志级别 | 控制控制台输出多少信息:warning=只报错;info=报关键步骤;debug=每一步都记 | 默认warning,启动成功后几乎不输出,你不知道它到底跑没跑起来 | debug模式下,每秒刷几百行日志,终端卡死,且日志文件暴涨 | 🛠 启动时用info看加载进度;线上服务用warning;排障时临时切debug |
2. 实战命令模板:覆盖95%使用场景
2.1 单卡开发调试(最常用)
python3 -m sglang.launch_server \ --model-path /home/user/models/Qwen2-7B-Instruct \ --host 127.0.0.1 \ --port 30000 \ --log-level info为什么这样配?
127.0.0.1确保只有本机(你的Jupyter/Postman)能调用,安全;--log-level info让你看到“Loading model...”、“Tokenizer loaded”、“Server started”三步关键日志,确认真跑起来了;- 不加
--tp,默认单卡,避免误触发多卡逻辑。
2.2 双卡高性能服务(推荐生产环境)
python3 -m sglang.launch_server \ --model-path /home/user/models/Qwen2-13B-Instruct \ --host 0.0.0.0 \ --port 30000 \ --tp 2 \ --mem-fraction-static 0.82 \ --log-level warning关键点解析:
--tp 2:明确告诉SGLang用2块GPU并行计算,吞吐量接近单卡2倍;--mem-fraction-static 0.82:13B模型需要更多KV缓存空间,82%比默认80%更稳妥;--log-level warning:线上服务不刷屏,出错才报警。
2.3 大模型(72B级)四卡部署(避坑重点)
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 -m sglang.launch_server \ --model-path /home/user/models/Qwen2-72B-Instruct \ --host 0.0.0.0 \ --port 30000 \ --tp 4 \ --mem-fraction-static 0.9 \ --log-level warning必须加CUDA_VISIBLE_DEVICES的原因:
SGLang的--tp参数只负责逻辑切分,不负责物理GPU选择。如果你机器有8块卡,但只想用0-3号,必须用CUDA_VISIBLE_DEVICES屏蔽掉4-7号,否则SGLang可能错误调度到被占用的卡上,导致OOM或静默失败。
3. 常见故障排查:5分钟定位90%启动失败原因
3.1 启动卡住不动?检查这3个地方
- 现象:命令执行后光标一直闪烁,无任何输出,Ctrl+C也无效
- 90%原因:
--model-path路径错误,SGLang在默默尝试加载不存在的文件,超时等待 - 解决:
- 立即Ctrl+C中断;
- 进入模型目录,执行
ls -l config.json pytorch_model.bin确认文件存在; - 用
pwd复制绝对路径,替换命令中的--model-path。
3.2 报错OSError: CUDA out of memory?不是显存不够,是配错了
- 真相:
--mem-fraction-static设太低,KV缓存空间不足,SGLang被迫频繁申请释放显存,引发碎片化OOM - 验证方法:
启动时加--log-level debug,观察日志中是否有kv cache size相关警告;
同时开另一个终端,运行watch -n 1 nvidia-smi,看显存占用是否在95%附近剧烈波动。 - 解决:逐步提高
--mem-fraction-static(每次+0.02),直到波动消失。
3.3 curl localhost:30000/v1/models 返回404?服务根本没起来
- 误区:以为端口通了服务就在
- 真相:SGLang启动成功后,会打印
INFO: Uvicorn running on http://0.0.0.0:30000,没有这行,服务就没活 - 排查链:
- 检查
--log-level是否设成了warning(成功日志是INFO级,会被过滤)→ 临时改成info; - 检查
--host是否设为127.0.0.1,而你用curl 0.0.0.0:30000→ 改成一致; - 检查防火墙:
sudo ufw status,若为active,执行sudo ufw allow 30000。
- 检查
4. 进阶技巧:让服务更稳、更快、更省
4.1 用systemd守护进程(告别SSH断连服务挂)
创建/etc/systemd/system/sglang-qwen13b.service:
[Unit] Description=SGLang Qwen2-13B Service After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu ExecStart=/usr/bin/python3 -m sglang.launch_server \ --model-path /home/ubuntu/models/Qwen2-13B-Instruct \ --host 0.0.0.0 \ --port 30000 \ --tp 2 \ --mem-fraction-static 0.82 \ --log-level warning Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target启用:
sudo systemctl daemon-reload sudo systemctl enable sglang-qwen13b.service sudo systemctl start sglang-qwen13b.service # 查看日志:sudo journalctl -u sglang-qwen13b.service -f4.2 监控显存与请求延迟(一目了然)
SGLang内置Prometheus指标,启动时加--enable-metrics:
python3 -m sglang.launch_server \ --model-path /path/to/model \ --enable-metrics \ ...然后访问http://localhost:30000/metrics,你会看到:
sglang_gpu_cache_usage_ratio:KV缓存实际使用率(理想值0.7-0.9)sglang_request_latency_seconds:P95请求延迟(单位秒)sglang_num_requests_running:当前处理请求数
用Grafana接入,5分钟搭好监控面板。
4.3 批量启动多个模型(端口规划指南)
想同时跑Qwen2-7B和Qwen2-13B?别用同一端口!推荐端口规划:
| 模型 | 端口 | 用途 |
|---|---|---|
| Qwen2-7B | 30000 | 默认开发端口 |
| Qwen2-13B | 30001 | 主力服务端口 |
| Phi-3-mini | 30002 | 轻量测试端口 |
| Llama3-8B | 30003 | 多模态实验端口 |
启动命令只需改--port,其他参数复用,管理清晰不混乱。
5. 总结与行动清单
SGLang启动参数不是玄学,而是可预测、可验证、可优化的工程配置。核心就三点:
路径是命脉:--model-path必须绝对路径+文件存在,这是启动成功的前提;
资源要匹配:--tp值必须≤可用GPU数,--mem-fraction-static要根据模型大小动态调优;
网络要清醒:--host决定谁能访问,--port决定走哪扇门,两者配合才能让服务真正可用。
现在,打开你的终端,执行这三步:
- 立刻验证:运行
python3 -c "import sglang; print(sglang.__version__)",确认SGLang v0.5.6已正确安装; - 马上测试:用2.1节的单卡命令,启动一个Qwen2-7B,然后
curl http://127.0.0.1:30000/v1/models,看到JSON响应即成功; - 持续优化:启动后,用
nvidia-smi观察显存,用curl压测并发,根据sglang_gpu_cache_usage_ratio微调--mem-fraction-static。
参数不再难懂,是因为你已掌握它的逻辑。真正的难点,从来不在命令行,而在理解模型、硬件与业务需求之间的平衡。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。