SGLang
3 秒看懂
SGLang(Structured Generation Language) 是一個面向大語言模型(LLM)推論的高效服務架構,核心創新是 RadixAttention(基於基數樹的 KV Cache 複用)和壓縮有限狀態機(Compressed FSM)約束解碼。它能在多輪對話、共享字首、結構化輸出等場景下實現顯著的吞吐量提升,是當前開源 LLM 推論最佳化的重要競爭者之一,與 vLLM 形成直接對標。
3 分鐘產業解釋
為什麼需要 SGLang?
大型模型落地的核心瓶頸已經從”訓練能不能跑”轉向”推論能不能用得起”。一箇中等規模的聊天應用可能面臨:
- 每秒數千併發請求,每個請求都可能包含長系統提示(system prompt)
- 多輪對話中,前幾輪的 KV Cache 不斷重複計算
- 結構化輸出需求(JSON、SQL、程式碼),約束解碼效率低下
傳統推論架構(如 HuggingFace TGI、vLLM)在這些場景下存在最佳化空間。SGLang 通過系統級的 KV Cache 管理和批處理排程,針對性地解決這些痛點。
產業定位
┌─────────────────────────────────────────────────────────┐
│ LLM 推論服務層 │
├─────────────┬─────────────┬─────────────┬───────────────┤
│ vLLM │ SGLang │ TensorRT- │ DeepSpeed │
│ (PagedAttn)│(RadixAttn) │ LLM │ -Inference │
├─────────────┴─────────────┴─────────────┴───────────────┤
│ CUDA / ROCm / 自研運算元 │
├─────────────────────────────────────────────────────────┤
│ GPU 硬體 (NVIDIA / AMD / ...) │
└─────────────────────────────────────────────────────────┘
關鍵差異
| 維度 | vLLM | SGLang |
|---|---|---|
| 核心技術 | PagedAttention | RadixAttention |
| KV Cache 管理 | 分頁、按需分配 | 基數樹、字首自動複用 |
| 約束解碼 | 有限支援 | 壓縮 FSM 原生整合 |
| 優勢場景 | 通用長文本 | 多輪對話、共享字首、結構化輸出 |
15 分鐘專家深入
架構全貌
SGLang 的推論引擎可以分為幾個關鍵模組:
┌──────────────────────────────────────────────────────────────┐
│ SGLang Runtime │
├──────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Scheduler │ │ RadixCache │ │ Constrained Decode │ │
│ │ (批處理排程) │ │ (KV Cache) │ │ (FSM 引擎) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ CUDA Kernel 層 (FlashInfer) │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
RadixAttention 機制詳解
這是 SGLang 的核心技術突破。傳統 PagedAttention 的問題是:它不感知請求之間的字首共享關係。
問題場景:100 個請求共享同一個 2000 token 的系統提示
請求 A: [系統提示 2000t] + [使用者問題 100t]
請求 B: [系統提示 2000t] + [使用者問題 150t]
請求 C: [系統提示 2000t] + [使用者問題 80t]
...
傳統方案:每個請求獨立計算系統提示的 KV Cache → 重複計算 100 次
RadixAttention 方案:使用基數樹(Radix Tree / Trie)索引 token 序列的字首
[root]
│
[系統提示字首...]
│
┌────────┼────────┐
▼ ▼ ▼
[A的字尾] [B的字尾] [C的字尾]
↓ ↓ ↓
KV_A KV_B KV_C
(僅字尾) (僅字尾) (僅字尾)
關鍵機制:
- 字首匹配:新請求到來時,先在基數樹中查詢最長公共字首(Longest Common Prefix)
- Cache 複用:命中字首的 KV Cache 直接複用,跳過計算
- 動態管理:支援 LRU 淘汰、引用計數、Copy-on-Write 等策略
量化收益估算(基於公開基準,具體數字可能因場景而異):
- 多輪對話場景:吞吐量提升約 1.5-3 倍(vs 原始 vLLM)
- 共享系統提示場景:首 token 延遲(TTFT)顯著降低
壓縮有限狀態機(Compressed FSM)
結構化輸出是企業級應用的剛需(返回 JSON、SQL 等)。SGLang 的約束解碼方案:
傳統約束解碼問題:
- 每次生成 token 後,需要遍歷 FSM 狀態轉移
- 對於複雜 schema,FSM 可能有數千狀態,轉移表巨大
SGLang 的壓縮 FSM:
- 狀態壓縮:合併等價狀態,減小 FSM 規模
- 批次轉移:一次計算多個 token 的合法集合
- 與 RadixCache 整合:約束解碼的中間結果也能被快取複用
JSON Schema 示例: {"name": string, "age": int}
FSM 狀態轉移(簡化):
state_0 --'{'--> state_1 --'"'--> state_2 --[a-z]--> state_3 ...
--'n'--> state_4 (匹配 "name")
--'a'--> state_5 (匹配 "age")
壓縮後: 合併相同字首路徑,減少狀態數
批處理排程器
SGLang 實現了連續批處理(Continuous Batching),但增加了字首感知的排程策略:
- Preempt 策略:當視訊記憶體不足時,優先搶佔字首較短的請求(因為重新計算成本低)
- 排程優先順序:共享長字首的請求被排程到同一 batch,最大化 Cache 命中
FlashInfer 核心
SGLang 依賴 FlashInfer 庫提供高效的注意力計算核心:
- 支援多種注意力變體:MHA、GQA、MQA
- 支援 Paged KV Cache 的高效訪問
- 針對不同 GPU 架構最佳化(A100、H100 等)
技術原理
KV Cache 基數樹實現
┌─────────────────────────────────────────────────────┐
│ RadixCache 內部結構 │
├─────────────────────────────────────────────────────┤
│ │
│ Token 序列: [t1, t2, t3, t4, t5, t6, t7, t8] │
│ │
│ 基數樹節點: │
│ │
│ Node(root) │
│ └── Node([t1,t2,t3]) ← 字首節點 │
│ ├── Node([t4,t5]) ← 請求A的字尾 │
│ │ └── [KV Cache: K_A, V_A] │
│ └── Node([t4,t6]) ← 請求B的字尾 │
│ └── [KV Cache: K_B, V_B] │
│ │
│ 節點後設資料: │
│ - token_ids: 該節點對應的 token 序列 │
│ - kv_cache: 對應的 K, V 張量 │
│ - ref_count: 引用計數(用於淘汰策略) │
│ - last_access: LRU 時間戳 │
│ │
└─────────────────────────────────────────────────────┘
Cache 複用的數學表示
對於請求 $R$,其 token 序列為 [t_1, t_2, ..., t_n]
設基數樹中已快取的最長字首長度為 $p$,則:
- 可複用的 KV Cache:對應
[t_1, ..., t_p] - 需要計算的部分:
[t_{p+1}, ..., t_n] - 計算量節省比:
\frac{p}{n}(理想情況)
約束解碼的 FSM 原理
JSON Schema: {"key": string}
對應的正規表示式(簡化):
{"key":"[a-zA-Z]*"}
FSM 建置:
┌─────┐ '{' ┌─────┐ '"' ┌─────┐ 'k' ┌─────┐
│ q0 │ ------→ │ q1 │ ------→ │ q2 │ ------→ │ q3 │
└─────┘ └─────┘ └─────┘ └─────┘
│ 'e'
▼
┌─────┐
│ q4 │
└─────┘
│ 'y'
▼
┌─────┐
│ q5 │
└─────┘
│ '"' (鍵結束引號)
▼
┌─────┐
│ q6 │
└─────┘
│ ':' (冒號)
▼
┌─────┐
│ q7 │
└─────┘
│ '"' (值開始引號)
▼
┌─────┐
│ q8 │
└─────┘
(接受 [a-zA-Z]*)
每個狀態對應一個合法 token 集合(vocab mask)
解碼時,logits 只在合法 token 上取 argmax
SGLang 核心引數與指標
| 引數/指標 | 說明 | 典型值/範圍 |
|---|---|---|
| RadixCache 命中率 | 字首複用的有效性 | 場景依賴,可高可低 |
| TTFT | Time To First Token,首 token 延遲 | 與字首長度、batch size 相關 |
| TPOT | Time Per Output Token,逐 token 延遲 | 與模型大小、GPU 算力相關 |
| Throughput | 吞吐量(tokens/s) | 核心最佳化目標 |
| P99 Latency | 第 99 百分位延遲 | 服務穩定性指標 |
技術演進史
時間線
2023.06 vLLM 釋出,PagedAttention 成為主流方案
↓
2023.12 SGLang 初始版本,提出結構化生成語言概念
↓
2024.01 SGLang 推出 RadixAttention,效能大幅改進
↓
2024.Q1 FlashInfer 整合,核心最佳化
↓
2024.Q2 壓縮 FSM 約束解碼最佳化
↓
2024.H2 持續迭代,擴充套件模型支援(Mixtral MoE、Gemma 等)
↓
至今 與 vLLM 形成雙雄競爭格局
關鍵里程碑
| 時間 | 事件 | 意義 |
|---|---|---|
| 2024.01 | RadixAttention 論文/程式碼釋出 | 核心技術創新,解決字首複用問題 |
| 2024.Q1 | FlashInfer 整合 | 核心層最佳化,提升硬體利用率 |
| 2024.H1 | 約束解碼最佳化 | 結構化輸出效能提升 |
| 2024.H2 | 多模型支援擴充套件 | 生態完善,支援 MoE 等複雜架構 |
技術路線對比
推論架構技術路線對比
| 維度 | vLLM (PagedAttention) | SGLang (RadixAttention) | TensorRT-LLM | DeepSpeed-Inference |
|---|---|---|---|---|
| 核心創新 | 分頁 KV Cache | 基數樹 KV Cache 複用 | 圖最佳化 + 核心融合 | ZeRO 推論 + 張量並行 |
| 字首複用 | 不原生支援 | 原生支援 | 需手動配置 | 不原生支援 |
| 約束解碼 | 有限支援 | 壓縮 FSM 深度整合 | 有限支援 | 不原生支援 |
| 動態批處理 | 支援(Continuous Batching) | 支援(字首感知排程) | 支援 | 支援 |
| 視訊記憶體管理 | Paged KV Cache | RadixCache + Paged | 靜態圖最佳化 | ZeRO 分片 |
| 硬體支援 | NVIDIA, AMD, TPU | NVIDIA (主要) | NVIDIA (僅限) | NVIDIA (主要) |
| 部署複雜度 | 中等 | 中等 | 較高(需要圖編譯) | 較高 |
| 最佳場景 | 通用長文本 | 多輪對話/共享字首/結構化輸出 | 固定模型 + 固定輸入 | 超大型模型分散式推論 |
效能對比基準(參考值,具體數字因場景/硬體/模型而異)
| 場景 | SGLang 相對 vLLM 的吞吐量提升 | 說明 |
|---|---|---|
| 多輪對話 | 1.5x - 3x | RadixCache 複用歷史 KV |
| 共享系統提示 | 2x - 5x | 長字首複用收益顯著 |
| 結構化輸出 (JSON) | 1.2x - 2x | 壓縮 FSM 減少約束開銷 |
| 單輪無共享 | ~1x | 無字首複用,效能相近 |
注:以上數字為基於公開基準的估算範圍,實際結果依賴具體配置。
上下游
產業鏈位置
上游(算力/硬體層)
┌─────────────────────────────────────────────┐
│ GPU 硬體: NVIDIA A100/H100, AMD MI250/MI300 │
│ 互聯: NVLink, PCIe, InfiniBand │
│ 視訊記憶體: HBM2e, HBM3 (容量/頻寬是關鍵) │
└─────────────────────┬───────────────────────┘
│
▼
中游(架構/引擎層)
┌─────────────────────────────────────────────┐
│ 推論架構: SGLang, vLLM, TensorRT-LLM, TGI │
│ 核心庫: FlashInfer, FlashAttention, Triton │
│ 編譯最佳化: CUDA, ROCm, TensorRT │
└─────────────────────┬───────────────────────┘
│
▼
下游(應用/服務層)
┌─────────────────────────────────────────────┐
│ 雲端服務: AWS Bedrock, Azure AI, GCP Vertex │
│ API 服務: OpenAI, Anthropic, 自建服務 │
│ 應用: 聊天機器人, 程式碼助手, 結構化資料抽取 │
└─────────────────────────────────────────────┘
關鍵依賴
| 層級 | 依賴項 | 說明 |
|---|---|---|
| 核心層 | FlashInfer | SGLang 的注意力核心核心依賴 |
| 模型層 | HuggingFace Transformers | 模型載入、分詞器 |
| 執行時 | CUDA / PyTorch | GPU 計算底座 |
| 分散式 | NCCL | 多 GPU 通訊 |
關鍵指標
推論效能關鍵指標
| 指標 | 定義 | 最佳化方向 | SGLang 的最佳化手段 |
|---|---|---|---|
| TTFT (Time To First Token) | 請求發出到第一個 token 返回的延遲 | 減少 prefill 計算量 | RadixCache 字首複用 |
| TPOT (Time Per Output Token) | decode 階段每生成一個 token 的平均延遲 | 提升 decode 效率 | 連續批處理 + 核心最佳化 |
| Throughput (tokens/s) | 單位時間處理的 token 總數 | 最大化 GPU 利用率 | 字首感知排程 + 高效批處理 |
| P99 Latency | 第 99 百分位延遲 | 服務穩定性 | 公平排程 + preemption 策略 |
| Cache Hit Rate | RadixCache 字首命中率 | 提升複用效率 | 基數樹結構 + LRU 策略 |
資源效率指標
| 指標 | 說明 |
|---|---|
| GPU 利用率 | 計算單元的實際佔用率 |
| 視訊記憶體利用率 | KV Cache 佔用 vs 總視訊記憶體 |
| Batch Size | 動態批處理的實際 batch 大小 |
供需與市場資料
推論架構市場格局(定性)
開源推論架構市場份額(估算)
vLLM ████████████████████████ (~40-50%) ← 當前領導者
TensorRT-LLM ████████████████ (~25-30%) ← NVIDIA 生態繫結
SGLang ████████ (~10-15%) ← 快速增長
TGI ██████ (~8-12%) ← HuggingFace 生態
Others ████ (~5-10%)
注:以上為基於社群活躍度、部署案例的粗略估算,非精確市場調研資料。
SGLang 的應用場景需求
| 場景 | 需求特徵 | SGLang 適配度 |
|---|---|---|
| 多輪對話機器人 | 長曆史上下文、高併發 | ★★★★★ |
| API 閘道器 | 共享系統提示、多樣化請求 | ★★★★★ |
| 結構化資料抽取 | JSON/SQL 輸出約束 | ★★★★★ |
| 程式碼生成 | 語法約束、多候選 | ★★★★☆ |
| RAG 應用 | 長文件上下文 | ★★★★☆ |
| 單輪摘要 | 無共享字首 | ★★★☆☆ |
代表公司與產業對映
核心團隊與組織
| 維度 | 說明 |
|---|---|
| 核心團隊 | UC Berkeley LMSYS 組 |
| 關鍵人物 | Ying Sheng, Lianmin Zheng 等(SGLang 核心開發者,同時也是 vLLM 的早期貢獻者) |
| 關聯專案 | LMSYS Chatbot Arena, Vicuna, FastChat |
| 開源協議 | Apache 2.0 |
資本/商業化對映
| 層級 | 相關公司/專案 | 說明 |
|---|---|---|
| 雲端服務商 | AWS, Azure, GCP, 阿里雲端, 位元組火山引擎 | LLM 推論服務的最終買家 |
| GPU 廠商 | NVIDIA, AMD, Intel | 硬體受益方 |
| 模型公司 | OpenAI, Anthropic, 智譜, 月之暗面 | 內部推論最佳化可能採用類似技術 |
| 推論服務商 | Together AI, Fireworks AI, Replicate | 可能採用/貢獻 SGLang |
| 學術機構 | UC Berkeley, CMU, Stanford | 核心研究力量 |
注:SGLang 是開源專案,暫無直接獨立融資記錄。其價值體現在降低推論成本、推動生態發展。
產業邏輯
為什麼關注 SGLang?
核心邏輯:LLM 推論成本是落地的關鍵瓶頸,推論架構是降本增效的核心抓手。
大型模型落地成本拆解(簡化)
┌──────────────────────────────────────────┐
│ 總擁有成本 (TCO) │
├──────────────────────────────────────────┤
│ 訓練成本 │ 推論成本(持續) │
│ (一次性) │ (隨請求量線性增長) │
│ │ │
│ 注:推論成本 │ ← 這是長期主要成本 │
│ 通常遠大於訓練 │ 最佳化空間巨大 │
└──────────────────────────────────────────┘
產業影響梳理
| 層級 | 影響型別 | 相關方向 |
|---|---|---|
| 硬體層 | 需求傳導 | NVIDIA (GPU), AMD (GPU), SK Hynix (HBM) |
| 架構層 | 生態卡位 | 開源架構本身不直接產生營收,但影響生態選擇 |
| 雲端服務層 | 成本與用量聯動 | 推論成本降低 → 更多請求 → 更多營收 |
| 應用層 | 成本降低 | 更低的 API 成本 → 更多應用場景可行 |
風險與不確定性
| 風險 | 說明 |
|---|---|
| 技術路線競爭 | vLLM 社群活躍度高,可能跟進字首複用技術 |
| 硬體變化 | 新一代 GPU 架構可能改變最佳化重點 |
| 閉源方案 | NVIDIA TensorRT-LLM 等閉源方案可能在特定場景更優 |
| 需求變化 | 更長上下文視窗可能減少字首複用需求 |
常見誤讀糾偏
誤讀 1:SGLang 的效能提升都是”免費”的
糾偏:SGLang 的效能提升依賴於特定場景。在沒有共享字首的場景下,RadixAttention 的優勢不明顯。核心收益來自:
- 多輪對話(歷史 KV 複用)
- 共享系統提示(字首 KV 複用)
- 結構化輸出(FSM 約束解碼最佳化)
對於單輪、無共享的簡單請求,SGLang 與 vLLM 效能差距不大。
誤讀 2:RadixAttention 完全替代了 PagedAttention
糾偏:RadixAttention 和 PagedAttention 解決的是不同層面的問題:
- PagedAttention:解決 KV Cache 的視訊記憶體碎片化問題(將連續視訊記憶體分頁管理)
- RadixAttention:解決 KV Cache 的跨請求複用問題(基於字首索引)
SGLang 的 RadixCache 底層仍然使用分頁管理(類似 PagedAttention 的思想),上層增加了基於基數樹的字首索引。兩者是互補關係,不是替代關係。
誤讀 3:SGLang 是 vLLM 的”改進版”
糾偏:雖然 SGLang 和 vLLM 都是 LLM 推論架構,但它們的設計哲學和技術創新點不同:
| 維度 | vLLM | SGLang |
|---|---|---|
| 核心創新 | PagedAttention(視訊記憶體管理) | RadixAttention(字首複用) |
| 設計重點 | 通用高效推論 | 字首感知 + 結構化輸出 |
| 技術來源 | UC Berkeley(最初) | UC Berkeley LMSYS |
| 關係 |