计算与内存限制

在现代计算中,尤其是在处理自然语言处理任务时,transformer模型的self-attention块是一个关键组件。然而,self-attention块的计算复杂度和空间复杂度与序列长度N的二次方成正比,这对计算资源提出了巨大的要求。因此,许多近似注意力的方法被提出,以减少attention的计算和内存要求。

Pasted image 20250428222853.png

近似注意力方法

稀疏近似和低秩近似是两种常见的方法,它们将计算复杂度降低到了序列长度的线性或亚线性。然而,这些方法并没有得到广泛应用,因为它们过于关注FLOPs(浮点数计算次数)的减少,而忽略了IO读写的内存访问开销。在现代GPU中,计算速度已经远超过了显存访问速度,transformer中的大部分计算操作的瓶颈是显存访问。

注意区分FLOPS和FLOPs

计算带宽与内存带宽

性能受限类型

对于self-attention块,除了大矩阵乘法是计算受限,其他操作如计算softmax、dropout、mask都是内存受限的。

GPU内存分级

GPU内存由多个不同大小和不同读写速度的内存组成。内存越小,读写速度越快。

GPU运行模式

GPU有大量的线程来执行某个操作,称为kernel。执行操作分为三步:

  1. 每个kernel将输入数据从低速的HBM中加载到高速的SRAM中。
  2. 在SRAM中进行计算。
  3. 将计算结果从SRAM中写入到HBM中。

kernel融合

在进行GPU计算时,kernel融合是一种优化策略,可以减少显存访问次数,提高计算效率。通过将多个kernel操作融合为一个,可以在一次显存访问中完成多个计算任务,从而提高整体性能。

在现代计算中,理解计算与内存限制对于优化模型性能至关重要。通过合理利用GPU的不同内存层级和优化kernel执行策略,可以有效提升模型运行效率。希望这篇文章能帮助您更好地理解这些概念,并在实践中应用这些知识。