
SGLang 前缀缓存重复前缀推理提速 5 倍的秘密【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglangSGLang 是一款高性能的大模型推理框架它的 RadixAttention 前缀缓存能把相同系统提示词的重复计算直接省掉让多轮对话、批量任务的推理速度最高提升约 5 倍。先看看没优化会怎样想象一个客服机器人每个用户进来都带着同一段几百字的人设说明。如果缓存做不好模型就会对这段一模一样的开头反复重新算几十个用户同时在线时 GPU 大量时间浪费在重复劳动上。再比如批量给一批文档打标签提示词前半段完全相同后半段只是换了个文档——不优化的话前缀部分每一单都从头算一遍吞吐量肉眼可见地掉下去。原理速览用一棵树记住所有前缀核心思路是把算过的 KV 缓存按token 前缀挂在一棵基数树上。新请求进来时先沿着树找能匹配多长的前缀命中多长就跳过多长的计算算完后又把新产生的部分插回树里供后续请求复用。被占用的节点用引用计数锁住暂时不参与回收空闲的叶子节点则按最近最少使用的顺序淘汰给新请求腾地方。整套匹配、插入、淘汰都由RadixCache统一管理你基本不需要手动干预。效果实测前缀命中越多提速越明显前缀重复度越高的场景收益越大原文给出的典型数据整理如下场景相比无缓存的加速多轮对话约 3.2 倍批量提示工程约 4.8 倍文档摘要约 5.1 倍可以看到共享长系统提示词的批量任务提升最夸张而前缀各不相干的纯闲聊几乎没得可省。快速上手三步用上前缀缓存是 SGLang 的默认行为通常不用额外开关。启动服务、发请求即可自动生效启动服务python -m sglang.launch_server --model-path 你的模型发请求共享前缀会自动命中resp client.chat.completions.create( modeldefault, messages[{role: user, content: 提示词}], )想关掉时用--disable-radix-cache参数即可一般生产环境建议保持开启。调优要点命中率怎么看、参数怎么定参数建议值作用page_size默认如 16控制缓存对齐粒度eviction_policylru空闲节点淘汰顺序max_total_num_tokens按显存定缓存总容量关键监控指标是两个cache_hit_rate直接反映前缀复用效率越高说明命中越充分kv_evictable_tokens告诉你有多少缓存是可回收的配合使用率能判断缓存空间是否够用。如果命中率偏低多半是请求间前缀差异太大或者被频繁淘汰挤掉了。避坑清单前缀不一致就白忙token 序列哪怕差一个词命中就断在那别指望模糊匹配把共享部分严格放在提示词最前面。显存不够会被反复淘汰可回收缓存只是临时占位容量设太小会刚存进去又被挤掉命中率看着高实际没省多少按显存给足max_total_num_tokens。并发下别误以为数据被覆盖正在被使用的节点有引用计数保护不会被回收正常压测无需额外加锁。延伸与小结RadixAttention 的价值在于让重复前缀这种最常见场景几乎零成本。想进一步榨取性能可以关注 HiCache 这类设备端 主机端的多级缓存把换出到内存的前缀在命中时再加载回来长上下文和多轮对话下收益更明显。相关实现都集中在仓库的 python/sglang/srt/mem_cache/ 目录里想深挖机制可以直接去看源码。【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考