LLM推理--vLLM解读

news2025/2/6 8:23:44

主要参考:
vLLM核心技术PagedAttention原理

总结一下 vLLM 的要点:

  1. Transformer decoder 结构推理时需要一个token一个token生成,且每个token需要跟前序所有内容做注意力计算(包括输入的prompt和该token之前生成的token),一般为了避免重复计算,会保存prompt和前序token的 K,V (称为 KV Cache)。但随着大模型时代的到来,输入的 prompt 和生成的回答越来越长,使得 KV Cache 造成的内存压力越来越大。需要对内存使用进行优化。
  2. 常规的内存分配方式有以下痛点:
  1. 除了 prompt 部分是完全用满的,reservation frag 在还没有用到的时候是浪费了的(本来可以用来存一些临时变量),internal frag 是完全浪费的(而且batch数据中max_length越大,浪费越多)。至于内存碎片,一般是当多个小操作反复申请和释放内存时,很容易在内存池中形成多个大小不一的碎片。即使最终总内存足够,但如果需要一个较大的连续块,而内存池中只剩下若干零散的块,就会导致内存碎片问题(图中只是举例,真实情况并不是图示的那种每个request产生一个相同大小的内存碎片
  1. 采用 PagedAttention虚拟内存的分业管理技术,首先将 KV 分解成多个固定大小的页面(或称为“块”),同时将物理内存也按相同方式划分。这样对于1个进程,我们不需要静态加载它的全部代码、数据等内容。我们想用哪部分,或者它当前跑到哪部分,我们就动态加载这部分到虚拟内存上,然后由虚拟内存帮我们做物理内存的映射。这样通过分块计算,系统只需分配较小的内存块用于当前页面的计算,而不必一次性分配一个超大的连续内存区域。这在内存碎片较多时尤其有利,因为小块内存更容易在碎片化的内存池中找到连续区域。 因此有利于缓解或者说消化内存碎片。而对于 reservation frag 和 internal frag ,在传统方法中,它们属于预先分配的,还没用上的内存。而在分业管理技术中,reservation frag 在还没轮到时,不会预分配。internal frag 则由于不存在预分配,压根就不会存在了

  2. 由于分页管理技术是跑到哪,再动态加载这部分到内存,因此可能会出现显存已经打满,但一个batch的计算还没有全部完成的情况。针对这种情况,vLLM采用的是 先到的先算,如果没算完显存就被打满,则把后来的任务中断,并释放其 KV 占用的显存,供先来的任务算完。这里释放后来任务的 KV 占用,既可以是扔掉后面再重新算,也可以是先放到CPU 内存当中,后面再直接调用。因此虽然vLLM看似还是一个batch的数据输入,再返回一个batch的输出,但实际有可能这批数据有的是优先算好,才把资源释放给后面的数据算的

  3. vLLM还采用了 内存复用机制,例如:1.对于同样一个prompt,给出三种不同回答的场景,这个prompt的 KV 就可以在三个数据中都使用,而不用复制三份,即虽然虚拟内存上看是有三份,但这三份在物理内存上都指向一份,实际只消耗了一份内存。2. 在 beam search 场景,top k 的序列往往有很多前置 token 是相同的,这些也可以用类似上面的方法,即虚拟内存各占各的,但相同 token 的在物理内存上指向同一份。

最后,虽然vLLM看似只是通过节省内存提高推理吞吐量(可以用更大的batch),从而达到加速的目的。但除此之外,还有一些方面也加速了推理:

  1. 传统方法中,经常要分配大块的连续内存,容易因等待内存释放而出现延迟,而vLLM的分业管理技术,降低了大块内存分配的延迟开销
  2. 避免一次性在多个层次(全局内存、共享内存、寄存器)之间搬运大块数据,提高了内存带宽利用率和整体效率。而且通过分页,vLLM 可以在有限的 GPU 内存内高效管理和访问 KV 数据,确保注意力计算时数据能就近命中,从而提升整体计算速度。

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

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

相关文章

vscode软件操作界面UI布局@各个功能区域划分及其名称称呼

文章目录 abstract检查用户界面的主要区域官方文档关于UI的介绍 abstract 检查 Visual Studio Code 用户界面 - Training | Microsoft Learn 本质上,Visual Studio Code 是一个代码编辑器,其用户界面和布局与许多其他代码编辑器相似。 界面左侧是用于访…

一键开启/关闭deepseek

一键开启/关闭 Deepseek对应下载的模型一键开启 Deepseek,一键关闭Deepseek双击对应的bat,就可以启动https://mbd.pub/o/bread/Z56YmpZvbat 下载:https://mbd.pub/o/bread/Z56YmpZv 可以自己写下来,保存成bat文件,也可…

单纯接入第三方模型就无需算法备案了么?

随着人工智能技术的快速发展,越来越多的企业开始接入第三方模型以提升自身业务能力。然而,关于算法备案的问题也引发了诸多讨论,尤其是单纯接入第三方模型是否需要备案这一问题,更是让不少企业感到困惑。 一、明确算法备案的主体…

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下,我们来学习下图的中篇!!! 一、图的遍历 图的遍历指的是遍历图中的顶点,主要有 广度优先遍历 …

YK人工智能(六)——万字长文学会基于Torch模型网络可视化

1. 可视化网络结构 随着深度神经网络做的的发展,网络的结构越来越复杂,我们也很难确定每一层的输入结构,输出结构以及参数等信息,这样导致我们很难在短时间内完成debug。因此掌握一个可以用来可视化网络结构的工具是十分有必要的…

Gitea+Gridea 创建个人博客

历史文档存档,该方法目前已经无法使用,部署方法可供参考 Gitea部分 1.关于Gitea Gitea 是一个面向开源及私有软件项目的托管平台,是全球最大的代码托管平台之一。它采用 Git 分布式版本控制系统,为开发者提供了代码托管、版本控…

【Linux】一文带你入门了解线程和虚拟地址空间中页表映射的秘密(内附手绘底层逻辑图 通俗易懂)

绪论​ 每日激励:“努力去做自己该做的,但是不要期待回报,不是付出了就会有回报的,做了就不要后悔,不做才后悔。—Jack” 绪论​: 本章是LInux中非常重要的线程部分,通过了解线程的基本概念&am…

Flash Attention与Attention

原始Attention是: Flash Attention: 伪代码:4d(分别代表Q\K\V\O) Flash Attention2优化了

JAVA进阶之线程

为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…

机器学习专业毕设选题推荐合集 人工智能

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

C++ 中的 `string` 类型:全面解析与高效操作

C 中的 string 类型:全面解析与高效操作 在 C 中,string 类型是对字符数组的高级封装,它提供了大量内置函数,使得字符串的处理变得更为简便和高效。与 C 风格的字符数组不同,string 类型不仅自动管理内存,…

Java入门进阶

文章目录 1、常用API 1.1、Math1.2、System1.3、Object1.4、Arrays1.5、基本类型包装类 1.5.1、基本类型包装类概述1.5.2、Integer1.5.3、int和String相互转换1.5.4、自动装箱和拆箱 1.6、日期类 1.6.1、Date类1.6.2、SimpleDateFormat类 1.6.2.1、格式化(从Date到…

C#结合html2canvas生成切割图片并导出到PDF

目录 需求 开发运行环境 实现 生成HTML范例片断 HTML元素转BASE64 BASE64转图片 切割长图片 生成PDF文件 小结 需求 html2canvas 是一个 JavaScript 库,它可以把任意一个网页中的元素(包括整个网页)绘制到指定的 canvas 中&#xf…

485网关数据收发测试

目录 1.UDP SERVER数据收发测试 使用产品: || ZQWL-GW1600NM 产品||【智嵌物联】智能网关型串口服务器 1.UDP SERVER数据收发测试 A(TX)连接RX B(RX)连接TX 打开1个网络调试助手,模拟用户的UDP客户端设…

InnoDB和MyISAM的比较、水平切分和垂直切分、主从复制中涉及的三个线程、主从同步的延迟产生和解决

InnoDB和MyISAM的比较 事务支持: InnoDB支持:支持事务 (ACID 属性)。支持 Commit、Rollback 和 Savepoint 操作。适合需要事务处理的应用,例如银行系统。MyISAM:不支持事务。每次操作都是自动提交,不能回滚或中止。适合对事务要求…

JDK9新特性

文章目录 新特性:1.模块化系统使用模块化module-info.java:exports:opens:requires:provides:uses: 2.JShell启动Jshell执行计算定义变量定义方法定义类帮助命令查看定义的变量:/var…

基于Ubuntu2404搭建Zabbix7.2

Zabbix 搭建zabbix zabbix7.2已推出:官网 增加的新功能如下: 1.使用新的热门商品小部件全面概览指标 数据概览小部件已转换为热门项目小部件使用项目模式可以实现细粒度的项目选择利用条形图、指标和迷你图来可视化您的数据定义价值阈值以动态地可视化…

Math Reference Notes: 符号函数

1. 符号函数的定义 符号函数(Sign Function) sgn ( x ) \text{sgn}(x) sgn(x) 是一个将实数 ( x ) 映射为其 符号值(即正数、负数或零)的函数。 它的定义如下: sgn ( x ) { 1 如果 x > 0 0 如果 x 0 − 1 如…

【数据结构】链表应用-链表重新排序

重新排序 反转链表预期实现思路解题过程code力扣代码核心代码完整代码 总结 删除链表中间节点代码解惑 链表重新排序题目描述解题思路解题过程复杂度代码力扣代码完整代码 反转链表 预期实现 思路 你选用何种方法解题? 我选用了迭代法来反转链表。这是一种经典且高…

学习threejs,pvr格式图片文件贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…