LLM推理优化技术综述:KVCache、PageAttention、FlashAttention、MQA、GQA

2023-11-11

LLM推理优化技术综述:KVCache、PageAttention、FlashAttention、MQA、GQA

随着大模型被越来越多的应用到不同的领域,随之而来的问题是应用过程中的推理优化问题,针对LLM推理性能优化有一些新的方向,最近一直在学习和研究,今天简单总结下学习笔记。

PART01:自回归场景引发的KVCache问题

首先LLM推理的过程是一个自回归的过程,也就是说前i次的token会作为第i+1次的预测数据送入模型,拿到第i+1次的推理token。在这个过程中Transformer会执行自注意力操作,为此需要给当前序列中的每个项目(无论是prompt/context还是生成的token)提取键值(kv)向量。这些向量存储在一个矩阵中,通常被称为kv cache。kv cache是为了避免每次采样token时重新计算键值向量。利用预先计算好的k值和v值,可以节省大量计算时间,尽管这会占用一定的存储空间。

所以未来LLM推理优化的方案就比较清晰了,就是尽可能的减少推理过程中kv键值对的重复计算,实现kv cache的优化。目前减少KV cache的手段有许多,比如page attention、MQA、MGA等,另外flash attention可以通过硬件内存使用的优化,提升推理性能。

PART02:PageAttention显存优化

PageAttention是目前kv cache优化的重要技术手段,目前最炙手可热的大模型推理加速项目VLLM的核心就是PageAttention技术。在缓存中,这些 KV cache 都很大,并且大小是动态变化的,难以预测。已有的系统中,由于显存碎片和过度预留,浪费了60%-80%的显存。PageAttention提供了一种技术手段解决显存碎片化的问题,从而可以减少显存占用,提高KV cache可使用的显存空间,提升推理性能。

首先,PageAttention命名的灵感来自OS系统中虚拟内存和分页的思想。可以实现在不连续的空间存储连续的kv键值。

在这里插入图片描述

另外,因为所有键值都是分布存储的,需要通过分页管理彼此的关系。序列的连续逻辑块通过 block table 映射到非连续物理块。

在这里插入图片描述

另外,同一个prompt生成多个输出序列,可以共享计算过程中的attention键值,实现copy-on-write机制,即只有需要修改的时候才会复制,从而大大降低显存占用。

在这里插入图片描述

PART03:MHA\GQA\MQA优化技术

接下来是GQA和MQA优化技术,在LLAMA2的论文中,提到了相关技术用来做推理优化,目前GQA和MQA也是许多大模型推理研究机构核心探索的方向。

MQA,全称 Multi Query Attention, 而 GQA 则是前段时间 Google 提出的 MQA 变种,全称 Group-Query Attention。MHA(Multi-head Attention)是标准的多头注意力机制,h个Query、Key 和 Value 矩阵。MQA 让所有的头之间共享同一份 Key 和 Value 矩阵,每个头只单独保留了一份 Query 参数,从而大大减少 Key 和 Value 矩阵的参数量。GQA将查询头分成N组,每个组共享一个Key 和 Value 矩阵。

如上图,GQA以及MQA都可以实现一定程度的Key value的共享,从而可以使模型体积减小,GQA是MQA和MHA的折中方案。这两种技术的加速原理是(1)减少了数据的读取(2)减少了推理过程中的KV Cache。需要注意的是GQA和MQA需要在模型训练的时候开启,按照相应的模式生成模型。

PART04:FlashAttention优化技术

最后讲下Flash attention优化技术,Flash attention推理加速技术是利用GPU硬件非均匀的存储器层次结构实现内存节省和推理加速,它的论文标题是“FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness”。意思是通过合理的应用GPU显存实现IO的优化,从而提升资源利用率,提高性能。

首先我们要了解一个硬件机制,计算速度越快的硬件往往越昂贵且体积越小,Flash attention的核心原理是尽可能地合理应用SRAM内存计算资源。

