vLLM大模型推理加速方案原理(PagedAttention)

news2025/1/23 4:09:07

在这里插入图片描述

一、vLLM 简介

vLLM 用于大模型并行推理加速,核心是 PagedAttention 算法,官网为:https://vllm.ai/。

在这里插入图片描述

vLLM 主要特性:

  1. 先进的服务吞吐量
  2. 通过 PagedAttention 对注意力 key 和 value 进行内存管理
  3. 对传入请求的批处理
  4. 针对 CUDA 内核的优化

vLLM 灵活易用:

  1. 与 HuggingFace 模型无缝集成
  2. 支持并行采样、beam search 等解码算法的高吞吐量服务
  3. 支持分布式推理的张量并行
  4. 支持流式输出
  5. 兼容 OpenAI 的接口服务

服务吞吐量对比:单路输出
图 - 服务吞吐量对比:单路输出
在这里插入图片描述
图 - 服务吞吐量对比:3 路并行输出

二、vLLM 原理

PagedAttention 原理(一)

用于自回归生成的 KV cache 占大量显存,受OS中的虚拟内存和分页的思想启发,提出了该 attention 优化算法,可在不连续的显存空间存储连续的 key 和 value。用于将每个序列的 KV cache 分块(blocks),每块包含固定数量的 token 的 key 和 value 张量。
在这里插入图片描述
动图☝️:以 for 的 attention计算为例。KV cache 被划分为多个块,块在内存空间中不必连续

PagedAttention 原理(二)

因为 blocks 在显存中不必连续,所以可以像 OS 的虚拟内存分页一样,以更灵活的方式管理键和值:

  • 将 block 视为 page
  • 将 token 视为 bytes
  • 将序列视为进程

序列的连续逻辑块通过 block table 映射到非连续物理块。
物理块可在生成新 token 时按需分配。因此只有最后一个block会发生显存浪费,小于4%。
在这里插入图片描述
动图☝️:通过 block table 将逻辑块映射到物理块

PagedAttention 原理(三)

并行采样时,同一个 prompt 生成多个输出序列,这些序列生成时可以共享 prompt 的 attention 计算和显存。
与 OS 中进程共享物理 page 的方式类似,不同序列可以通过将其逻辑块映射到同一物理块来共享块。为了确保共享安全,Paged Attention 跟踪物理块的引用计数,并实现 “写时复制”(Copy-on-Write)机制,即需要修改时才复制块副本。内存共享使得显存占用减少 55%,吞吐量提升 2.2x。

写时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。

在这里插入图片描述
动图☝️:并行采样生成时的引用计数和 Copy-on-Write

三、内部模型实测

在这里插入图片描述
硬件:单卡A100(80G)
模型:内部 7B 模型
测试工具:Apache JMeter
实验结论:vLLM 加速 7.44 倍

指标解释:

# Samples :总请求数(样本个数)
Throughput :吞吐量(Request/Sec),即每秒处理的请求数
Average :平均响应时间(ms)
Received KB/sec :每秒从服务器端接收到的数据量(字节)
Sent KB/sec :每秒向服务器发送数据量(字节)

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

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

相关文章

纯代码和低代码的本质区别

一、前言 纯代码和低代码是现代软件开发中两种不同的方法。 纯代码需要专业的编程技能,掌握编程语言、算法和数据结构等专业知识。而低代码则是一种新兴的开发方法,它大大降低了对编程技能的要求,让非技术人员也能够创建应用程序。随着低代码…

【SpringBoot】--03.数据访问、基础特性(外部化和内部外配置、整合JUnit)

文章目录 SpringBoot3-数据访问1.整合SSM场景1.1创建SSM整合项目1.2配置数据源1.3配置MyBatis1.4CRUD编写 2.自动配置原理3.扩展:整合其他数据源3.1 Druid 数据源 SpringBoot3-基础特性1. SpringApplication1.1 自定义 banner1.2.自定义 SpringApplication1.3Fluent…

nvm 管理node 环境配置

nvm安装: nvm(Node Version Manager)是一个用来管理node版本的工具。我们之所以需要使用node,是因为我们需要使用node中的npm(Node Package Manager),使用npm的目的是为了能够方便的管理一些前端开发的包!…

ColorOS凭什么夺冠?

摘要:五大主流安卓系统流畅度PK,谁的体验最好? 评价一款手机,你最先看的是什么? 是处理器平台?CPU核心频率?还是内存配置? 虽然这些硬件参数能够清晰地反映几款不同配置手机之间的性…

20230712-----阻塞IO驱动按键控制LED灯的亮灭

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/cdev.h> #include <linux/slab.h> #include <linux/uaccess.h> #include <linux/of.h> #in…

TeeChart for.NET Crack

TeeChart for.NET Crack TeeChart for.NET为各种图表需求提供了图表控件&#xff0c;包括金融、科学和统计等重要的垂直领域。它可以处理您的数据&#xff0c;在各种平台上无缝创建信息丰富、引人入胜的图表&#xff0c;包括Windows窗体、WPF、带有HTML5/Javascript渲染的ASP.N…

