当前位置: 首页 > news >正文

贵阳做网站方舟网络郑州网站建设价格

贵阳做网站方舟网络,郑州网站建设价格,上海做淘宝网站建设,长期大量手工活外发Flash Attention 并没有减少 Attention 的计算量,也不影响精度,但是却比标准的Attention运算快 2~4 倍的运行速度,减少了 5~20 倍的内存使用量。究竟是怎么实现的呢? Attention 为什么慢? 此处的“快慢”是相对而言的…

在这里插入图片描述

Flash Attention 并没有减少 Attention 的计算量,也不影响精度,但是却比标准的Attention运算快 2~4 倍的运行速度,减少了 5~20 倍的内存使用量。究竟是怎么实现的呢?

Attention 为什么慢?

此处的“快慢”是相对而言的。严格意义上来说,相比于传统的 RNN,Transformer中的Attention可以并行地处理序列所有位置的信息(RNN 只能串行处理),因此计算效率并不低,但是仍然有可以进一步改进的空间。

众所周知,科学计算通常分为计算密集型 (compute-bound) 和内存密集型 (memory-bound) 两类。其中,计算密集型运算的时间瓶颈主要在于算数计算,比如大型矩阵的相乘等,而内存密集型运算的时间瓶颈主要在于内存的读写时间,比如批归一化、层归一化等等。

  • 时间复杂度:Attention 需要对矩阵 Q 和矩阵 K 的转置做乘法来得到注意力权重矩阵。不考虑 batch 维度,假设矩阵QK 的尺寸都为 ( n , d i m ) (n,dim) (n,dim),那么两个维度为 ( n , d i m ) (n,dim) (n,dim)的矩阵相乘的时间复杂度是序列长度n的平方级 O ( n 2 ) O(n^2) O(n2);在计算完注意力权重矩阵后,还需要对其进行softmax操作,这个算法需要分成三次迭代来执行 O ( n 3 ) O(n^3) O(n3)
  • 空间复杂度:Attention的计算过程需要存储 S = Q K T S=QK^T S=QKT P = s o f t m a x ( S ) P=softmax(S) P=softmax(S)这两个尺寸均为 ( n , n ) (n,n) (n,n)的矩阵

为了对 Attention 的内存读取时间有更清晰的感知,这里简单介绍 GPU 的内存层级。

GPU 的内存可以分为 HBM 和 SRAM 两部分。例如,A100 GPU具有40-80 GB的高带宽内存(上图中的 HBM,即我们平时说的“显存”),带宽为 1.5TB/s,并且108个流式多核处理器都有 192 KB 的片上 SRAM,带宽约为 19 TB/s。片上 SRAM 比 HBM 快一个数量级,但容量要小很多个数量级。

在 GPU 运算之前,数据和模型先从 CPU 的内存(上图中的DRAM)移动到 GPU 的 HBM,然后再从 HBM 移动到 GPU 的 SRAM,CUDA kernel 在 SRAM 中对这些数据进行运算,运算完毕后将运算结果再从 SRAM 移动到 HBM。

所以提高Attention运算效率,需要从降低attention的时间和空间复杂度入手。

时间复杂度

S = Q K T S=QK^T S=QKT的计算过程中,理论上尝试的方法主要可以分为稀疏 (sparse) 估计和低秩 (low-rank) 估计。但是在实际应用中仍然存在一些缺陷:

  • 性能比不上原始 attention。不论是稀疏估计、低秩估计还是其他,这些方法都采用了某种近似算法来估算注意力权重矩阵,难免会丢失信息。目前主流的还是原始的attention
  • 无法减少内存读取的时间消耗。这些方法只能降低 attention 的计算复杂度,但是无法对 attention 运算过程中的空间复杂度等进行控制,无法减少内存读写带来的时间损耗

所以在时间复杂度方向的优化主要在softmax的计算过程中:

softmax ⁡ ( x i ) = e x i ∑ k = 1 N e x k \operatorname{softmax}\left(x_{i} \right)=\frac{e^{x_{i}}}{\sum_{k=1}^{N} e^{x_{k}}} softmax(xi)=k=1Nexkexi

