SGLang 部署完整指南:一条命令拉起服务,从安装到高并发调优
【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang
这是一份 SGLang 部署实操教程:用一条命令拉起模型推理服务,讲清 pip、Docker 等五种安装路线的取舍,覆盖 GPU 张量并行、CPU 专用镜像、内存与量化调优、Prometheus 监控接入和生产排障,目标是让服务在你的硬件上既跑得快又稳得住。
🚀 快速启动 SGLang 服务器
最短路径只有两步:装包,然后启动。在 Python 3.10+ 环境下执行:
uv pip install --prerelease=allow sglang python -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct --host 0.0.0.0 --port 30000装包时保留--prerelease=allow:SGLang 的部分依赖在 PyPI 上只发布预发布版,缺了这个参数会悄悄装到旧版本。服务起来后,30000 端口就提供 OpenAI 兼容 API。
安装路线选择:按你的场景对号入座
五种安装路线能力相同,差别在适用场景和维护成本。拿不准就从 pip 开始:
| 你的场景 | 推荐路线 | 上手成本 | 关键点 |
|---|---|---|---|
| 单机快速验证、日常开发 | pip / uv 安装 | 低 | 两条命令装完即用,详见安装文档 |
| 要改内核代码、追最新 main 分支 | 源码编译 | 中 | clone 仓库(gitcode 镜像地址https://gitcode.com/GitHub_Trending/sg/sglang)后执行pip install -e "python" |
| 团队协作、生产部署 | Docker 部署 | 低 | 官方镜像锁定环境,可复现、易迁移 |
| 多节点大模型、高可用集群 | Kubernetes | 高 | 仓库自带k8s-sglang-service.yaml(单节点)与k8s-sglang-distributed-sts.yaml(多节点),直接kubectl apply |
| 多云弹性伸缩、按量买卡 | SkyPilot | 中 | 一份 YAML 描述模型与资源,sky launch一条命令部署到 12+ 云平台并返回 API 端点 |
SGLang Docker 部署:生产环境的默认选择
容器化最大的价值是"这台机器能跑,哪台都能跑"。拉取官方镜像lmsysorg/sglang(生产建议固定到不可变版本标签而非latest,资源紧张时换体积更小约 40% 的-runtime变体),核心参数含义:
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<你的token>" --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server --model-path <模型名> --host 0.0.0.0 --port 30000--gpus all:把宿主机 GPU 透传进容器,没有它容器里"看不见卡";--shm-size 32g --ipc=host:多进程张量并行靠共享内存通信,默认 64MB 的/dev/shm会直接卡死,必须显式放大;-v ~/.cache/huggingface:挂载模型缓存目录,避免每次启动重新下载几十 GB 权重;HF_TOKEN:私有模型或高并发下载需要鉴权。
镜像构建与编排文件都在 docker/ 目录,compose.yaml 可作为服务化起点。
SGLang GPU 配置:FlashInfer 后端与张量并行
默认情况下无需额外配置:SGLang 自带 FlashInfer 注意力内核(sm75 及以上显卡均可用),它是目前默认且经过充分优化的后端,显式写--attention-backend flashinfer只是把默认值摆上台面。
真正要动手的是并行拆分。单卡放不下模型时,用--tp N(tensor parallelism,张量并行)把每层权重按列/行切开分到 N 张卡上协同计算:
python -m sglang.launch_server --model-path <大模型> --tp 4为什么这么切:权重切开后单卡显存压力除以 N,但代价是每层前向都要一次卡间通信,所以--tp取值要受限于 NVLink/PCIe 带宽,跨机再叠加--nnodes做流水线扩展。MoE 大模型还可组合数据并行注意力与专家并行,请求按 batch 分派到不同注意力单元、再由专家子组承接,示意如下:
更多后端选项见硬件平台文档。
SGLang CPU 部署:Intel Xeon 专用镜像
CPU 推理只建议走专用路线:SGLang 针对第 4 代及更新 Xeon 的 AMX 指令做了优化,对应镜像标签以xeon结尾(或从docker/xeon.Dockerfile自行构建)。启动与 GPU 容器有两处关键差异:
docker run -it --privileged --ipc=host --network=host \ -v ~/.cache/huggingface:/root/.cache/huggingface \ -p 30000:30000 -e "HF_TOKEN=<你的token>" \ lmsysorg/sglang:v0.5.13-xeon /bin/bash--privileged:容器需要访问 AMX 等指令集特性,普通权限下性能回落到通用路径;--network=host:CPU 多进程通信对延迟敏感,host 网络省去 NAT 开销;- 镜像差异:CPU 镜像不带 CUDA 栈,替换为 oneMKL 等 CPU 推理依赖,因此不能拿 GPU 镜像"将就"跑 CPU。
Llama、Qwen、DeepSeek 系列在 CPU 上均有优化支持,细节见CPU 服务器文档。
⚙️ 高并发调优:内存不足、延迟高时拧哪个参数
把常见性能问题翻译成旋钮,对照着调:
| 现象 | 旋钮 | 预期效果 |
|---|---|---|
| 启动即 OOM,显存不够 | --mem-fraction-static 0.7 | 下调静态预留占比(默认更激进),给权重与 KV cache 留足余量;反之显存富余可调高,换取更大的 KV cache |
| 权重和 KV cache 吃满显存,并发上不去 | --quantization fp8+--kv-cache-dtype fp8_e5m2 | 把权重和缓存都压到 8 位,如同给仓库做压缩,显存占用近乎减半,可用批大小翻倍 |
| 峰值并发压垮服务 | --max-running-requests N | 限定同时在跑的请求数上限,超出部分排队而非挤爆显存 |
| 长 prompt 造成首 token 延迟尖刺 | --chunked-prefill-size 4096 | 把长 prefill 切成固定长度的小块与 decode 交错执行,削平延迟毛刺 |
| decode 吞吐偏低、CPU 成为瓶颈 | --enable-cuda-graph --enable-torch-compile | CUDA 图把 kernel 发射序列录制成"录像"回放,torch.compile 做算子融合,两者都砍掉每步的启动开销 |
完整参数说明见服务器参数参考,量化细节见量化文档。
盯住服务:Prometheus 接入与三个核心指标
启动时加--enable-metrics,服务即在/metrics暴露 Prometheus 格式指标。抓取配置只需指向服务端口(完整模板在 examples/monitoring/,docker-compose up -d一键起 Prometheus + Grafana):
scrape_configs: - job_name: sglang static_configs: - targets: ['127.0.0.1:30000']看板可以画很多,但最值得盯的只有三个:
sglang:token_usage——KV cache 占用比例。持续贴近 1 意味着新请求只能排队或被抢占,是扩容或量化信号;sglang:cache_hit_rate——前缀缓存命中率。多轮对话、共享 system prompt 的场景下它决定了大量 prefill 是否被跳过,偏低时先查请求格式是否稳定复用前缀;sglang:time_to_first_token_seconds——首 token 延迟分布。它直接对应用户体感,结合队列长度看即可区分"慢在排队"还是"慢在计算"。
部署排障速查
| 报错现象 | 可能原因 | 处理动作 |
|---|---|---|
OSError: CUDA_HOME environment variable is not set | 构建工具找不到 CUDA 根目录 | export CUDA_HOME=/usr/local/cuda-<你的版本>,或先装好 FlashInfer 再装 SGLang |
| 启动阶段 GPU OOM | 权重 + KV cache 超出显存 | 降--mem-fraction-static,或上 FP8 量化(见上节旋钮表) |
| 老显卡上 FlashInfer 相关崩溃 | 计算能力低于 sm75,后端不支持 | 改用--attention-backend triton --sampling-backend pytorch |
| 容器内多进程通信异常、死锁 | 共享内存不足 | --shm-size 32g并加--ipc=host |
| 容器起不来、设备找不到 | 未透传 GPU 或宿主缺 nvidia-container-toolkit | 加--gpus all,在宿主机安装并验证 toolkit |
| 请求能进但首 token 明显变慢 | 前缀缓存失效或长 prompt 未分块 | 查cache_hit_rate,确认--chunked-prefill-size生效 |
上生产前的检查清单
- 镜像/版本固定到不可变标签(如
v0.5.x),不用浮动的latest - 配置健康检查与自动重启(K8s liveness 探针或 systemd restart)
- Prometheus 抓取已生效,
token_usage、cache_hit_rate、TTFT 三条曲线进看板 - 用
python -m sglang.bench_serving --backend sglang --dataset-name random --random-input-len 1024 --random-output-len 1024 --num-prompts 100 --request-rate 10压测基线留档 - HF Token 与模型缓存持久化,避免重启后重新拉权重
- 压测峰值下验证排队与拒绝策略符合预期(并发上限、超时配置)
小结
SGLang 部署的核心是:先选对安装路线,再按硬件特性配置并行与内存,最后用指标闭环验证。建议继续阅读服务器参数参考、生产指标说明与硬件平台文档。
【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考