阜宁做网站找哪家好,官方网站下载拼多多app,兰州网站建设redu,网站右下角弹出广告代码FlashAttention-2是对原始FlashAttention算法的一系列改进#xff0c;旨在优化在GPU上的计算性能。本节详细讨论了FlashAttention-2的算法、并行性以及工作分区策略。
算法
FlashAttention-2的关键优化点在于减少非矩阵乘法#xff08;matmul#xff09;的浮点运算#x…FlashAttention-2是对原始FlashAttention算法的一系列改进旨在优化在GPU上的计算性能。本节详细讨论了FlashAttention-2的算法、并行性以及工作分区策略。
算法
FlashAttention-2的关键优化点在于减少非矩阵乘法matmul的浮点运算以充分利用GPU上的专用计算单元如Nvidia GPU上的Tensor Cores这些单元在处理matmul操作尤其是在FP16/BF16格式下时性能显著优化。该优化的目标是通过尽可能多地执行matmul操作来最大化GPU的吞吐量。
前向传播 在线Softmax技巧FlashAttention-2对在线Softmax计算进行了修改以最小化非matmul浮点操作 避免通过 diag(ℓ(2))^-1 重新缩放输出更新的两个项。维持一个“未缩放”的O(2)版本并保留统计信息 ℓ(2)。仅在循环结束时通过 diag(ℓ(last))^-1 缩放最终的O(last)以获得正确的输出。 最大化matmul FLOPs为了最大化GPU的性能FlashAttention-2重点优化了matmul操作因为现代GPU上的专用单元如Tensor Cores在这些操作上表现出色。以Nvidia A100 GPU为例其FP16/BF16 matmul的理论吞吐量可以达到312 TFLOPs/s而非matmul FP32的吞吐量仅为19.5 TFLOPs/s。因此FlashAttention-2通过优化算法尽可能地减少非matmul操作从而保持高吞吐量的执行效率。 算法细节FlashAttention-2的前向传播通过以下步骤实现 将输入矩阵Q、K、V分成大小为 × 的块将输出矩阵O和logsumexp也相应地分块。在每个线程块内部分配工作以最大化GPU资源的利用。引入了在线Softmax技巧通过有效管理和缩放中间结果减少了不必要的计算开销。
反向传播
FlashAttention-2的反向传播与FlashAttention类似但也有一些微调
仅使用逐行logsumexp 而不是softmax中的最大值和指数和。使用类似的分块策略来优化计算和内存访问以提高反向传播的效率和性能。
FlashAttention-2在并行性和工作分区方面进行了深入优化以在GPU上实现更高的计算效率和性能。本节详细讨论了FlashAttention-2的并行化策略和工作分区方法。
并行性
前向传播
在FlashAttention-2中前向传播的并行化策略如下 线程块调度每个注意力头使用一个线程块来处理总共有batch size × number of heads个线程块。每个线程块被调度到一个流多处理器SM上执行。例如Nvidia A100 GPU上有108个这样的SM。这种调度在大量线程块如≥ 80时非常高效因为可以充分利用GPU的计算资源。 对长序列的优化对于长序列通常意味着较小的batch size或较少的头数为了更好地利用GPU上的多处理器FlashAttention-2额外并行化了序列长度维度。这在这种情况下显著提高了性能和效率。
反向传播
在反向传播中为了避免在不同列块之间的共享计算FlashAttention-2采用了类似的并行化策略
线程块调度每个列块使用一个线程块来处理。通过使用原子加操作来在不同线程块之间进行通信以更新dQ从而避免了共享内存的读写冲突。
工作分区
前向传播
在前向传播中FlashAttention-2改进了工作分区策略避免了FlashAttention中的split-K方案具体包括
K和V的分割FlashAttention-2将Q分割到4个线程束warp中同时使得K和V对所有线程束可访问。每个线程束执行矩阵乘法以获取QK的一部分并将其与V的一部分相乘从而获得对应输出的片段。这种改进减少了线程束之间的通信降低了共享内存的读写次数从而提升了性能。
反向传播
在反向传播中为了避免split-K方案带来的同步问题FlashAttention-2选择了适当的线程束分区策略以优化计算和内存访问效率。