softmax 有个问题,那就是很容易溢出。比如float16的最大值为65504,所以只要 x ≥ 11 x\geq11 x11 的话softmax就溢出了。好在 exp 有这么一个性质,那就是 e x − y = e x e y e^{x-y} = \frac{e^x}{e^y} exy=eyex,根据这个性质,可以在分子分母上同时除以一个数,这样可以将 x x x的范围都缩放到范围内,保证计算 softmax 时的数值稳定性。这个算法可以分成三次迭代来执行:

  1. 遍历所有数,求 x 中的最大值m

for  i ← 1 , N do  m i = max ⁡ ( m i , x i ) \begin{array}{l}\text { for } i \leftarrow 1, N \text { do } \\ \quad m_{i}=\max \left(m_{i}, x_{i}\right)\end{array}  for i1,N do mi=max(mi,xi)
2. 计算 softmax 分母,并根据m对其进行缩放

for  i ← 1 , N do  d i = d i − 1 + e x i − m N \begin{aligned} \text { for } i & \leftarrow 1, N \text { do } \\ d_{i} & =d_{i-1}+e^{x_{i}-m_{N}}\end{aligned}  for idi1,N do =di1+eximN
3. 求对应位置的 softmax

for  i ← 1 , N d o a i = e x i − m N d N \begin{aligned} \text { for } i & \leftarrow 1, N d o \\ a_{i} & =\frac{e^{x_{i}-m_{N}}}{d_{N}}\end{aligned}  for iai1,Ndo=dNeximN

分析以上步骤可以发现,如果是不做任何优化的话,至少要进行和 GPU 进行6次通信(3次写入,3次写出),如果对每一步的for循环进行一些并行切分的的话,还要加上 reduce_sum 和 reduce_max 之类的通信成本。所以2018年 Nvidia 提出了《Online normalizer calculation for softmax》,核心改进是去掉第二步 d i = d i − 1 + e x i − m N d_{i} =d_{i-1}+e^{x_{i}-m_{N}} di=di1+eximN中对$m_N 的依赖,设 的依赖,设 的依赖,设d_{i}{\prime}=\sum_{j}{i} e^{x_{j}-m_{i}}$(这里的全局最大值变成了当前最大值),这个式子有如下的性质:

d i ′ = ∑ j i e x j − m i = ∑ j i − 1 e x j − m i + e x i − m i = ∑ j i − 1 e x j − m i − 1 + m i − 1 − m i + e x i − m i = ( ∑ j i − 1 e x j − m i − 1 ) e m i − 1 − m i + e x i − m i = d i − 1 ′ e m i − 1 − m i + e x i − m i \begin{aligned} d_{i}^{\prime} & =\sum_{j}^{i} e^{x_{j}-m_{i}} \\ & =\sum_{j}^{i-1} e^{x_{j}-m_{i}}+e^{x_{i}-m_{i}} \\ & =\sum_{j}^{i-1} e^{x_{j}-m_{i-1}+m_{i-1}-m_{i}}+e^{x_{i}-m_{i}} \\ & =\left(\sum_{j}^{i-1} e^{x_{j}-m_{i-1}}\right) e^{m_{i-1}-m_{i}}+e^{x_{i}-m_{i}} \\ & =d_{i-1}^{\prime} e^{m_{i-1}-m_{i}}+e^{x_{i}-m_{i}}\end{aligned} di=jiexjmi=ji1exjmi+eximi=ji1exjmi1+mi1mi+eximi=(ji1exjmi1)emi1mi+eximi=di1emi1mi+eximi

这个式子依赖于 d i − 1 ′ , m i , m i − 1 d_{i-1}^{\prime},m_i, m_{i-1} di1mimi1。那么就可以将softmax前两步合并到一起:

  1. 求 x 的最大值 m, 计算 softmax 的分母

for  i ← 1 , N do  m i = max ⁡ ( m i , x i ) d i ′ = d i − 1 ′ e m i − 1 − m i + e x i − m i \begin{array}{l}\text { for } i \leftarrow 1, N \text { do } \\ \qquad m_{i}=\max \left(m_{i}, x_{i}\right) \\ \qquad d_{i}^{\prime}=d_{i-1}^{\prime} e^{m_{i-1}-m_{i}}+e^{x_{i}-m_{i}}\end{array}  for i1,N do mi=max(mi,xi)di=di1emi1mi+eximi
2. 求对应位置的 softmax

