SGLang——结构化语言模型程序的高效执行

前言

大型语言模型 (LLM) 越来越多地用于需要多次生成调用、高级提示技术、控制流和结构化输入/输出的复杂任务。然而,缺乏用于编程和执行这些应用程序的高效系统。新推出的系统 SGLang 旨在通过提供复杂语言模型程序的高效执行来解决这一问题。SGLang 包含前端语言和运行时。前端使用用于生成和并行控制的原语简化编程,而运行时通过新颖的优化加速执行,例如用于 KV 缓存重用的 RadixAttention 和用于更快结构化输出解码的压缩有限状态机。实验表明,与各种大型语言和多模态模型上的最先进推理系统相比,SGLang 实现了高达 6.4 倍的吞吐量,可处理代理控制、逻辑推理、小样本学习基准、JSON 解码、检索增强生成管道和多轮聊天等任务。

LLM 功能的最新进展扩大了它们的实用性,使它们能够处理更广泛的一般任务并充当自主代理。在这些应用中,LLM 参与多轮规划、推理和与外部环境的交互。这是通过使用工具、多种输入方式和各种提示技术(例如小样本学习、自洽、思维骨架和思维树)来实现的。这些新用例需要多个(通常是相互依赖的)LLM 生成调用,这表明使用多调用结构来完成复杂任务的趋势。

这种转变标志着 LLM 从简单的聊天过渡到更复杂的程序化使用,其中程序安排和控制 LLM 的生成过程。这些程序被称为“语言模型程序”(LM 程序)。高级提示技术和代理工作流属于 LM 程序的范围。LM 程序有两个共同属性:(1) LM 程序通常涉及多个 LLM 调用,这些调用与控制流交织在一起,以完成复杂任务并提高整体质量。(2) LM 程序接收结构化输入并产生结构化输出,从而实现 LM 程序的组合并集成到现有软件系统中。

在这里插入图片描述

SGLang 简介

尽管 LM 程序得到了广泛使用,但当前用于表达和执行它们的系统仍然效率低下。SGLang 确定了与高效使用 LM 程序相关的两个主要挑战:

  • 编程复杂性:由于 LLM 的非确定性,开发 LM 程序既繁琐又困难。这涉及大量字符串操作、提示的实验性调整、脆弱的输出解析、处理多种输入模式以及实现并行机制。这种复杂性大大降低了即使是简单程序的可读性。
  • 执行效率低下:由于冗余计算和内存使用,执行 LM 程序效率低下。最先进的推理引擎经过优化以减少延迟并提高吞吐量,但缺乏对工作负载的直接了解,导致效率低下。一个值得注意的例子是重用键值 (KV) 缓存,它由生成推理所必需的可重用中间张量组成。当前系统缺乏有效的机制来促进跨多个系统重用 KV 缓存 LLM 共享公共前缀的调用会导致不必要的计算和内存浪费。此外,结构化输出(如 JSON 模式)的受限解码不是最优的,因为现有系统一次只能解码一个标记。

为了应对这些挑战,SGLang 为 LLM 引入了结构化生成语言。其核心思想是系统地利用 LM 程序中的多调用结构来实现高效执行。如下图所示,SGLang 有两个部分:前端语言和后端运行时。

在这里插入图片描述
前端简化了 LM 程序的编程,而运行时则加速了程序的执行。这些部分可以协同工作以获得更好的性能,也可以独立运行。

SGLang 是嵌入在 Python 中的领域特定语言,提供生成(例如 extend、gen、select)和并行控制(例如 fork、join)的原语。它与 Python 的控制流和库兼容,允许用户使用原生 Python 语法轻松开发高级提示工作流。SGLang 包含一个解释器和一个编译器。解释器将提示状态作为流进行管理,并将原语操作提交给流进行异步执行,确保对同步和程序内并行进行适当的控制。此外,可以跟踪和编译 SGLang 程序以进行进一步优化。SGLang 的运行时提出了几项新颖的优化来加速 LM 程序的执行:

  • RadixAttention:此技术可在多个生成调用之间自动重用 KV 缓存。在现有的推理引擎中,请求的 KV 缓存在处理后会被丢弃,从而无法在多个调用之间重用,并会降低执行速度。SGLang 在基数树中维护 KV 缓存的 LRU 缓存,将 KV 缓存作为传统缓存进行管理,并使用基数树进行高效的匹配、插入和逐出。这允许运行时高效处理各种重用模式。
  • 压缩有限状态机:此技术可实现结构化输出的更快约束解码。现有系统仅遵循下一个标记的约束,因此每次只能解码一个标记。相反,SGLang 会分析这些约束并构建一个压缩有限状态机来表示它们,尽可能将多标记路径压缩为单步路径,从而可以一次解码多个标记,从而提高速度。
  • API 推测执行:对于仅使用 API 的模型,例如 OpenAI的GPT-4,SGLang引入API推测执行来优化多调用程序。

