FlashAttention-2:利用有效并行化与分片机制实现高效注意力
FlashAttention利用非对称GPU显存层级的特性不仅提高了内存效率,也提高了训练速度。然而,随着上下文长度的增加,它没有优化的GEMM运算一样快,且只达到了理论最大FLOPs/s的25-40%。这种不高效主要是由GPU中不同线程块与线程束之间次优的work分片导致的低显存占有率或不必要的共享内存读写所引起的。为了处理这些问题,FlashAttention-2设计了更好的woker分片。
FlashAttention利用非对称GPU显存层级的特性不仅提高了内存效率,也提高了训练速度。然而,随着上下文长度的增加,它没有优化的GEMM运算一样快,且只达到了理论最大FLOPs/s的25-40%。这种不高效主要是由GPU中不同线程块与线程束之间次优的work分片导致的低显存占有率或不必要的共享内存读写所引起的。为了处理这些问题,FlashAttention-2设计了更好的woker分片。
标准自注意力计算的时间复杂度与空间复杂度与序列长度呈现2次方关系,因此Transformer在长序列上处理速度很慢且需要大量内存。同时,随着硬件的进步,计算能力已经超过了内存的读写能力,即内存的读写限制了注意力的计算。FlashAttention是一个考虑内存读写的精确注意力计算算法,通过分片的方式减少了GPU中HBM与SRAM之间的读写次数,从而提高注意力计算的速度与内存效率。
自回归解码器推理的成本很高,这是因为每个解码步骤加载解码器权重和所有注意力的keys与values的内存带宽很高。多查询注意力MAQ利用多个查询头但只有一个键与值,因此内存带宽的需求大大降低。然而,MQA会导致模型质量退化且训练不稳定。而且,为了优化质量与推理速度,单独训练一个模型不可行。