吞吐量提升5倍,联合设计后端系统和前端语言的LLM接口来了
大型语言模型 (LLM) 被广泛应用于需要多个链式生成调用、高级提示技术、控制流以及与外部环境交互的复杂任务。尽管如此,目前用于编程和执行这些应用程序的高效系统却存在明显的不足之处。
研究人员最近提出了一种新的结构化生成语言(Structured Generation Language),称为SGLang,旨在改进与LLM的交互性。通过整合后端运行时系统和前端语言的设计,SGLang使得LLM的性能更高、更易控制。这项研究也获得了机器学习领域的知名学者、CMU助理教授陈天奇的转发。
总的来说,SGLang 的贡献主要包括:
在后端,研究团队提出了 RadixAttention,这是一种跨多个 LLM 生成调用的 KV 缓存(KV cache)复用技术,自动且高效。
在前端开发中,团队研究出一种灵活的域特定语言,可嵌入Python,用于控制生成过程。这种语言可以在解释器模式或编译器模式下执行。
后端前端组件协同工作,可提高复杂 LLM 程序的执行和编程效率。
该研究使用 SGLang 实现了常见的 LLM 工作负载,包括智能体、推理、提取、对话和小样本学习任务,并在 NVIDIA A10G GPU 上采用 Llama-7B 和 Mixtral-8x7B 模型。如下图 1 、图 2 表明,与现有系统(即 Guidance 和 vLLM)相比,SGLang 的吞吐量提高了 5 倍。
图 1:不同系统在 LLM 任务上的吞吐量(A10G、FP16 上的 Llama-7B、张量并行度 = 1)
图 2:不同系统在 LLM 任务上的吞吐量(A10G、FP16 上的 Mixtral-8x7B,张量并行度 = 8)
后端:使用 RadixAttention 自动 KV 缓存复用
在 SGLang 运行时的开发过程中,该研究发现了复杂 LLM 程序的优化关键 ——KV 缓存复用,当前系统对此处理不佳。KV 缓存复用意味着具有相同前缀的不同 prompt 可以共享中间 KV 缓存,避免冗余的内存和计算。在涉及多个 LLM 调用的复杂程序中,可能存在各种 KV 缓存复用模式。下图 3 说明了 LLM 工作负载中常见的四种此类模式。虽然某些系统能够在某些场景下处理 KV 缓存复用,但通常需要手动配置和临时调整。此外,由于可能的复用模式的多样性,即使通过手动配置,现有系统也无法自动适应所有场景。
图 3:KV 缓存共享示例。蓝色框是可共享的 prompt 部分,绿色框是不可共享的部分,黄色框是不可共享的模型输出。可共享的部分包括小样本学习示例、自洽(self-consistency)问题、多轮对话中的对话历史以及思维树(tree-of-thought)中的搜索历史。
为了系统地利用这些复用机会,该研究提出了一种在运行时自动 KV 缓存复用的新方法 —— RadixAttention。该方法不是在完成生成请求后丢弃 KV 缓存,而是在基数树(radix tree)中保留 prompt 和生成结果的 KV 缓存。这种数据结构可以实现高效的前缀搜索、插入和驱逐。该研究实现了最近最少使用(LRU)驱逐策略,并辅以缓存感知调度策略,以提高缓存命中率。
基数树可作为 trie(前缀树)节省空间的替代方案。与典型的树不同,基数树的边缘不仅可以用单个元素来标记,还可以用不同长度的元素序列来标记,这提高了基数树的效率。
该研究利用基数树来管理映射,这种映射是在充当键的 token 序列和充当值的相应 KV 缓存张量之间进行的。这些 KV 缓存张量以分页布局存储在 GPU 上,其中每个页的大小相当于一个 token。
考虑到 GPU 内存容量有限,无法重新训练无限的 KV 缓存张量,这就需要驱逐策略。该研究采用 LRU 驱逐策略,递归地驱逐叶节点。此外,RadixAttention 与连续批处理和分页注意力等现有技术兼容。对于多模态模型,RadixAttention 可以轻松扩展以处理图像 token。
下图说明了在处理多个传入请求时如何维护基数树。前端总是向运行时发送完整的 prompt,运行时会自动进行前缀匹配、复用和缓存。树形结构存储在 CPU 上,维护开销较小。
图 4. 采用 LRU 驱逐策略的 RadixAttention 操作示例,分九个步骤进行说明。
图 4 演示了基数树响应各种请求的动态演变。这些请求包括两个聊天会话、一批小样本学习查询和自洽性抽样。每个树边缘都带有一个标签,表示子字符串或 token 序列。节点采用颜色编码以反映不同的状态:绿色表示新添加的节点,蓝色表示在该时间点访问的缓存节点,红色表示已被驱逐的节点。
前端:使用 SGLang 轻松进行 LLM 编程
在前端,该研究提出了 SGLang,一种嵌入在 Python 中的特定于领域的语言,允许表达高级 prompt 技术、控制流、多模态、解码约束和外部交互。SGLang 函数可以通过各种后端运行,例如 OpenAI、Anthropic、Gemini 和本地模型。
图 5. 用 SGLang 实现多维文章评分。
图 5 显示了一个具体示例。它利用分支 - 解决 - 合并 prompt 技术实现多维文章评分。该函数使用 LLM 从多个维度评估文章的质量,合并判断,生成摘要,并分配最终等级。突出显示的区域说明了 SGLang API 的使用。(1) fork 创建 prompt 的多个并行副本。(2) gen 调用 LLM 生成并将结果存储在变量中。该调用是非阻塞的,因此它允许多个生成调用在后台同时运行。(3) [variable_name] 检索生成的结果。(4) 选择对生成施加约束。(5) run 使用其参数执行 SGLang 函数。
给定这样一个 SGLang 程序,我们可以通过解释器执行它,也可以将其跟踪为数据流图并使用图执行器运行它。后一种情况为一些潜在的编译器优化开辟了空间,例如代码移动、指令选择和自动调整。
SGLang 的语法很大程度上受到 Guidance 的启发,并引入了新的原语,还处理程序内并行性和批处理。所有这些新功能都有助于 SGLang 的出色性能。
基准测试
研究团队在常见的 LLM 工作负载上测试了其系统,并报告了所实现的吞吐量。
具体来说,该研究在 1 个 NVIDIA A10G GPU (24GB) 上测试了 Llama-7B,在 8 个具有张量并行性的 NVIDIA A10G GPU 上使用 FP16 精度测试了 Mixtral-8x7B,并使用 vllm v0.2.5、指导 v0.1.8 和 Hugging Face TGI v1.3.0 作为基准系统。
如图 1 和图 2 所示,SGLang 在所有基准测试中均优于基准系统,吞吐量提高了 5 倍。它在延迟方面也表现出色,特别是对于第一个 token 延迟,其中前缀缓存命中可以带来显著的好处。这些改进归功于 RadixAttention 的自动 KV 缓存复用、解释器实现的程序内并行性以及前端和后端系统的协同设计。此外,消融研究表明,即使没有缓存命中,也没有明显的开销,这会导致在运行时始终启用 RadixAttention。
参考链接:https://lmsys.org/blog/2024-01-17-sglang/
以上是吞吐量提升5倍,联合设计后端系统和前端语言的LLM接口来了的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

