Papers

09 · SGLang 多模态推理参考

SGLang 用 RadixAttention 管理 prefix cache。它把 prompt 放进 Radix Tree,并按共享前缀复用 KV block;本页关注这套机制在 VLM 请求中的适用边界。

1. SGLang 的 RadixAttention 与 VLM

在纯文本推理中,SGLang 会把所有 prompt 插入 Radix Tree,后续请求自动匹配共享 prefix。VLM 请求仍然遇到和 vLLM hash-based caching 相同的问题:图片变化后,visual token 对应的 KV 也会变化。

SGLang 社区目前对多模态 prefix caching 的讨论集中在以下方向:

SGLang RadixAttention 与 LRU 淘汰示意图
来源:SGLang 论文 Figure 3。它展示了 RadixAttention 如何在多轮请求中复用、分叉和淘汰前缀节点,比抽象描述更容易看懂 prefix reuse 的动态过程。

2. SGLang 多模态 Serving 的实践经验

当前的 VLM serving 仍有几处设计可以参考:

特性SGLang 的做法对受限显存配置的价值
Radix Tree 文本 prefix视觉 token 之前的纯文本部分依然可共享节省系统提示的重复 prefill,约 20~50MB/请求
Continuous Batching支持 prefill 和 decode 混合 batch提升 受限显存下的吞吐效率
Token 级 Block 管理与 vLLM 类似的 block 级分配相同的碎片率优势
Structured OutputJSON / Regex 约束解码对文档解析 VLM 任务特别有用(如 OCR 结构化提取)
RadixAttention Skip对于已完全匹配的 prefix,跳过 attention 计算显存和延迟双优化

3. SGLang vs vLLM 在受限显存 VLM 场景下的对比

维度vLLMSGLang
KV Cache 机制PagedAttention + hash-based APCRadixAttention + Radix Tree
多模态支持已较为成熟(v0.5+)快速演进中,部分 VLM 已支持
Prefix 共享粒度Block 级(16 token 对齐)Token 级(精确到每个 token)
显存分配可配置(block size 可定制)可配置(使用相同的 block 管理)
社区成熟度更成熟,VLM 文档更完善快速增长,部分 VLM 仍为实验性
适用场景通用 VLM serving多轮对话 + 渐进式 prefix(如 agent 场景)

4. SGLang 的架构对 minivLLM 的启发

SGLang 的以下几个设计思想对 minivLLM 的多模态扩展具有参考价值:

5. 我们这次实验中的参考状态

SGLang 参考路径未执行

在 Task 10 的 reference 矩阵实验中,我们仅测试了 HF transformers 的 model.generate() 路径,未安装和运行 SGLang runtime。原因有二:一是 4 个 VLM 模型在基础 HF 加载阶段就已全部失败(缺 accelerate),二是 SGLang 本身需要 CUDA 环境(torch.cuda.is_available()),macOS MPS 下无法运行。

SGLang 的 RadixAttention 在当前 minivLLM 实现中作为设计参考存在,而非运行依赖。minivLLM 的 PagedKV(Task 6)采用 vLLM 风格的 correctness-first 实现,但 SGLang 的 Radix Tree 概念在 learning 笔记中有完整记录(learning/notes/10_sglang源码参考.md + learning/papers/12_sglang_radixattention.md)。

6. 页面导航