logo
Sakura_Tears
  • Home
  • Pricing
logo
Sakura_Tears
Copyright © 2025 Sakura_Tears. Ltd.
Links
SubscribeManage Subscription
Powered by Postion - Create. Publish. Own it.
Privacy policy•Terms

Postion

关于SGLang

关于SGLang

S
by Sakura_Tears
•Sep 11, 2025

一些指向

原文的arxiv地址

github上的SGLang


目标

SGLang 的设计目标有两个:

- 简化 LLM 程序编写过程

- 提高 LLM 程序执行效率


简化 LLM 程序编写过程

在传统 LLM 应用开发中,存在一些痛点:

- 需要大量字符串操作(prompt 拼接、解析输出)

- prompt 调优依赖试错,过程不可预测

- 输出解析脆弱,LLM 格式变化就可能失败

- 并行调用多个实例需要手动实现

SGLang 的核心思路是:

把 prompt 当作状态流 —— 可追加、可分支、可合并。

- += 表示追加

- fork/join 表示分支和合并

- gen/select 表示生成或选择

- 其余逻辑直接用 Python

执行模式上,SGLang 提供两种方式:

1. 解释器模式:边运行边调度

2. 图编译模式:先编译为静态图,再批量并行执行


提高 LLM 程序执行效率

KV Cache 重用问题

现有系统中,多个调用常常共享相同前缀,但无法有效重用 KV Cache,造成重复计算和显存浪费。

结构化输出低效问题

在 JSON 等约束解码场景下,LLM 输出必须符合语法规则。现有系统用 FSM 逐 token 检查,解码过程冗余。


RadixAttention

RadixAttention 用 基数树 (Radix Tree) 来管理 KV 缓存:

- 将 token 序列映射到 KV 张量

- 支持高效前缀搜索、插入和逐出

- 节点以分页方式存放显存,并有引用计数

- 驱逐策略:LRU 叶子优先

- 完全兼容连续批处理、PagedAttention、张量并行

- 批处理请求时,按最长公共前缀优先排序(近似 DFS)

运行时流程:

1. 前端发送完整提示

- 后端前缀匹配 → 命中则直接复用 KV

- 未命中 → 插入新节点

2. fork 时

- 前端先发“前缀 hint”,复制出多个分支

- 后端保证它们共享同一 radix 节点,并锁定计数

- 前端再发剩余 token


压缩有限状态机 (Compressed FSM)

现有 FSM:逐 token 检查非法词,无法一次解码连续片段。

SGLang 的改进:

- 将相邻的单一转移合并为“压缩边”

- 识别出可一次解码的 token 序列

- 一次前向推理即可输出整段固定内容

- 通用于所有正则表达式,无需修改模型


黑盒 API 模型优化

SGLang 对黑盒 API 模型也有优化:

- 首次调用

- 临时关闭 stop 条件,多生成 k 个 token

- 增量文本被缓存

- 后续调用

- 本地前缀匹配,命中则直接复用

- 匹配失败时回退到正常调用

核心思路:推测执行

-让模型在首次调用时预生成更多 token,把可能的后续结果缓存下来。

-命中即可减少一次 API 调用,降低延迟和 token 成本。

Comments (0)

Continue Reading

关于vLLM

Published Sep 10, 2025

我的第一篇博客!

Published Sep 10, 2025