使用 SGLang,实现了各种 LLM 应用程序,包括代理控制、逻辑推理、小样本学习基准、JSON 解码、检索增强生成管道、多轮聊天和多模态处理。在 NVIDIA A7G 和 A70 GPU 上对 Llama-8B/7B、Mistral-1.5x7B、LLaVA-v34-10B(图像)和 LLaVA-NeXT-100B(视频)等模型进行了性能测试。实验结果表明,与现有的编程和推理系统(包括 Guidance、vLLM 和 LMQL)相比,SGLang 在各种工作负载、模型和硬件设置中实现了高达 6.4 倍的吞吐量。

SGLang:编程模型和方法

通过一个运行示例介绍了 SGLang 编程模型,描述了其语言原语和执行模式,并概述了运行时优化机会。该模型通过提供灵活且可组合的原语,简化了多调用工作流(例如字符串操作、API 调用、约束规范、并行性)中的繁琐操作。SGLang 是一种嵌入在 Python 中的领域特定语言。下图显示了一个使用分支解决合并提示方法评估关于图像的文章的程序。

在这里插入图片描述
该功能 多维评判 接受三个参数: `s`、`path` 和 `essay`.s 管理提示状态,path 是图像文件路径,essay 是文章文本。可以使用以下代码将新字符串和 SGLang 原语附加到状态 s 中执行 += 运算符。首先,该函数将图像和文章添加到提示中。然后它使用 select 检查文章是否与图像相关,并将结果存储在 **s[“相关”]**如果相关,则将提示分为三个副本,以便从不同维度进行并行评估,并使用 gen 将结果存储在 f[“判断”]。接下来,它会合并判断,生成摘要并分配字母等级。最后,它会按照正则表达式约束定义的模式以 JSON 格式返回结果 正则表达式。SGLang 大大简化了这个程序,因为使用类似 OpenAI API 接口的等效程序由于手动字符串操作和并行控制将需要 2.1 倍的代码行数。

SGLang 提供了用于控制提示状态、生成和并行性的原语,可与 Python 语法和库一起使用。以下是原语:

流派: 调用模型来生成结果并将其存储在变量中,变量的名称由其第一个参数指定。它支持“regex”参数,以限制输出遵循正则表达式定义的语法(例如 JSON 模式)。

  • 选择:调用模型从列表中选择概率最高的选项。
  • += 或 extend:将字符串附加到提示。
  • [variable_name]:获取一代的结果。
  • fork:创建提示状态的并行分叉。
  • join:重新加入提示状态。
  • 图像和视频:接收图像和视频输入。

执行 SGLang 程序的最简单方法是通过解释器,其中提示被视为异步流。类似 扩展、生成和选择 提交到流中进行异步执行。这些非阻塞调用允许 Python 代码继续运行而无需等待生成完成,类似于异步启动 CUDA 内核。每个提示都由后台线程中的流执行器管理,从而实现程序内并行性。获取生成结果将阻塞,直到它们准备就绪,确保正确同步。或者,SGLang 程序可以编译为计算图并使用图执行器执行,从而实现更多优化。本文默认使用解释器模式,并在附录 D 中讨论编译器模式结果。SGLang 使用自己的 SGLang Runtime (SRT) 支持开放权重模型,以及 API 模型,例如 OpenAI 和人择模型。

LLM 的编程系统可分为高级(例如 LangChain、DSPy)和低级(例如 LMQL、Guidance、SGLang)。高级系统提供预定义或自动生成的提示,例如 DSPy 的提示优化器。低级系统通常不会更改提示,但允许直接操作提示和原语。SGLang 是一种类似于 LMQL 和 Guidance 的低级系统。下表比较了它们的功能。
在这里插入图片描述