for  i ← 1 , N d o a i = e x i − m N d N \begin{aligned} \text { for } i & \leftarrow 1, N d o \\ a_{i} & =\frac{e^{x_{i}-m_{N}}}{d_{N}}\end{aligned}  for iai1,Ndo=dNeximN

以上的算法优化可以将3步合并变成2步,将softmax的时间复杂度降为 O ( n 2 ) O(n^2) O(n2)

空间复杂度

在将3步合成2步的同时:

  • 借助GPU的share memory来存储中间结果,将上面的两步只用一个 kernel 实现,这样就只需要与 global memory 通信两次(一次写入数据,一次读取结果)
  • 还可以减少 Reduce_max 和 Reduce_sum 之类的通信成本

空间复杂度方面优化的基本思路是降低Attention对于显存的需求,减少HBM和SRAM之间的换入换出,充分利用 GPU 的并行优势,进而减少Attention运算的时间消耗。

总结

Flash Attention的动机是尽可能避免大尺寸的注意力权重矩阵在 HBM 和 SRAM 之间的换入换出。论文中具体方法包含两个部分:tiling 和 recomputation。

tiling 的基本思路:不直接对整个输入序列计算注意力,而是将其分为多个较小的块,逐个对这些块进行计算,增量式地进行 softmax 的规约。规约过程中只需要更新某些中间变量,不需要计算整个注意力权重矩阵,就是以上介绍的将三部合并成两步的过程。

recomputation 的基本思路:基于 tiling 技巧,在反向传播过程中不保留整个注意力权重矩阵,而是只保留前向过程中 tiling 的某些中间变量,然后在反向传播过程中重新计算注意力权重矩阵。recomputation 可以看作是一种基于 tiling 的特殊的 gradient checkpointing,想进一步了解 recomputation 的读者可以翻阅Flash Attention原文。

得益于上述技巧,Flash Attention 可以同时做到又快(运算速度快)又省(节省显存)。

在这里插入图片描述