敢不敢和AI比猜拳?能赢算我输----基于手势识别的AI猜拳游戏【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目

功能演示 摘要&#xff1a;手势识别是一种通过技术手段识别视频图像中人物手势的技术。本文详细介绍了手势识别实现的技术原理&#xff0c;同时基于python与pyqt开发了一款带UI界面的基于手势识别的猜拳游戏。手势识别采用了mediapipe的深度学习算法进行手掌检测与手部的关键点…

字符设备驱动开发(最初方式)

目录&#xff1a; 1.字符设备驱动简介2.字符设备驱动开发步骤2.1. 驱动模块的加载与卸载2.2. Makefile的编写2.3.字符设备的注册与注销2.3.1.设备号的组成2.3.2.设备号的分配 2.4.具体操作函数的实现2.4.1.进行打开和关闭操作2.4.2.对chrdev进行读写操作 3.具体程序的实现3.1.驱…

第十一章——使用类

运算符重载 运算符重载是一种形式的C多态。之前介绍过的函数重载&#xff08;定义多个名称相同但特征标不同的函数&#xff09;让程序员能够用同名的函数来完成相同的基本操作&#xff0c;即使这些操作被用于不同的数据类型。 运算符重载将重载的概念扩展到运算符上&#xff0…

gulimall-性能监控与压力测试

性能监控与压力测试 前言一、性能监控1.1 jvm 内存模型1.2 jvisualvm 作用1.3 监控指标 二、压力测试2.1 概念2.2 性能指标2.3 JMeter 压测工具 前言 本文继续记录B站谷粒商城项目视频 P141-150 的内容&#xff0c;做到知识点的梳理和总结的作用。 一、性能监控 1.1 jvm 内存…

灯具小程序怎么制作

灯具小程序怎么制作&#xff0c;有什么功能 1. 商品展示&#xff1a;灯具小程序商城提供了丰富多样的灯具产品&#xff0c;并通过清晰的商品展示页面展示给用户。用户可以浏览不同种类的灯具&#xff0c;包括吊灯、台灯、壁灯等&#xff0c;了解产品的图片、规格、价格等详细信…

python 文件夹py文件相互引用

文章目录 前言Python文件相互调用情况一&#xff1a;同级文件情况二&#xff1a;非同级文件上层调用下层下层调用上层sys.path.append(.)详细测试同名测试引入结论 跨文件夹调用 总结 前言 我之前学过一些别的语言&#xff0c;例如Java,C#,JS。所以我上手python还是挺快的&…

Threejs模型切片转3DTiles加载

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。获取模型或源码请点赞收藏加留言&#xff0c;有问…

Scala中的集合

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 一、集合简介 二、集合关系继承图 一、集合简介 Java中的集合&#xff1a; Scala中的集合&#xff1a; Scala的集合有三大类&#xff1a;序列Seq、集Set、映射Map&#xff0c;所有的集合…

Vue3+Vite+Pinia+Naive后台管理系统搭建之七:utils 工具构建

前言 如果对 vue3 的语法不熟悉的&#xff0c;可以移步Vue3.0 基础入门&#xff0c;快速入门。 1. cookie 保存工具 1.1 安装依赖 yarn add js-cookie // or npm install js-cookie 1.2 编写 src/utils/cookie.js // src/utils/cookie.js import Cookies from "js-co…

操作系统_计算机系统

目录 1. 操作系统的基本概念 1.1 操作系统的特征 1.1.1 并发&#xff08;Concurrence&#xff09; 1.1.2 共享&#xff08;Sharing&#xff09; 1.1.3 虚拟&#xff08;Virtual&#xff09; 1.1.4 异步&#xff08;Asynchronism&#xff09; 1.2 操作系统的目标和功能 …

FIR滤波器与IIR滤波器的区别与特点

目录 FIR滤波器与IIR滤波器的区别与特点 FIR滤波器定义&#xff1a; 特点&#xff1a; IIR滤波器定义&#xff1a; 特点&#xff1a; 区别&#xff1a; IIR滤波器有以下几个特点&#xff1a; IIR与FIR数字滤波器的比较&#xff1a; 1、从性能上比较 2、从结…

Firewalld防火墙 图形和字符

目录 字符界面 一、防火墙介绍 二、防火墙的基本应用 将防火墙接口划分到区域中 区域添加访问规则 图形界面 字符界面 安装图形化防火墙管理工具 [rootbogon ~]# yum -y install firewall-config 一、防火墙介绍 1、netfilter和防火墙管理工具 1&#xff09;netfilter …

Unity Obfuscator 过滤指定目录下的所有类

视频 Unity Obfuscator 过滤指定目录下的所有class 源码 替换调 OptionsManager 脚本文件就可以了 using System.Collections.Generic; using UnityEngine; using UnityEditor;

Tomcat查看源码

比如需要从请求域拿数据 点击右上角的Choose Sources 找到对应源码的位置 源码 下载Tomcat源码 http://tomcat.apache.org 下载指定版本Tomcat https://archive.apache.org/dist/tomcat/ 下载下来解压即可