新闻与洞见

读懂FlashAttention-2:让长上下文注意力更高效地运行在GPU上

从Tri Dao的论文出发,解释分块计算、非矩阵乘法开销与GPU工作划分,并区分注意力内核加速和模型整体训练收益。

FlashAttention-2计算与GPU任务划分概念图
FlashAttention-2计算与GPU任务划分概念图

长输入的瓶颈也在数据搬运

Tri Dao于2023年7月17日向arXiv提交的FlashAttention-2研究,关注注意力计算在GPU上的执行方式。模型先将文本划分为token,再通过注意力比较其数值表示,确定信息的权重。常规实现会生成并存储庞大的分数矩阵和概率矩阵,序列越长,显存占用与数据搬运负担越大。

可以设想一个虚构的客服场景:用户询问已发货订单能否更改收货地址,系统需要联系很长的对话记录。该场景仅用于说明计算原理,不是论文实验,也不是特定服务的实际测试结果。即使GPU运算能力很强,计算单元长时间等待数据,仍难以充分发挥性能。

以虚构客服记录说明长对话的分块处理
以虚构客服记录说明长对话的分块处理

分块处理仍需保持全局归一化

将输入划分为小块,在高速片上存储中计算,并避免把完整中间矩阵写入HBM,是从初代FlashAttention继承的思路。在线softmax持续更新统计量和部分输出,并进行重新缩放,使结果保持对整个序列的归一化。若各块独立归一化后直接相加,就不是同一计算了。

用客服记录打比方,相当于在有限工作台上逐批处理便条,同时更新中间摘要。真实模型处理的是token的数值表示,而非插图中人为写出的判断。这属于精确注意力算法,而非稀疏近似;但浮点运算顺序变化仍可能产生微小误差。因此,实现验证是在数值容差内比较输出和梯度,并非保证逐比特相同。

提高GPU利用率的三项改进

第一,减少重新缩放、边界判断和因果掩码处理等非矩阵乘法操作,以更多利用GPU的高效矩阵计算单元。第二,除批次和注意力头之外,沿序列维度进一步划分工作。即使长输入使批量较小,也能让更多GPU计算单元参与执行。

第三,在前向计算中,将查询Q分配给不同warp,同时共享键K和值V。各warp负责自己的输出部分,从而减少通过共享内存交换、归约中间结果的开销。优化重点既包括计算步骤,也包括数据流动与并行任务安排。

“约两倍”应结合测试对象理解

作者在A100 80GB SXM4的注意力内核测试中,报告了相对初代FlashAttention约两倍的速度提升。实验覆盖512至约16k的序列长度、64和128的头维度,以及启用或不启用因果掩码的情况,批次总token数保持为16k。这一结果对应注意力计算本身。

另一组使用8张A100 80GB SXM4的GPT训练实验,整体训练速度最高约为原来的1.3倍,比较了13亿和27亿参数模型及约2k、8k的上下文长度。完整模型仍有其他计算和通信开销,不能据此承诺不同硬件上的聊天响应都快一倍。注意力运算量仍随序列长度呈平方增长,节省显存本身也不证明理解准确率提高。

把实现差异写成可核验的技术资料

在相同模型和输入下,应记录GPU型号、序列长度、批量大小、显存占用及实际耗时。还应区分首次处理长提示词的prefill与逐token生成的decode,两阶段的瓶颈可能不同。文中保留的原图是帮助理解上述原理的概念示意。

技术说明宜明确哪些中间矩阵不再落入显存、任务在哪里拆分,以及中间结果通信如何减少,并用流程图和受控对比实验支撑。IPLEX分析AI发明时,会关注具体实现及其效果;单凭基准测试更快,不能直接得出具备可专利性的结论。

阅读Tistory原文

了解AI专利业务

查看韩文原文

本文基于发表时的情况撰写。如需就具体事项咨询,请联系IPLEX。
咨询相关业务 ↗全部文章

与IPLEX探讨技术保护与知识产权布局的下一步。