20分钟读懂 SGLang:从克隆仓库到跑起推理服务的完整指南
【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang
SGLang 是一个高性能的大语言模型与多模态模型推理服务框架(Serving Framework),一句话定位:把模型部署成低延迟、高吞吐的在线服务,从单卡到千卡集群都能跑。这篇文章带你跳过泛泛而谈的架构介绍,直接从仓库本身读起——它在哪、怎么起、怎么配。
它解决什么问题:不只是"能跑",而是"跑得快"
大模型推理服务领域并不缺框架,SGLang 的差异化在于把"性能工程"做进了调度器层面:
- RadixAttention 前缀缓存:把公共前缀(比如系统提示词、多轮对话历史)的 KV 缓存以基数树形式复用,重复请求可以直接"捡现成",官方早期工作曾借此把推理速度提到 5 倍量级;
- 零开销 CPU 调度器 + 连续批处理:请求来了就进批,不等空闲,调度本身不吃 GPU 时间片;
- 预填充-解码分离(PD 分离)与投机解码:把"读长 prompt"和"逐 token 生成"两类负载拆开调度,长上下文和短对话各走各的优化路径;
- 工程化配套:FP8/FP4/INT4/AWQ/GPTQ 量化、张量/流水线/专家/数据并行、结构化输出(受约束解码)、多 LoRA 同服。
它面向的用户主要是:要给 C 端流量扛推理服务的团队、做多模态或 MoE 大模型部署的工程师,以及做 RL 后训练时需要高吞吐 rollout 数据生成的训练团队——SGLang 已经是多个主流后训练框架的默认 rollout 后端。硬件覆盖 NVIDIA/AMD GPU、Intel Xeon CPU、Google TPU、Ascend NPU,具体支持清单以仓库最新说明为准。
核心目录地图:一张表看清仓库怎么组织
这是典型的"Python 主体 + Rust 网关 + 独立测试区"布局,看源码前先把这张表存下来:
| 路径 | 一句话职责 | 什么时候看它 |
|---|---|---|
python/sglang/srt/ | 运行时核心(Serving Runtime):入口、调度器、内存管理、模型实现、自定义算子调度 | 读主流程必到 |
python/sglang/srt/entrypoints/ | HTTP / gRPC / OpenAI 兼容 / Ollama 等协议入口 | 排查 API 行为 |
python/sglang/srt/manager/、mem_cache/ | 请求调度与 KV 缓存(RadixAttention 在这里) | 深挖性能优化 |
python/sglang/kernels/ | 手写的 CUDA/ROCm/Triton 高性能算子 | 关心底层加速 |
python/sglang/cli/ | sglang serve等命令行入口实现 | 看命令怎么被解析 |
sgl-model-gateway/ | Rust 写的模型网关:路由、负载均衡、多 worker 管理 | 做集群级部署 |
benchmark/ | 压测与算子调优脚本(gsm8k、mmlu、all_reduce 等) | 自建性能基线 |
test/registered/ | 可注册的 CI 测试套件,按 attention、moe、quant 等分目录 | 改代码后跑回归 |
docs/docs/ | 官方文档源文件:快速上手、高级特性、各硬件平台 | 查参数、查特性 |
examples/ | 前端语言、多模态、监控等可运行示例 | 找现成参考 |
一个容易踩的直觉误区:sgl-model-gateway/和experimental/sgl-router/是 Rust 代码,不属于 Python 主包。它们解决的是"多副本之间请求往哪发"的问题,和 Python 侧"单副本内怎么快"是两个层次。
从入口读起:一条命令背后的主流程
跑服务只有两条等价路径,推荐前者:
# 方式一:CLI 入口(推荐) sglang serve --model-path qwen/qwen2.5-0.5b-instruct --port 30000 # 方式二:模块入口(仍受支持) python3 -m sglang.launch_server --model-path <model> --port 30000sglang serve背后是python/sglang/cli/main.py注册的控制台命令;launch_server.py则是模块方式的起点。想读主流程,打开 launch_server.py,核心逻辑短到可以一屏看完:
def run_server(server_args): ... else: # 默认模式:HTTP 服务 from sglang.srt.entrypoints.http_server import launch_server launch_server(server_args)读代码的推荐顺序就藏在这条链里:cli/serve.py(参数怎么收)→srt/server_args.py(一个庞大的参数 dataclass,所有可调项集中定义于此)→srt/entrypoints/http_server.py(服务怎么起)→srt/manager/(调度与批处理循环)。沿着server_args这个对象往下追,是理解整个运行时最快的路径,比逐目录扫读效率高得多。
服务端起来后,直接对/v1/chat/completions发 OpenAI 兼容请求即可,终端出现The server is fired up and ready to roll!表示就绪。
配置与定制:命令行参数就是配置文件
SGLang 没有一套传统的config.json要维护,它的"配置文件"就是命令行参数 + 环境变量两条腿:
- 命令行参数:全部收敛在
srt/server_args.py中声明,高频项如--model-path(模型路径,HF 仓库名或本地目录均可)、--tensor-parallel-size/--pipeline-parallel-size/--data-parallel-size(三种并行度)、--port、--reasoning-parser(推理模型解析器)、--tool-call-parser(函数调用解析)。参数清单太长,完整列表见官方文档的 Server Arguments 页(源文件位于docs/docs/advanced_features/server_arguments.mdx)。 - 环境变量:统一以
SGLANG_前缀命名,用于性能调优类开关,例如SGLANG_USE_MODELSCOPE切换模型来源。全量清单在docs/docs/references/environment_variables.mdx中维护,改老代码里的SGL_前缀变量时要注意官方已将其标记为废弃。 - Docker 部署:仓库
docker/下按硬件拆了 NVIDIA、ROCm、ARM64、NPU 等多个 Dockerfile,容器方式起服务时把上述参数原样塞进启动命令即可。
典型的一条"生产向"启动命令长这样:
python3 -m sglang.launch_server \ --model-path deepseek-ai/DeepSeek-V3 \ --tp 4 --port 30000下一步:三条路径任选
- 要性能调优:从
docs/docs/advanced_features/hyperparameter_tuning.mdx入手,对照benchmark/里现成脚本自建基线; - 要动手贡献:读
docs/docs/developer_guide/contribution_guide.mdx,测试用例在test/registered/按模块分目录,改完对应目录的测试必须能过; - 源码克隆安装:
git clone https://gitcode.com/GitHub_Trending/sg/sglang cd sglang && pip install -e "python"把srt/server_args.py这一个文件读透,基本就拿到了 SGLang 的"总开关面板"——框架再复杂,入口始终就这几处。
【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考