☰
从0到跑通:SGLang部署与高并发调优的完整路径
2026/10/17 10:58:39 网站建设 项目流程

从0到跑通:SGLang部署与高并发调优的完整路径

【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang

凌晨高峰,线上LLM服务的TTFT(首token延迟)从200ms涨到8s,新请求开始排队甚至超时。你排查后发现瓶颈不在模型本身,而在推理服务框架的调度、显存分配和并发配置上。SGLang就是干这个的:面向LLM和多模态模型的高性能serving框架,RadixAttention前缀缓存、连续批处理、PD分离这些能力开箱即用。这篇文章覆盖从零部署到显存/延迟调优,适用于NVIDIA GPU为主的单机到多机场景。

五种部署路径怎么选

路径适用场景复杂度关键依赖推荐程度
pip/uv安装开发验证、单机调试低CUDA环境起步首选
Docker容器生产单机、环境一致性低Docker + GPU驱动生产首选
源码编译定制kernel、性能极限优化中CUDA/ROCm工具链有定制需求再上
Kubernetes多副本、自动扩缩容高K8s集群多副本生产
CPU镜像无GPU环境、纯CPU推理中Intel Xeon特殊场景

起步阶段直接走pip或Docker,源码编译和K8s只有在遇到明确瓶颈或规模要求时再考虑。

最小可行路径:pip安装到服务可用

三步跑通,每步都有明确目的。

# 安装:uv比pip快,[all]带上推理所需依赖 pip install --upgrade pip pip install uv uv pip install "sglang[all]>=0.5.3rc0"
# 起服务:默认端口30000,/health端点用于确认就绪 python -m sglang.launch_server \ --model-path meta-llama/Llama-3.1-8B-Instruct \ --host 0.0.0.0 \ --port 30000
# 压测:100条随机请求验证吞吐和延迟 python -m sglang.bench_serving \ --dataset-name random \ --random-input-len 1024 \ --random-output-len 1024 \ --num-prompts 100 \ --request-rate 10

如果安装时卡在CUDA编译环节,设置export CUDA_HOME=/usr/local/cuda-<你的版本>再重试,这是编译kernel时找不到nvcc的典型原因。安装细节见 安装文档。

分场景进阶

Docker生产部署

仓库自带的compose文件已经配好健康检查、GPU预留、--ipc=host和内存锁定,直接基于它改模型路径即可,不要自己从零写:

# docker/compose.yaml 关键配置 services: sglang: image: lmsysorg/sglang:latest restart: always ipc: host ulimits: memlock: -1 healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:30000/health || exit 1"] deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]

memlock: -1是NCCL多卡通信的硬性要求,漏掉它多卡会报IB/NCCL错误。

单卡GPU延迟优化

# 单卡调优:CUDA图+FP8 KV缓存降TTFT python -m sglang.launch_server \ --model-path meta-llama/Llama-3.1-8B-Instruct \ --attention-backend flashinfer \ --enable-cuda-graph \ --kv-cache-dtype fp8_e5m2

FP8 KV缓存把KV显存占用砍半,换来的容量提升通常比精度损失更划算;fp8_e5m2和fp8_e4m3都支持,数值范围敏感的场景用e4m3。

多卡张量并行

# 2卡TP:模型切到2个GPU,attention默认后端即可 python -m sglang.launch_server \ --model-path meta-llama/Llama-3.1-8B-Instruct \ --tp 2 \ --host 0.0.0.0 --port 30000

CPU服务器

用仓库里的专用Dockerfile构建,别用通用镜像硬跑:

# 构建Xeon专用镜像并启动 git clone https://gitcode.com/GitHub_Trending/sg/sglang cd sglang/docker docker build -t sglang-cpu:main -f xeon.Dockerfile .

CPU场景延迟天然比GPU高一个量级,别按GPU指标设预期。

接入Prometheus监控

examples/monitoring下有现成的compose配置,Prometheus直接抓30000端口的metrics,cd examples/monitoring && docker-compose up -d即可,配置见 examples/monitoring/prometheus.yaml。

关键参数速查

参数作用常见取值踩坑提示
--tp张量并行卡数1/2/4/8必须整除模型层切分粒度,显存够就别开
--attention-backendattention kernel选择flashinfer/ 默认不同后端算力和显存表现差异明显
--mem-fraction-static静态显存占比0.7~0.85启动OOM先降它,别急着加卡
--chunked-prefill-sizeprefill分块token数4096~8192长输入TTFT高就调小
--kv-cache-dtypeKV缓存精度fp8_e5m2/fp8_e4m3/bf16非GPU80及以上硬件部分选项不可用
--max-running-requests最大并发batch按显存调显存余量少时适当下调
--schedule-policy请求调度策略fcfs等长短请求混合场景再考虑改
--stream-interval流式输出间隔1调大减少flush次数,客户端体感变差

排障与决策树

  • 如果启动时显存分配失败:先确认是模型加载OOM还是KV池分配OOM,前者降--mem-fraction-static或开--tp,后者开--kv-cache-dtype fp8_e5m2。
  • 如果TTFT随输入变长急剧上升且decode正常:是prefill阻塞了decode,把--chunked-prefill-size从默认调小到4096,让prefill分批进batch。
  • 如果decode吞吐偏低且TP已开:先确认--attention-backend是否为flashinfer,再确认--enable-cuda-graph生效;两者都缺时收益最明显。
  • 如果压测显示P99延迟高但P50正常:高概率是长尾大batch,降--max-running-requests让batch更小更稳。
  • 如果多卡报NCCL/IB相关错误:检查容器是否有ipc: host、memlock未限制,这是compose里已经配好的两项,手搓启动命令最容易漏。
  • 如果FP8 KV缓存报错:先查GPU是否Hopper/Blackwell架构,老架构退回bf16。

边界与延伸

这篇文章覆盖的是单机到多卡的部署和调参,PD分离、HiCache多级缓存、专家并行这些分布式进阶特性没展开,规模上去之后再补。延伸阅读:服务器参数全表、量化说明。先把最小路径的三步跑通,再用bench_serving拿到自己机器的基线数字,然后才回来对着速查表逐个调参数——没有基线的调参都是盲调。

【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询