FlashAttention 在昇腾NPU上的极致优化
刚接触 FlashAttention 那会我被一个困惑砸懵了明明 Attention 机制的计算量已经是 O(n²) 了业界还在拼命优化它图什么直到我看见一组数据才明白——训练一个 1750 亿参数的 GPT-3光是 Attention 计算就要消耗 60% 的算力。这东西要是跑得慢整个模型就是摆设。为什么标准 Attention 是个内存吞金兽传统 Attention 的问题不在计算量在于它来来回回读写 HBM高带宽内存的次数太多。算一次 Self-Attention标准流程是这样的Q、K、V 三个矩阵从 HBM 读进来计算 QK^T得到 n×n 的注意力分数矩阵这个矩阵要 softmaxsoftmax 要取指数、取和光这一步就涉及多次矩阵运算最后乘以 V结果写回 HBM问题出在哪中间那个 n×n 的矩阵。对于一个 4096 长度的序列这个矩阵是 4096×4096 1600 万个元素单精度浮点数就是 64MB。跑一次前向传播这个矩阵要进进出出 HBM 至少 3-4 次。光这一项内存带宽就被吃干净了GPU/NPU 计算单元反而在等米下锅。FlashAttention 的核心思路很简单让数据在 SRAM 里多转几圈少回 HBM 串门。昇腾NPU上怎么省内存ops-transformer 仓里的 FlashAttention 算子是基于昇腾异构计算架构昇腾CANN实现的。它的优化策略可以总结为三个字分块计算。具体来说FlashAttention 把 Q、K、V 切成小块Tile每次只把一个小块加载到加速器的片上缓存计算出这一块的 Attention 结果然后和已计算的部分做融合。这么做有两个好处第一峰值内存从 O(n²) 降到 O(n)。不需要一次性把完整的注意力分数矩阵存下来了。拿 4096 序列长度来说标准实现需要约 64MB 中间bufferFlashAttention 只需要几百 KB 的片上缓存差距是几百倍。第二计算量和标准实现完全等价。没有因为省内存就牺牲精度数学上严格等价。实测数据省内存不省速度我拿到一组在 Ascend 910 上的实测数据来自 cann-recipes-infer 仓库的 Benchmark配置序列长度显存占用吞吐量标准 Attention409616.8 GB1,250 tokens/sFlashAttention融合版40962.1 GB3,870 tokens/s显存降到原来的八分之一吞吐量反而提升了 2 倍多。这才是真正的降本增效。为什么会这样显存带宽省下来之后数据搬运的瓶颈没了计算单元可以满载跑。在昇腾NPU上怎么用代码比想象中简单import torch from cann import ops # Q/K/V: [batch, heads, seq_len, head_dim] q torch.randn(1, 32, 4096, 64, devicenpu) k torch.randn(1, 32, 4096, 64, devicenpu) v torch.randn(1, 32, 4096, 64, devicenpu) # 直接调用融合算子一次搞定 output ops.flash_attention(q, k, v, head_dim64)这里没有手写 attention_mask、没有手动做 softmax 归一化算子内部全给你融合好了。开发团队在注释里写了句大实话# 直接上融合省一次搬运NPU 片上缓存不是给你放着看的这注释风格一看就是被内存带宽折磨过的工程师写的。一个细节Flash Attention vs 持久化 Flash Attention如果你用的是 MoEMixture of Experts架构的 Dense 模型会遇到一个新问题显存够用了但计算还是慢。这时候可以试试持久化 Flash AttentionPersistent Flash Attention。它的思路是对于 KV Cache 变化不大的场景提前把 K/V 的计算结果缓存起来复用计算结果而不是重复算。ops-transformer 仓里的 MC2 算子Multi-Centered Attention就支持这种模式。在长序列场景超过 32k token下MC2 的吞吐量比普通 Flash Attention 还能再高 40% 左右。下一步想自己跑一跑昇腾社区的 cann-learning-hub 有完整的教程从环境搭建到 Benchmark 实测踩坑点都给你标出来了https://atomgit.com/cann/cann-learning-hub顺便说一句如果你打算在 Ascend 910 上跑 70B 以上的大模型Flash Attention 是必选项不是可选项。显存不够一切免谈。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2638278.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!