【FlashAttention】 FA2与FA1算法区别辨析

看了几篇关于FlashAttention2的文章,对于其中移除冗余的CUDA操作这个算法优化进行了一个综合梳理。

https://zhuanlan.zhihu.com/p/1993815603383902344

https://zhuanlan.zhihu.com/p/668888063

https://zhuanlan.zhihu.com/p/665170554

注意,第10行在部分文章中错写成了diag的逆,应该根据这篇文章的伪代码为准(推测是之前存在笔误,改了之后又重新上传了)。

这里FlashAttention2与FlashAttention1看起来有很大差别,推导如下;

  1. 首先比较重要的一点是,在FA2里,关于m, P的计算都没有mijm_{ij}mij, pijp_{ij}pij的概念,而是直接计算mim_imi和minewm_i^{new}minew,pip_ipi和pinewp_i^{new}pinew。因此此处的mijm_i^jmij就是FA1中的mijm_{ij}mij - minewm_i^{new}minew。另外此处的P也就是FA1中的emij−minew∗Pe^{m_{ij} - m_i^{new}} * Pemij−minew∗P。
  2. 另外第二个点,就是在中间的迭代中不计算L,只在最后一个迭代计算。
相关推荐
June`2 天前
并发内核执行
c++·人工智能·算法·cuda
Olafur_zbj3 天前
【AI】CUDA的新编程模型:tile编程模型
人工智能·cuda·tile
Lee_jerome3 天前
python神经网络编程入门(三十)——Transformer 从 RNN 到注意力:模型为什么需要“瞄一眼“
rnn·深度学习·nlp·transformer·attention·注意力机制·序列建模
(initial)5 天前
C-02. Cooperative Groups:安全分组、tile 集体与 coalesced 聚合
cuda
CAE3205 天前
基于CNN-BiLSTM-Attention的箱梁离散点温度预测
cnn·attention·bilstm
June`8 天前
warp shuffle指令
c++·人工智能·算法·cuda
June`9 天前
常量内存和只读缓存
c++·人工智能·算法·cuda
胖大和尚11 天前
在C++的类中,是否可以把函数声明成__device__
c++·cuda
(initial)13 天前
B-09. 数据布局(AoS/SoA/Transpose):一次布局调整带来的事务变化
cuda
一个小猴子`25 天前
Triton实现矩阵乘法
矩阵·cuda·triton