同样是图生视频,PaintsUndo走出了不一样的路线。ControlNet作者LvminZhang又开始整活了!这次瞄准绘画领域。新项目PaintsUndo刚上线不久,就收获1.4kstar(还在疯狂涨)。项目地址:https://github.com/lllyasviel/Paints-UNDO通过该项目,用户输入一张静态图像,PaintsUndo就能自动帮你生成整个绘画的全过程视频,从线稿到成品都有迹可循。绘制过程,线条变化多端甚是神奇,最终视频结果和原图像非常相似:我们再来看一个完整的绘

AIxiv专栏是本站发布学术、技术内容的栏目。过去数年,本站AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,欢迎投稿或者联系报道。投稿邮箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com在人工智能领域的发展过程中,对大语言模型(LLM)的控制与指导始终是核心挑战之一,旨在确保这些模型既强大又安全地服务于人类社会。早期的努力集中于通过人类反馈的强化学习方法(RL

AIxiv专栏是本站发布学术、技术内容的栏目。过去数年,本站AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,欢迎投稿或者联系报道。投稿邮箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com这篇论文的作者均来自伊利诺伊大学香槟分校(UIUC)张令明老师团队,包括:StevenXia,四年级博士生,研究方向是基于AI大模型的自动代码修复;邓茵琳,四年级博士生,研究方

如果AI模型给的答案一点也看不懂,你敢用吗?随着机器学习系统在更重要的领域得到应用,证明为什么我们可以信任它们的输出,并明确何时不应信任它们,变得越来越重要。获得对复杂系统输出结果信任的一个可行方法是,要求系统对其输出产生一种解释,这种解释对人类或另一个受信任的系统来说是可读的,即可以完全理解以至于任何可能的错误都可以被发现。例如,为了建立对司法系统的信任,我们要求法院提供清晰易读的书面意见,解释并支持其决策。对于大型语言模型来说,我们也可以采用类似的方法。不过,在采用这种方法时,确保语言模型生

把因果链展示给LLM,它就能学会公理。AI已经在帮助数学家和科学家做研究了,比如著名数学家陶哲轩就曾多次分享自己借助GPT等AI工具研究探索的经历。AI要在这些领域大战拳脚,强大可靠的因果推理能力是必不可少的。本文要介绍的这项研究发现:在小图谱的因果传递性公理演示上训练的Transformer模型可以泛化用于大图谱的传递性公理。也就是说,如果让Transformer学会执行简单的因果推理,就可能将其用于更为复杂的因果推理。该团队提出的公理训练框架是一种基于被动数据来学习因果推理的新范式,只有演示

干杯!当论文讨论细致到词句,是什么体验?最近,斯坦福大学的学生针对arXiv论文创建了一个开放讨论论坛——alphaXiv,可以直接在任何arXiv论文之上发布问题和评论。网站链接:https://alphaxiv.org/其实不需要专门访问这个网站,只需将任何URL中的arXiv更改为alphaXiv就可以直接在alphaXiv论坛上打开相应论文:可以精准定位到论文中的段落、句子:右侧讨论区,用户可以发表问题询问作者论文思路、细节,例如:也可以针对论文内容发表评论,例如:「给出至

最近,被称为千禧年七大难题之一的黎曼猜想迎来了新突破。黎曼猜想是数学中一个非常重要的未解决问题,与素数分布的精确性质有关(素数是那些只能被1和自身整除的数字,它们在数论中扮演着基础性的角色)。在当今的数学文献中,已有超过一千条数学命题以黎曼猜想(或其推广形式)的成立为前提。也就是说,黎曼猜想及其推广形式一旦被证明,这一千多个命题将被确立为定理,对数学领域产生深远的影响;而如果黎曼猜想被证明是错误的,那么这些命题中的一部分也将随之失去其有效性。新的突破来自MIT数学教授LarryGuth和牛津大学

语言模型真的能用于时序预测吗?根据贝特里奇头条定律(任何以问号结尾的新闻标题,都能够用「不」来回答),答案应该是否定的。事实似乎也果然如此:强大如斯的LLM并不能很好地处理时序数据。时序,即时间序列,顾名思义,是指一组按照时间发生先后顺序进行排列的数据点序列。在很多领域,时序分析都很关键,包括疾病传播预测、零售分析、医疗和金融。在时序分析领域,近期不少研究者都在研究如何使用大型语言模型(LLM)来分类、预测和检测时间序列中的异常。这些论文假设擅长处理文本中顺序依赖关系的语言模型也能泛化用于时间序
