周报4_YMK

news2024/11/23 15:52:05

FlashAttention

硬件知识

以 A100 (40GB HBM) 为例,下面显示其内存层次结构的粗略图。SRAM内存分布在108个流式多处理器(SMs)上,每个处理器192KB。片上SRAM比HBM快得多,但比HBM小得多,在计算方面,使用Tensor Core的BFLOAT16 的理论峰值吞吐量为 312 TFLOPS。GPU 的典型操作方式是使用大量的线程来执行一个操作,这个操作被称为内核。输入从HBM加载到寄存器和SRAM,并在计算后写回HBM。

在这里插入图片描述

算法对于内存带宽的需求通常使用 计算强度 (arithmetic intensity) 来表示,单位是 OPs/byte。意思是在算法中平均每读入单位数据,能支持多少次运算操作。它有助于理解操作的瓶颈,即计算约束(Compute-bound)或带宽约束(Bandwidth-bound, or Memory-bound)。

  • 算力 π \pi π :也称为计算平台的性能上限,指的是一个计算平台倾尽全力每秒钟所能完成的浮点运算数。单位是 FLOPS or FLOP/s
  • 带宽 β \beta β :也即计算平台的带宽上限,指的是一个计算平台倾尽全力每秒所能完成的内存交换量。单位是Byte/s
  • 计算强度上限 I m a x = π β I_{max}=\frac{\pi}{\beta} Imax=βπ :两个指标相除即可得到计算平台的计算强度上限。它描述的是在这个计算平台上,单位内存交换最多用来进行多少次计算。单位是FLOPs/Byte
  • 模型的理论性能 P P P我们最关心的指标,即模型在计算平台上*所能达到的每秒浮点运算次数(理论值)*。单位是FLOPSorFLOP/s

如下图所示,Roof-line 描述了模型在一个计算平台的限制下,到底能达到多快的浮点计算速度,即算力决定“屋顶”的高度(绿色线段),带宽决定“房檐”的斜率(红色线段)。

在这里插入图片描述

Roof-line 划分出的两个瓶颈区域,即
在这里插入图片描述

  • 计算约束——此时HBM访问所花费的时间相对较低,不管模型的计算强度 I I I 有多大,它的理论性能 P P P 最大只能等于计算平台的算力 π \pi π。例如,具有较大内维数的矩阵乘法和具有大量通道的卷积。
  • 带宽约束——当模型的计算强度 I I I 小于计算平台的计算强度上限 I m a x I_{max} Imax 时,由于此时模型位于“房檐”区间,因此模型理论性能 P P P 的大小完全由计算平台的带宽上限 β \beta β(房檐的斜率)以及模型自身的计算强度 I I I 所决定。例如,逐元素操作 (如activation, dropout 等) 和 规约操作 (如sum, softmax, batch normalization, layer normalization等)。

在 self-attention 中,计算速度比内存速度快得多,因此进程(操作)越来越多地受到内存(HBM)访问的瓶颈。因此,FlashAttention论文的目标是尽可能高效地使用SRAM来加快计算速度。

标准Attention