A100 GPU有40-80GB的高带宽内存(HBM),带宽为1.5-2.0 TB/s,而每108个流处理器有192KB的SRAM,带宽估计在19TB/s左右。也就是说,存在一种优化方案是利用SRAM远快于HBM的性能优势,将密集计算尽放在SRAM,减少与HBM的反复通信,实现整体的IO效率最大化。比如可以将矩阵计算过程,softmax函数尽可能在SRAM中处理并保留中间结果,全部计算完成后再写回HBM,这样就可以减少HBM的写入写出频次,从而提升整体的计算性能。如何有效分割矩阵的计算过程,涉及到flash attention的核心计算逻辑Tiling算法,这部分在论文中也有详细的介绍。

以上是对于最近LLM模型推理优化方面新的一些技术点的学习和概况总结,感激引用的文章作者,这方面还有很多内容需要总结和进一步消化。

引用:

[1]大模型推理加速工具:vLLM - 知乎

[2]百度安全验证

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

[4]为什么现在大家都在用 MQA 和 GQA? - 知乎

[5]百度安全验证

[6]https://zhuanlan.zhihu.com/p/645376942

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LLM推理优化技术综述:KVCache、PageAttention、FlashAttention、MQA、GQA 的相关文章

  • 前端对接微信公众号网页开发流程,前期配置

    微信公众号网页开发 其实就是我们开发的h5网页需要放到微信浏览器环境中使用 但是需要对接公众号授权 授权之后可以获取到用户的个人信息 以及可以使用公众号提供的一些API 如 图片上传 图片预览 获取位置信息 微信扫一扫等功能 在没有对接正式
  • 分数蓝桥杯

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 1 1 1 2 1 4 1 8 每项是前一项的一半 如果一共有 2020 项 求这个和是多少 结果用分数表示出来 类似 当然 这只是加了前 22 项而已 分子
  • git克隆、git库管理(git权威指南笔记)

    对等工作区 1 git clone
  • 应急响应-Linux入侵排查

    0x00 前言 当企业发生黑客入侵 系统崩溃或其它影响业务正常运行的安全事件时 急需第一时间进行处理 使企业的网络信息系统在最短时间内恢复正常工作 进一步查找入侵来源 还原入侵事故过程 同时给出解决方案与防范措施 为企业挽回或减少经济损失

