SGLang:比vLLM吞吐还要大5倍的推理引擎

大模型向量数据库云安全

当前,LLM的应用场景已远不止简单的对话,而是扩展到需要多轮交互、复杂逻辑控制以及与外部环境集成的复杂任务。因此,在构建复杂、高效且可控的LLM应用仍然面临诸多瓶颈,比如:

  • 推理速度慢: 复杂的LLM应用通常需要多次调用模型,重复计算和数据传输导致整体延迟较高。
  • 控制性不足: 传统的方式难以精确控制LLM的生成过程,限制了应用的灵活性和可靠性。
  • 编程复杂性高: 缺乏专门为LLM应用设计的编程语言和工具,开发者需要花费大量精力在底层细节上。

为了突破这些瓶颈,SGLang应运而生。它通过

软硬件协同设计

的理念,从后端运行时系统到前端编程语言进行全面优化,旨在让开发者能够更快速、更轻松地构建高性能、高可控性的LLM应用,其性能比同门vLLM高出5倍。

picture.image

技术特色

SGLang的特色在

RadixAttention

和 前端DSL。这两大组件协同工作,为LLM应用带来了质的飞跃。

  1. RadixAttention:自动KV缓存

LLM在生成文本时,需要维护一个

KV 缓存

,用于存储之前生成token的中间计算结果。在多轮对话或复杂任务中,很多请求可能共享相同的前缀,例如相同的系统提示或对话历史。传统的推理系统在处理这类场景时,往往会重复计算这些共享前缀的KV缓存,造成大量的冗余计算和内存浪费。虽然有些系统支持KV缓存复用,但通常需要手动配置,且难以应对复杂的复用模式。

picture.image

蓝色框是可共享的提示部分,绿色框是非共享部分,黄色框是非共享的模型输出。可共享部分包括少量示例学习示例、自我一致性中的问题、多轮对话中的聊天历史以及TOT中的搜索历史。

而SGLang提出了 RadixAttention,它是一种

自动且高效的KV缓存复用技术

。它将KV缓存组织成

基数树 (Radix Tree)

的数据结构,并结合

LRU (Least Recently Used) 淘汰策略

缓存感知调度策略

,实现了在运行时自动识别和复用不同LLM调用之间的共享KV缓存。简单类比:你可以将RadixAttention想象成一个智能的图书馆管理员。图书馆(GPU内存)里存放着大量的书籍(KV缓存),每本书都有一个独特的书名(token序列)。当新的读者(LLM请求)来借书时,管理员(RadixAttention)能够快速查找图书馆中是否已经存在包含读者所需信息的书籍(共享前缀的KV缓存)。如果存在,则直接复用,无需重新购买新书(重新计算),大大节省了时间和资源。

如下图所示,Radix树的每个节点代表一个token序列,边代表token。当新的请求到来时,RadixAttention会在树中进行前缀匹配,找到最长共享前缀的节点,并复用其KV缓存。基数树的优势在于其高效的

前缀搜索、插入和淘汰

能力,能够灵活应对各种复杂的KV缓存复用模式。

picture.image

RadixAttention的优势也比较明显,具有以下特点。

  • 自动化: 无需手动配置,自动识别和复用KV缓存。
  • 高效性: 基数树结构和缓存策略保证了高效的缓存管理和复用。
  • 通用性: 兼容连续批处理、分页注意力等现有技术,并可扩展到多模态模型。

  1. 前端Python嵌入式DSL,简化LLM编程

SGLang不仅在后端进行了优化,还提供了一个

嵌入在Python中的领域特定语言 (DSL)

,旨在简化LLM应用的编程过程。它允许用户轻松地表达高级提示技术、控制流、多模态输入、并行性和外部交互。 SGLang 程序可以通过解释器模式或编译器模式执行。

如下图展示了一个使用SGLang实现的 多维度论文评分器 的例子。这个例子使用了 branch-solve-merge prompting 技术,从多个维度评估论文质量,并最终生成总结和评分。通过这些简洁而强大的API,开发者可以轻松构建复杂的LLM应用逻辑,而无需关注底层的模型调用和缓存管理细节。

picture.image

性能表现

SGLang 通过自动 KV 缓存重用、解释器内的程序并行性和前端后端的协同设计,在吞吐量和延迟方面实现了显著的性能提升。在一系列基准测试中,相比于现有的系统(如 Guidance 和 vLLM)实现了

高达5倍的吞吐量提升

picture.image LLM 任务下不同系统 throughput(Llama-7B 在 A10G 上,FP16,张量并行=1)

picture.image

不同系统在LLM任务上的吞吐量(Mixtral-8x7B 在 A10G 上,FP16,张量并行=8)

小结

SGLang作为后起之秀,站在巨人的肩膀(SGLang Runtime 从 vLLM 导入了一些模型和层的实现,但重新设计了批处理和缓存调度器),聚焦LLM应用发展过程中遇到的新痛点,在性能和开发效率上取得非常好的成绩,同时由于项目比较新,在易用性上还存在一些缺点(配置较vllm复杂),因此,也还有更长的路要走,但面向复杂的LLM应用改进推理服务的思路是无比正确的,未来充满前景,值得大家关注学习。

项目地址:https://github.com/sgl-project/sglang

公众号回复“进群”入群讨论。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论