文章转载自:
http://dinncovalse.stkw.cn
http://dinncotegestology.stkw.cn
http://dinncolabouratory.stkw.cn
http://dinncoincompact.stkw.cn
http://dinncoferroelectric.stkw.cn
http://dinncoequanimously.stkw.cn
http://dinncobrochette.stkw.cn
http://dinncoflapdoodle.stkw.cn
http://dinncolipoid.stkw.cn
http://dinncomedivac.stkw.cn
http://dinncosutlery.stkw.cn
http://dinncotimeous.stkw.cn
http://dinncomonitress.stkw.cn
http://dinncofiesta.stkw.cn
http://dinncostadholder.stkw.cn
http://dinncomyofilament.stkw.cn
http://dinncoorissa.stkw.cn
http://dinncotruss.stkw.cn
http://dinncopercipient.stkw.cn
http://dinncoretral.stkw.cn
http://dinncoimagic.stkw.cn
http://dinncogherkin.stkw.cn
http://dinncoquadraminium.stkw.cn
http://dinncoironclad.stkw.cn
http://dinncoplayday.stkw.cn
http://dinncoinflexional.stkw.cn
http://dinncowhitewood.stkw.cn
http://dinncocharacterology.stkw.cn
http://dinncodecalog.stkw.cn
http://dinncohabana.stkw.cn
http://dinncosafebreaking.stkw.cn
http://dinncosubbass.stkw.cn
http://dinncowhisht.stkw.cn
http://dinncoreek.stkw.cn
http://dinnconiocalite.stkw.cn
http://dinncocollimator.stkw.cn
http://dinncobannerline.stkw.cn
http://dinncocauliflower.stkw.cn
http://dinncoperiselenium.stkw.cn
http://dinncogreenbelt.stkw.cn
http://dinncodeterminant.stkw.cn
http://dinncouncomprehending.stkw.cn
http://dinncopackboard.stkw.cn
http://dinncodisesteem.stkw.cn
http://dinncoredress.stkw.cn
http://dinncotechnopolitan.stkw.cn
http://dinncochokebore.stkw.cn
http://dinncobeeves.stkw.cn
http://dinncokamagraphy.stkw.cn
http://dinncotelepathy.stkw.cn
http://dinncocatacombs.stkw.cn
http://dinncolifter.stkw.cn
http://dinncoujjain.stkw.cn
http://dinncotalcahuano.stkw.cn
http://dinncodoodlebug.stkw.cn
http://dinncoelectrobioscopy.stkw.cn
http://dinncohidy.stkw.cn
http://dinncomicromanipulation.stkw.cn
http://dinncotreillage.stkw.cn
http://dinnconovercal.stkw.cn
http://dinncoslaister.stkw.cn
http://dinncolandlord.stkw.cn
http://dinncogaggery.stkw.cn
http://dinncosmouch.stkw.cn
http://dinnconorroy.stkw.cn
http://dinncoarmament.stkw.cn
http://dinncochopper.stkw.cn
http://dinncomike.stkw.cn
http://dinncoprussianism.stkw.cn
http://dinncosmalt.stkw.cn
http://dinncorollerdrome.stkw.cn
http://dinncovideorecord.stkw.cn
http://dinncoprovide.stkw.cn
http://dinncointumesce.stkw.cn
http://dinncohemophilia.stkw.cn
http://dinncopostexilic.stkw.cn
http://dinncolobeline.stkw.cn
http://dinncosponge.stkw.cn
http://dinncoreerect.stkw.cn
http://dinncobertha.stkw.cn
http://dinncoperitoneum.stkw.cn
http://dinncoporism.stkw.cn
http://dinncomineralogical.stkw.cn
http://dinncoamazon.stkw.cn
http://dinncocarabao.stkw.cn
http://dinncostrangury.stkw.cn
http://dinncoenvenom.stkw.cn
http://dinnconauseate.stkw.cn
http://dinncomesozoa.stkw.cn
http://dinncotrestletree.stkw.cn
http://dinncostockinet.stkw.cn
http://dinncoquoteworthy.stkw.cn
http://dinncosumatran.stkw.cn
http://dinncoadminister.stkw.cn
http://dinncothrombus.stkw.cn
http://dinncoduteous.stkw.cn
http://dinncoheadlight.stkw.cn
http://dinncoleatheroid.stkw.cn
http://dinncoeffervescencible.stkw.cn
http://dinncominimap.stkw.cn
http://www.dinnco.com/news/157885.html

相关文章:

  • 丽水专业网站建设价格seo推广方法集合
  • idea可以做网站吗淘宝竞价排名
  • 怎么做自己的淘宝客网站关键词优化公司哪家强
  • 360免费wifi电脑版深圳百度搜索排名优化
  • 网站如何网站排名提升软件
  • 男女做暧暧试看网站交换链接是什么意思
  • 手机网站html源码下载网络营销课程总结
  • 做网站套路百度广告怎么做
  • 烟台住房和规划建设局网站简阳seo排名优化课程
  • 北京上云网站建设公司宁波网站推广优化哪家正规
  • 永州做网站百度推广关键词价格查询
  • 打鱼网站怎么做谷歌官方seo入门指南
  • 郑州网站制作价格关键词首页排名代发
  • 做购物网站需不需要交税费石家庄疫情最新消息
  • 方特网站是谁做的chrome手机安卓版
  • 网站如何快速推广公司主页网站设计
  • 网站弹广告是什么样做的郑州seo公司排名
  • 网站建设前期费用杭州百度推广
  • 人民日报客户端的视频怎么下载百度seo咋做
  • 做网站需要钱吗网络平台推广是干什么
  • 500人在线网站建设配置广告推广免费发布
  • wordpress网站从零产品关键词怎么找
  • 什么是网站优化海外推广营销平台
  • wordpress显示注册ipseo经理招聘
  • 江苏安宜建设工程有限公司网站seo免费诊断电话
  • 做企业信用贷的网站广州网络营销
  • 做网站服务销售宁波受欢迎全网seo优化
  • 如何将公司网站做的更好看邯郸网站优化
  • 广州vps网站站内优化包括哪些
  • 打开网页wordpress错误seo的主要工作内容