随机推荐

  • android 系统内置拍照功能

    启动系统内置拍照功能 Intent localIntent new Intent android media action IMAGE CAPTURE fileUri getOutputMediaFileUri MEDIA TYPE IMA
  • 5000并发的qps是多少_php高并发问题思路

    qps多少才算高并发 首先是无状态前端机器不足以承载请求流量 需要进行水平扩展 一般QPS是千级 然后是关系型数据库无法承载读取或写入峰值 需要数据库横向扩展或引入nosql 一般是千到万级 之后是单机nosql无法承载 需要nosql横向
  • 眼睛血管分割matlab版本

    matlab的代码仅供参考 实现过程基本按照python版本的眼睛血管分割来实现 其中 python版本眼睛血管分割详见 眼睛血管分割python版 clc clear all close all image imread D test D
  • 交换和--排序

    LeetCode 面试题 16 21 交换和 给定两个整数数组 请交换一对数值 每个数组中取一个数值 使得两个数组所有元素的和相等 返回一个数组 第一个元素是第一个数组中要交换的元素 第二个元素是第二个数组中要交换的元素 若有多个答案 返回
  • 常见排序算法及其对应的时间复杂度、空间复杂度

    常见排序算法及其对应的时间复杂度 空间复杂度 排序算法经过长时间演变 大体可以分为两类 内排序和外排序 在排序过程中 全部记录存放在内存 则成为内排序 如果排序过程中需要使用外存 则称为外排序 本文讲的都属于内排序 内排序有可以分为以下几类
  • [Codeforces] number theory (R1600) Part.7

    Codeforces number theory R1600 Part 7 题单 https codeforces com problemset page 1 tags number theory 2C1201 1600 1113B Sas
  • 实现vercel的反向代理和重定向

    实现 vercel 的反向代理和重定向 文章目录 实现 vercel 的反向代理和重定向 vercel简介 前言 反向代理 那么如何实现vercel的反向代理的呢 重定向 vercel简介 Vercel 是一家云服务提供商 旨在使 Web
  • linux永久修改分辨率1920 1080

    linux永久修改分辨率1920 1080 zzh ubuntu cvt 1920 1080 1920x1080 59 96 Hz CVT 2 07M9 hsync 67 16 kHz pclk 173 00 MHz Modeline 19
  • Centos7安装mysql8.0教程

    文章目录 一 卸载MySQL 1 关闭MySQL 2 查看安装的MySQL 3 卸载安装的MySQL 4 删除MySQL相关目录 5 删除my cnf 6 删除MySQL的默认密码 7 检查卸载情况 8 删除mariadb 的安装包 二 在
  • git从某个分支创建新分支

    如题 记录一下从某个分支创建新分支的方法 如从dev分支创建一个test分支 第一种 纯命令行的方式 第一步 切换到你指定的分支 如我要从dev上拉一个分支 代码一模一样 git checkout dev 第二步 拉取dev的最新代码 gi
  • 【数据结构】堆排序 (超详细)

    前言 前几次讲了如何构建一个堆以及TopK算法 那么这次给大家分享一下堆排序的两种方法 方法一 直接暴力解决 建一个小堆 把数组的数据依次push 随后每次Pop堆顶 放进数组里 不过该方法因为建堆有消耗 所以空间复杂度为 O N 步骤 1
  • docker镜像内文件和宿主机互相拷贝

    docker镜像内文件和宿主机互相拷贝 1 将本地文件拷贝到docker 镜像内 docker cp 本地路径 容器Id或name 容器目录 docker cp home alex jars jackson databind 2 12 3
  • vscode笔记——<body>标签

    一 标签及其内标签 标签表示 HTML 网页的主体部分 该标签的内容是做给用户看的 而一个 HTML 文件只能存在一个 标签 body中间就是写代码的区域 而在中多用 div 标签来进行内容填充 而 div 是HTML中最为常用的标签 在H
  • Idea设置.iml文件不显示的方案

    从git上拉取项目后 在不同的module中会自动生成一个 iml文件 之前一直对iml文件没有太多的关注 iml文件就是information of module记录当前module中的一些配置信息 插件组件 maven组件信息 以及相关
  • 华为OD机试 - 欢乐的周末(Python)

    题目描述 小华和小为是很要好的朋友 他们约定周末一起吃饭 通过手机交流 他们在地图上选择了多个聚餐地点 由于自然地形等原因 部分聚餐地点不可达 求小华和小为都能到达的聚餐地点有多少个 输入描述 第一行输入m和n m代表地图的长度 n代表地图
  • 线程池处理集合

    List
  • 美到极致是疯狂

    这是今天和校招新同事交流时的总结 希望校招新同事能够回顾 也能够写出自己的总结 一 什么是代码高手 你怎么证明自己是代码高手 知道许多代码技巧 JS炫彩技巧的人大有人在 你知道多少个 net函数 这一点都没有意义 你知道多少个新鲜IT名词
  • avalon define新老风格对比

    1 老风格 var array var vmdoel avalon define id function vm vm aa aaa vm bb bbb array push 10 avalon mix vm aa 2 cc 3 vm fun
  • python学习路线--从入门到入土

    入门技术博客 进阶自己挑选 入门基础 Python入门相对容易又可以干很多事 网站 运维 数据 爬虫等 是一门方便的工具语言 2016年TIOBE排名显示Python已经名列第四 成为脚本语言之首 国外的Youtube Instagram
  • LLM推理优化技术综述:KVCache、PageAttention、FlashAttention、MQA、GQA

    LLM推理优化技术综述 KVCache PageAttention FlashAttention MQA GQA 随着大模型被越来越多的应用到不同的领域 随之而来的问题是应用过程中的推理优化问题 针对LLM推理性能优化有一些新的方向 最近一