SGLang:被低估的推理黑马

SGLang(Structured Generation Language)在 2026 年从"学术项目"蜕变为"生产级推理引擎"。由 LMSYS 团队(ChatBot Arena 的创建者)开发,SGLang 的核心创新是 RadixAttention——一种基于基数树的 KV Cache 复用技术,在多轮对话和复杂 Agent 场景中实现了惊人的性能提升。

核心技术创新

1. RadixAttention

RadixAttention 是 SGLang 的标志性技术。它将 KV Cache 组织为基数树结构,实现前缀复用:

传统方案:每个请求独立维护 KV Cache
┌──────┐ ┌──────┐ ┌──────┐
│Req 1 │ │Req 2 │ │Req 3 │
│KV    │ │KV    │ │KV    │
│Cache │ │Cache │ │Cache │
└──────┘ └──────┘ └──────┘
浪费:相同前缀重复计算

RadixAttention:共享前缀的 KV Cache
         ┌─ "用户: 你好" (共享)
         │   ├─ "助手: 你好!有什么可以帮您?" (Req 1)
         │   └─ "助手: 您好!请问需要什么帮助?" (Req 2)
         └─ "用户: 写代码" (共享)
             └─ "助手: 好的,请告诉我..." (Req 3)
import sglang as sgl

# RadixAttention 自动复用前缀
@sgl.function
def multi_turn_chat(s, question):
    s += "以下是一个专业对话:\n"
    s += "用户: " + question + "\n"
    s += "助手: " + sgl.gen("answer", max_tokens=256)

# 多轮对话中,前缀自动复用
# 第一轮
state1 = multi_turn_chat.run(question="什么是 RAG?")
# 第二轮(复用第一轮的前缀)
state2 = multi_turn_chat.run(question="RAG 和微调有什么区别?")
# 第三轮(复用前两轮的前缀)
state3 = multi_turn_chat.run(question="如何结合使用?")

# KV Cache 复用率随轮次增加而提高
# 实测:5 轮对话后,KV Cache 复用率达 85%+

2. 结构化输出

SGLang 原生支持 JSON Schema 约束生成:

import sglang as sgl
from pydantic import BaseModel
from typing import Literal

class Person(BaseModel):
    name: str
    age: int
    gender: Literal["male", "female", "other"]
    skills: list[str]
    email: str

@sgl.function
def extract_person(s, text: str):
    s += f"从以下文本中提取人物信息:\n{text}\n"
    s += "以 JSON 格式输出:\n"
    s += sgl.gen(
        "person",
        max_tokens=256,
        regex=Person.model_json_schema()  # 正则约束
    )

# 生成结果保证是合法 JSON
result = extract_person.run(text="张三,男,28岁,擅长Python和JavaScript,邮箱 zhang@example.com")
person = Person.model_validate_json(result["person"])
print(person)  # Person(name="张三", age=28, ...)

3. 前端 DSL

@sgl.function
def research_agent(s, topic: str):
    # 第一步:生成搜索查询
    s += "请为以下主题生成 3 个搜索查询:\n"
    s += f"主题: {topic}\n"
    s += "查询:\n"
    for i in range(3):
        s += f"{i+1}. " + sgl.gen(f"query_{i}", max_tokens=50, stop="\n") + "\n"
    
    # 第二步:评估查询质量
    s += "\n评估这些查询的质量(1-10分):\n"
    s += "综合评分: " + sgl.gen("score", max_tokens=5, stop="\n")
    
    # 第三步:根据评分决定是否优化
    score = int(s["score"])
    if score < 7:
        s += "\n查询质量较低,正在优化...\n"
        s += "优化后的查询: " + sgl.gen("optimized_query", max_tokens=100)
    
    # 第四步:生成最终回答
    s += "\n基于以上分析,回答用户问题:\n"
    s += sgl.gen("final_answer", max_tokens=512)

# 执行
result = research_agent.run(topic="AGI 安全")

部署指南

安装

pip install sglang[all]

# 或从源码安装
git clone https://github.com/sgl-project/sglang.git
cd sglang
pip install -e ".[all]"

启动服务

# 单 GPU
python -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-32B-Instruct \
  --port 30000 \
  --tp 1 \
  --mem-fraction-static 0.88

# 多 GPU 张量并行
python -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-72B-Instruct \
  --port 30000 \
  --tp 2 \
  --dp 1 \
  --mem-fraction-static 0.90 \
  --enable-flashinfer \
  --enable-radix-cache \
  --enable-overlap-schedule \
  --chunked-prefill-size 8192

# 离散推理(Prefill/Decode 分离)
# Prefill 节点
python -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-72B-Instruct \
  --disaggregation-mode prefill \
  --disaggregation-ib-device mlx5_0 \
  --port 30000