SGLang 更注重运行时效率,并带有自己的共同设计的运行时,允许进行新颖的优化。高级语言(例如 DSPy)可以编译为低级语言(例如 SGLang)。稍后将演示如何将 SGLang 作为后端集成到 DSPy 中以提高运行时效率。

在这里插入图片描述

上述示例说明了在 9 个时间点上使用 LRU 驱逐策略的 RadixAttention 操作,展示了基数树响应各种请求的动态演变。这些请求包括两个聊天会话、一批少量学习查询和自洽采样。每条树边都带有一个标签,表示子字符串或令牌序列。节点采用颜色编码以反映不同的状态:绿色表示新添加的节点,蓝色表示在该时间点访问的缓存节点,红色表示已被驱逐的节点。

步骤1: 基数树最初是空的。

步骤2: 服务器处理传入的用户消息“Hello”,并以 LLM 输出“Hi”作为响应。系统提示“你是一个乐于助人的助手”,用户消息“Hello!”和 LLM 回复“Hi!”被合并到树中,作为链接到新节点的单个边。

步骤3: 新的提示到达,服务器在基数树中找到该提示的前缀(即对话的第一个轮次),并重用其 KV 缓存。新的轮次作为新节点附加到树中。

步骤4: 新的聊天会话开始。步骤 3 中的节点被拆分为两个节点,以允许两个聊天会话共享系统提示。

步骤5: 第二个聊天会话继续。但是,由于内存限制,必须驱逐步骤 4 中的一个节点。新回合将附加在步骤 4 中剩余的节点之后。

步骤6: 服务器接收少样本学习查询,处理它并将其插入树中。由于新查询与现有节点不共享任何前缀,因此根节点被分裂。

步骤7: 服务器收到一批额外的少样本学习查询。这些查询共享同一组少样本示例,因此步骤 6 中的节点被拆分以实现共享。

步骤8: 服务器从第一个聊天会话中收到一条新消息。它会从第二个聊天会话中逐出所有最近最少使用的节点。

步骤9: 服务器收到请求,要求对第 8 步中的节点中的问题采样更多答案,这很可能是为了自我一致性提示。为了给这些请求腾出空间,多个节点被驱逐。

此示例演示了 RadixAttention 如何根据不同类型的请求处理节点的动态分配和驱逐,从而确保高效的 KV 缓存重用和内存管理。

SGLang:评估和结果

开放权重模型的结果

下图显示了延迟和吞吐量结果。SGLang 将吞吐量提高了 6.4 倍,并将延迟降低了 3.7 倍。这些改进源于 KV 缓存重用、单个程序内的并行性利用以及更快的约束解码。
在这里插入图片描述

在这些基准测试中,缓存命中率范围从 50% 到 99%。图 13(附录)列出了所有这些测试的已实现缓存命中率和最佳缓存命中率,显示 SGLang 的缓存感知调度平均接近最佳命中率的 96%。
在这里插入图片描述

具有张量并行的大型模型的结果

在同一组基准上对较大的模型 Mixtral-8x7B 和 Llama-70B 进行了张量并行测试,结果如下图所示。较大模型的加速趋势与较小模型的加速趋势相似,表明 SGLang 的优化可以很好地推广到较大的模型。由于缺乏有效的张量并行实现,因此省略了 Guidance 和 LMQL。
在这里插入图片描述

多模态模型的结果

SGLang 原生支持具有图像和视频基元的多模态模型。本文中的优化与多模态模型兼容。对于 RadixAttention,计算输入图像的哈希值并将其用作基数树中的键,从而允许重用来自同一图像的图像标记的 KV 缓存。LLaVA-v1.5-7B(图像)在 ActivityNet 上的 llava-bench-in-the-wild 上运行,LLaVA-NeXT-34B(视频)在 ActivityNet 上运行。由于这些模型没有得到其他基线系统的良好支持,因此模型作者在 Hugging Face Transformers 中的原始实现被用作基线。如下表所示,SGLang 在这些基准测试中提供的吞吐量高达 6 倍。在 llava-bench-in-the-wild 中,处理了有关同一图像的多个问题,在这种情况下,SGLang 运行时重用了 KV 缓存。
在这里插入图片描述