A t t r n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attrntion(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attrntion(Q,K,V)=softmax(dk QKT)V

其中 Q , K , V ∈ R n × d Q,K,V\in \Bbb{R}^{n\times d} Q,K,VRn×d,$ N$ 表示序列长度, d d d 表示维度

一些中间变量 S = Q K T ∈ R N × N S=QK^T \in \Bbb{R}^{N\times N} S=QKTRN×N, P = s o f t m a x ( S ) ∈ R N × N P=softmax(S) \in \Bbb{R}^{N\times N} P=softmax(S)RN×N, O = P V ∈ R N × d O=PV \in \Bbb{R}^{N\times d} O=PVRN×d

标准的 self-attention 需要反复的对 HBM 进行读写

在这里插入图片描述

FlashAttention

在标准Attention中,一种方式是将Mask和SoftMax部分融合,以减少访存次数。然而,FlashAttention则更加激进,它将从输入 Q , K , V \mathbf{Q}, \mathbf{K}, \mathbf{V} Q,K,V到输出 O \mathbf{O} O的整个过程进行融合,以避免 S , P \mathbf{S}, \mathbf{P} S,P矩阵的存储开销,实现端到端的延迟缩减。然而,由于输入的长度 N N N通常很长,无法完全将完整的 Q , K , V , O \mathbf{Q}, \mathbf{K}, \mathbf{V},\mathbf{O} Q,K,V,O及中间计算结果存储在SRAM中。因此,需要依赖HBM进行访存操作,与原始计算延迟相比没有太大差异,甚至会变慢(没具体测)。

为了让计算过程的结果完全在SRAM中,摆脱对HBM的依赖,可以采用分片操作,每次进行部分计算,确保这些计算结果能在SRAM内进行交互,待得到对应的结果后再进行输出。

这个过程中,有一点需要注意的是,之前对于softmax的计算是以行为单位的,如下所示:

m ( x ) : = max ⁡ i x i , f ( x ) : = [ e x 1 − m ( x ) … e x B − m ( x ) ] , ℓ ( x ) : = ∑ i f ( x ) i , softmax ⁡ ( x ) : = f ( x ) ℓ ( x ) \begin{equation} m(x):=\max _i x_i, \quad f(x):=\left[\begin{array}{lll} e^{x_1-m(x)} & \ldots & e^{x_B-m(x)} \end{array}\right], \quad \ell(x):=\sum_i f(x)_i, \quad \operatorname{softmax}(x):=\frac{f(x)}{\ell(x)} \end{equation} m(x):=imaxxi,f(x):=[ex1m(x)exBm(x)],(x):=if(x)i,softmax(x):=(x)f(x)

当我们将输入进行分片后,无法对完整的行数据执行Softmax操作。这是因为Softmax函数在计算时需要考虑整个行的数据。然而,我们可以通过如下所示增量的方法来获得与完整行Softmax相同的结果,而无需使用近似操作。

m ( x ) = m ( [ x ( 1 ) x ( 2 ) ] ) = max ⁡ ( m ( x ( 1 ) ) , m ( x ( 2 ) ) ) , f ( x ) = [ e m ( x ( 1 ) ) − m ( x ) f ( x ( 1 ) ) e m ( x ( 2 ) ) − m ( x ) f ( x ( 2 ) ) ] , ℓ ( x ) = ℓ ( [ x ( 1 ) x ( 2 ) ] ) = e m ( x ( 1 ) ) − m ( x ) ℓ ( x ( 1 ) ) + e m ( x ( 2 ) ) − m ( x ) ℓ ( x ( 2 ) ) , softmax ⁡ ( x ) = f ( x ) ℓ ( x ) . \begin{equation} \begin{aligned} & m(x)=m\left(\left[x^{(1)} x^{(2)}\right]\right)=\max \left(m\left(x^{(1)}\right), m\left(x^{(2)}\right)\right), \quad f(x)=\left[\begin{array}{ll} e^{m\left(x^{(1)}\right)-m(x)} f\left(x^{(1)}\right) & e^{m\left(x^{(2)}\right)-m(x)} f\left(x^{(2)}\right) \end{array}\right], \\ & \ell(x)=\ell\left(\left[x^{(1)} x^{(2)}\right]\right)=e^{m\left(x^{(1)}\right)-m(x)} \ell\left(x^{(1)}\right)+e^{m\left(x^{(2)}\right)-m(x)} \ell\left(x^{(2)}\right), \quad \operatorname{softmax}(x)=\frac{f(x)}{\ell(x)} . \end{aligned} \end{equation} m(x)=m([x(1)x(2)])=max(m(x(1)),m(x(2))),f(x)=[em(x(1))m(x)f(x(1))em(x(2))m(x)f(x(2))],(x)=([x(1)x(2)])=em(x(1))m(x)(x(1))+em(x(2))m(x)(x(2)),softmax(x)=(x)f(x).

FlashDecoding

然而,上述优化不适合直接应用于推理过程。因为在训练过程中,FlashAttention对batch size和query length进行了并行化加速。而在推理过程中,batchsize通常为1, 导致FlashAttention对GPU利用率非常低

在这里插入图片描述

且FlashAttention是按顺序更新output的,因为 O ( 2 ) O^{(2)} O(2)的计算过程依赖 O ( 1 ) O^{(1)} O(1),有一个获取上一个块的最大值的过程。

Flash-Decoding在此基础上增加了一个新的并行化维度:keys/values的序列长度。即使batch size很小,但只要上下文足够长,它就可以充分利用GPU。与FlashAttention类似,Flash-Decoding几乎不用额外存储大量数据到全局内存中,从而减少了内存开销。
在这里插入图片描述

这一切之所以可行,都是因为注意力 softmax 可以进行迭代计算。在 Flash-Decoding 中,它在两个级别上被使用:在分块内部(类似 FlashAttention),以及跨分块进行最终的归约计算。

代码方面

还在跑和看Medusa头的代码

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

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

相关文章

【ARFoundation学习笔记】ARFoundation基础(上)

写在前面的话 本系列笔记旨在记录作者在学习Unity中的AR开发过程中需要记录的问题和知识点。难免出现纰漏,更多详细内容请阅读原文。 本文从原文第二章开始 文章目录 ARFoundation的体系Subsystem的使用跟踪子系统 ARSession & AR Session OriginARSessionARSe…

多目标优化中的“latent action”是什么?

2020 NeurIPS 中的“latent action”: Our model defines latent action as a boundary that splits the region represented by a node into a high-performing and a low performing region. 这里的latent action代表一个边界(分类器)&…

4 网络基础知识

1、 ifconfig: 1.Windows:ipconfig 2.Linux:ifconfigip addr2、 ifconfig 和 ip addr 的区别? 问题:假设你登录进入一个被裁剪过的非常小的 Linux 系统中,发现既没有 ifconfig 命令,也没有 ip…

CCF-CSP真题《202309-2 坐标变换(其二)》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202309-2试题名称:坐标变换(其二)时间限制:2.0s内存限制:512.0MB问题描述: 问题描述 对于平面直角坐标…

【Mybatis小白从0到90%精讲】13: Mybatis sql片段,重用SQL的利器!

文章目录 前言SQL片段语句常见应用场景1. select 列字段2. where条件前言 代码复用是优秀程序员的标志之一,它能够减少代码冗余,提高代码可读性和可维护性。 在MyBatis开发中,Mapper中经常会有一些类似的SQL,如果每个语句都单独编写,会使代码冗长且难以维护。 MyBatis提…

Magics测量两个圆形中心点距离的方法

摘要:本文介绍如何使用magics测量两个圆孔之间的距离。 问题来源:3D模型打开后,两个圆孔中心点之间的间距测量无法直接通过测距实现,需要进行一些小小的设置才行。 工具选择“量尺”,如果不设置的话,它会默…

有关我自贡大盐商身世的两篇文章(一)

重游高坑岩瀑布随笔 都市噪杂喧嚣的生活,终于将我暂时逼离网络,决意出游数日,去山里寻找我向往的那些足以鼓舞人斗志的壮观瀑布,并试图从中领受它们那出自天然的,万马奔腾、猛烈撞击、拚抢速度、渲泄激情、永不妥协、…

【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度

文章目录 5.1 树的基本概念5.1.1 树的定义树有序树、无序树 5.1.2 森林的定义5.1.3 树的术语1. 父亲(parent)、儿子(child)、兄弟(sibling)、后裔(descendant)、祖先(anc…

【软件测试】工作内容

测试工程师工作: 阶段:编写测试计划测试用例、测试缺陷报告并执行测试用例;搭建Windows测试环境熟练;使用Bugzilla 提交软件缺陷报告 使用测试技术及工具:白盒测试黑盒测试 Loadrunner、Winrunner 能够运用边界值、等…

go-sync-mutex

Sync ​ Go 语言作为一个原生支持用户态进程(Goroutine)的语言,当提到并发编程、多线程编程时,往往都离不开锁这一概念。锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多…

【CMake】15分钟带你入门CMake

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

[黑马程序员SpringBoot2]——运维实用篇

目录: 工程打包与运行打包插件Boot工程快速启动(Linux版本)临时属性配置文件4级分类自定义配置文件多环境开发(yaml版)多环境开发多文件版(yaml版)多环境开发多文件版(properties版)多环境分组…

基于AOSP源码Android-10.0.0_r41分支编译,framework开发,修改系统默认字体大小

文章目录 基于AOSP源码Android-10.0.0_r41分支编译,framework开发,修改系统默认字体大小 基于AOSP源码Android-10.0.0_r41分支编译,framework开发,修改系统默认字体大小 主要修改一个地方就行 代码源码路径 frameworks/base/co…

直流无刷电机(BLDC)六步换相驱动

直流无刷电机(BLDC)六步换相驱动 文章目录 直流无刷电机(BLDC)六步换相驱动1. 前言2. 六步换相原理3. 电角度与机械角度4. 动手实践4.1 霍尔输出表测量4.2 换向控制4.3 代码编写 5. 总结 1. 前言 直流无刷电机相对直流有刷电机具…

AOE性能调优问题案例

AOE(Ascend Optimization Engine)是一款自动性能调优工具,目的是为了充分利用有限的硬件资源,满足算子和整网的性能要求。 本期就分享几个关于AOE性能调优问题的典型案例,并给出原因分析及解决方法。 调优过程中进程…

Mysql之多表查询上篇

Mysql之多表查询上篇 多表查询什么是多表查询笛卡尔积(交叉连接)产生笛卡尔积的条件避免笛卡尔积的方法 多表查询的分类1.等值连接 VS 非等值连接等值连接非等值连接扩展1表的别名扩展2:连接多个表 2.自连接与非自连接扩展3:SQL语法标准 内连接SQL92语法…

【大模型应用开发教程】04_大模型开发整体流程 基于个人知识库的问答助手 项目流程架构解析

大模型开发整体流程 & 基于个人知识库的问答助手 项目流程架构解析 一、大模型开发整体流程1. 何为大模型开发定义核心点核心能力 2. 大模型开发的整体流程1. 设计2. 架构搭建3. Prompt Engineering4. 验证迭代5. 前后端搭建 二、项目流程简析步骤一:项目规划与…

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(二)

目录 前言1. YOLOv7-PTQ量化流程2. 模型标定3. 敏感层分析 前言 手写 AI 推出的全新 TensorRT 模型量化实战课程,链接。记录下个人学习笔记,仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 TensorRT下的模型量化,在其课程的基…

el-tree中展示项换行展示

文章目录 效果如下所示:没有换行展示的效果修改样式换行之后的展示效果 想要了解el-tree使用的详情往下看代码和数据如下所示Vue代码中可能使用到的数据如下Vue的代码如下:没有换行展示的效果换行之后的展示效果样式调试 效果如下所示: 没有…

仅以此文,纪念毕业一年后的日子

22年6月份从华农毕业了之后,拿到了好几份不错的offer,最后我进入了我学生时代十分憧憬的一家公司(腾讯)工作,加上实习的时间,已经在腾讯差不多工作了两年了。 从一开始实习的时候的懵懂学生气到现在的清醒…