# Decode 节点
python -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-72B-Instruct \
  --disaggregation-mode decode \
  --disaggregation-ib-device mlx5_0 \
  --port 30001

API 调用

import openai

client = openai.OpenAI(base_url="http://localhost:30000/v1", api_key="sglang")

# 普通对话
response = client.chat.completions.create(
    model="default",
    messages=[{"role": "user", "content": "Hello!"}],
    stream=True
)

# 结构化输出(SGLang 独有)
response = client.chat.completions.create(
    model="default",
    messages=[{"role": "user", "content": "提取:张三28岁男"}],
    extra_body={
        "regex": r'\{"name": "[^"]+", "age": \d+, "gender": "(male|female|other)"\}'
    }
)

性能基准

KV Cache 复用效果

场景无 RadixAttention有 RadixAttention提升
单轮对话4,200 tok/s4,200 tok/s0%
3 轮对话3,800 tok/s6,500 tok/s+71%
5 轮对话3,200 tok/s7,800 tok/s+144%
10 轮对话2,500 tok/s9,200 tok/s+268%
Agent (20步)1,800 tok/s7,500 tok/s+317%

与其他引擎对比(Qwen2.5-32B, 2×A100)

指标SGLangvLLMTGI
简单对话吞吐4,8004,2003,800
多轮对话吞吐8,5004,0003,600
Agent 场景吞吐7,5003,8003,200
结构化输出速度4,2002,8002,500
首 Token 延迟0.35s0.5s0.35s
内存效率90%92%90%

关键发现:在多轮对话和 Agent 场景中,SGLang 的 RadixAttention 带来了 2-3x 的性能优势。

结构化输出对比

方法速度正确率灵活性
SGLang Regex4,200 tok/s100%
vLLM + Outlines2,800 tok/s100%
TGI + Grammar2,500 tok/s100%
无约束 + 重试4,200 tok/s~75%最高

生产部署

Docker 部署

# Dockerfile
FROM sglang/sglang:v0.3.5

COPY . /app
WORKDIR /app

EXPOSE 30000

CMD ["python", "-m", "sglang.launch_server", \
     "--model-path", "/models/Qwen2.5-32B", \
     "--port", "30000", \
     "--tp", "2", \
     "--enable-radix-cache", \
     "--enable-flashinfer"]
# Docker 运行
docker run --gpus all -p 30000:30000 \
  -v /data/models:/models \
  sglang/sglang:v0.3.5 \
  --model-path /models/Qwen2.5-32B-Instruct \
  --tp 2 \
  --enable-radix-cache \
  --enable-flashinfer \
  --mem-fraction-static 0.90

Kubernetes 部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sglang-qwen
spec:
  replicas: 2
  template:
    spec:
      containers:
      - name: sglang
        image: sglang/sglang:v0.3.5
        args:
          - --model-path=Qwen/Qwen2.5-32B-Instruct
          - --port=30000
          - --tp=2
          - --enable-radix-cache
          - --enable-flashinfer
          - --mem-fraction-static=0.90
          - --max-running-requests=256
        resources:
          limits:
            nvidia.com/gpu: 2
            memory: 128Gi
        ports:
          - containerPort: 30000
        readinessProbe:
          httpGet:
            path: /health
            port: 30000
          initialDelaySeconds: 90

适用场景

最适合

  1. 多轮对话:RadixAttention 的优势场景
  2. Agent 应用:多步骤推理中 KV Cache 复用
  3. 结构化输出:JSON/正则约束生成
  4. 高并发 API:连续批处理 + 前缀复用

不太适合

  1. 单次推理:RadixAttention 无优势
  2. 非 HF 模型:模型支持不如 vLLM 全面
  3. 快速原型:部署配置较复杂
  4. 边缘设备:主要面向服务器 GPU

与 vLLM 的选型建议

如果你需要…推荐
极致单次吞吐量vLLM
多轮对话性能SGLang
Agent 应用SGLang
结构化输出SGLang
最广泛的模型支持vLLM
最低延迟两者接近
社区生态vLLM 更大
技术前沿SGLang 更激进

总结

SGLang 在 2026 年证明了 RadixAttention 不只是一个学术想法——它在多轮对话和 Agent 场景中带来了 2-3x 的真实性能提升。在 Agent 日益普及的今天,这个优势变得越来越重要。

如果你的应用主要是"一问一答"式的单轮交互,vLLM 仍然是更成熟的选择。但如果你的应用涉及大量多轮对话、Agent 推理链、或需要保证结构化输出,SGLang 值得认真考虑。

一个可能的未来趋势是:vLLM 和 SGLang 的技术融合。RadixAttention 作为一项通用技术,可能被其他推理引擎借鉴。但至少在 2026 年,SGLang 在这一领域保持领先。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。