生产部署

SGLang 已部署在 Chatbot Arena 中,为开放权重模型提供服务。由于某些模型的流量较低,每个模型仅由一个 SGLang 工作器提供服务。一个月后,观察到 LLaVA-Next-52.4B 的 RadixAttention 缓存命中率为 34%,Vicuna-74.1B 的 RadixAttention 缓存命中率为 33%。缓存命中来自常见系统消息、经常重复使用的示例图像和多轮聊天历史记录。这平均将 Vicuna-1.7B 的第一个令牌延迟降低了 33 倍。

在这里插入图片描述
总结

在本文中,我们讨论了新推出的系统 SGLang,该系统旨在通过提供复杂语言模型程序的高效执行来解决这一问题。SGLang 包含前端语言和运行时。前端使用用于生成和并行控制的原语简化编程,而运行时通过新颖的优化(例如用于 KV 缓存重用的 RadixAttention 和用于更快的结构化输出解码的压缩有限状态机)加速执行。实验表明,与各种大型语言和多模态模型上的最先进推理系统相比,SGLang 实现了高达 6.4 倍的吞吐量,可处理代理控制、逻辑推理、小样本学习基准、JSON 解码、检索增强生成管道和多轮聊天等任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148608.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

828华为云征文|华为云Flexus X轻松实现Redis一主多从高效部署

目录 前言 一、华为云Flexus X加速Redis购买 1.1 Flexus X实例购买 1.2 Redis加速镜像选择 1.3 重置密码 1.4 登录Flexus X实例 1.5 Flexus X实例Redis验证 二、华为云Flexus X主节点Redis配置 2.1 重置密码 2.2 Redis外部访问配置 三、华为云Flexus X从节点Redis配置 3.1 从机…

亚马逊商品详情数据接口:提升运营排名的工具

亚马逊商品详情数据接口是亚马逊平台提供的一种服务,允许用户通过程序调用API(应用程序接口)来获取亚马逊商品的相关数据。这个接口为开发者和商家提供了丰富的商品信息,有助于优化用户体验、支持购买决策、竞品分析和市场研究等。…

Comfyui海报工作流:出图快,质量高!

前言 工作流获取方式放在这里了 在快节奏的现代生活中,高效的工作流程对于企业和个人而言,无疑是提升竞争力的关键。 特别是在设计领域,能够快速而精准地完成海报设计,不仅意味着时间的节省,更代表着工作效率的飞跃。…

玩转图像处理:Python与OpenCV实现高效绿幕背景替换

文章目录 前言色度抠图技术(Chroma Keying)基本原理 数据准备代码实现性能分析代码优化优化后的速度 前言 现阶段绿幕抠图有很多种方式,比如色度抠图(Chroma Keying)、亮度抠图(Luma Keying)、色…

win7系统安装高于13.14.0版本的node及遇到问题

背景 原项目是在win10系统上,使用的是node16.10.0版本,使用的vite开发,现在需要去客户现场进行开发,提供的电脑是win7系统,因为win7系统支持的最高版本node是13.14.0,所以我们需要降低node版本&#xff0c…

深化战略合作|义翘神州与百奥几何扩大合作:生成式AI深度赋能蛋白研发

近日,重组蛋白领军企业义翘神州与前沿数字生物企业百奥几何达成战略合作,将蛋白表达湿实验平台与生成式AI蛋白设计和改造有机结合。在前期项目成功合作的基础上,双方决定进一步深化合作,合力开拓高附加值市场需求。 当前&#xf…

opencv实战项目二十五:复杂背景下的直线提取

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、简介二,算法实现:2.1 中值滤波去噪2.2滤波图像取反并提取直线2.3 二值图细化2.4 对细化后的直线进行霍夫变换 前言 在当今计算机视…

超越想象的声音修复——iZotope RX 11,重塑音频处理的未来

iZotope RX 11是一款功能强大的音频修复和增强软件,专为音频后期制作、音乐制作和内容创作而设计。以下是其主要功能和用途的详细概述: iZotope RX 11 苹果Mac软件下载 iZotope RX 11 Windows软件下载 主要功能 智能降噪与修复: RX 11配备了…

ARM相关概念

ARM课程大纲 ARM相关的基本概念 机器码 计算机能够识别由1和0组成的编码格式 汇编:将汇编文件转换为二进制文件(.bin/.elf) 汇编指令 是一条具备特殊功能的指令 编译:生成汇编文件 int a 10; ------> mov r0 #10 …

Qt/C++ 了解NTFS文件系统,解析0x80 $Data属性,获取Run Lists数据列表

系列文章目录 整个专栏系列是根据GitHub开源项目NTFS-File-Search获取分区所有文件/目录列表的思路。 具体的如下: Qt/C 了解NTFS文件系统,了解MFT(Master File Table)主文件表(一) 介绍NTFS文件系统,对比通过MFT(Master File Tab…

springboot中小学数字化教学资源管理平台

基于springbootvue实现的中小学数字化教学资源管理平台 (源码L文ppt)4-078 第4章 系统设计 4.1 功能模块设计 系统整体模块分为管理员、教师和学生三大用户角色,整体功能设计图如下所示: 图4-1 系统整体功能图 4.2 数据库设计 4.2.1 E-R模…

工业交换机故障快速排查的方法有哪些

在现代工业自动化的环境中,工业交换机作为网络连接的重要设备,其稳定性和可靠性至关重要。然而,实际使用过程中难免会遇到各种故障,这对生产线和系统的正常运作造成了影响。为了有效应对这些问题,下面将介绍一些工业交…

CSRF高级防御绕过

1)回顾low级别做过csrf页面的密码重置,重复之前的操作,我们发现级别调整中级之后,报错如下 2)检查源码 进入dvwa源码,查找到checktoken: 3)在dvwa-csrf页面上,抓包 http…

前端开发者有福啦,循序渐进Vue.js 3.x前端开发实践已上线

目录 写在前面 推荐图书 推荐理由 写在最后 写在前面 好书推荐!前端开发者的福利来喽,《循序渐进Vue.js 3.x前端开发实践》,你值得拥有。 推荐图书 《循序渐进Vue.js 3.x前端开发实践》 推荐理由 《循序渐进Vue.js 3.x前端开发实践》…

介绍GPT-o1:一系列解决困难问题( science, coding, and math )的推理模型

openai o1介绍 一、官方技术报告要点剖析实验1 benchmark分析实验2:和phd比赛技术细节:Chain of Thought的使用人类偏好评估Human preference evaluationsatety技术细节:隐藏思维链为监控模型提供了机会:)openai的几点conclusion 二、官方介绍剖析 Intro…

【C语言进阶】第四节:自定义类型详解

1、结构体 1.1 结构体变量的定义和初始化 struct Point//类型声明 {int x;int y; }p1;//声明类型的同时定义变量p1struct Point p2;//定义结构体变量p2//初始化:定义变量的同时赋初值。 struct Point p3 { x, y };struct Node {int data;struct Point p;struct N…

端侧 AI 的新突破:面壁智能 MiniCPM 3.0

在人工智能领域,每一次技术的革新都可能引发一场小小的革命。 ChatGPT-3.5 曾经凭借其惊人的表现赢得了大众的关注,但如今,随着国内AI公司面壁智能推出的新端侧基座模型,人们开始重新审视端侧AI的潜力和未来。 这款名为MiniCPM …

Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具

目录 Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具 引言 一、什么是 Dockerfile 二、Dockerfile 的基本结构 三、Dockerfile 的常见配置项 1、多阶段构建 (Multi-stage Builds) 2、缓存优化 3、合并 RUN 命令 四、Dockerfile 使用…

C盘太臃肿了用这招一键给C盘瘦身 快速释放C盘空间

C盘太臃肿了用这招一键给C盘瘦身 快速释放C盘空间。我们的电脑不知不觉的就爆满了,这个主要的原因就是各种垃圾文件堆积,时间用得越久,垃圾堆积得越多,这样我们的C盘空间就被蚕食了,空间越来越小,变得越来越…

干货分享:为什么stable diffusion训练用ddpm, 采样用ddim呢?

前言 回忆一下DDPM,实质上它的推导过程应是如下的: 其中, 是单纯的高斯分布的推导,相当于一个序列过程的归纳法推导。 在DDPM中采用的是[贝叶斯公式]。 而过程则是用对进行一个估测,也就是用前向过程反过来对进行一个…