GPU选购指南:训练ML模型,我必须买RTX3080吗?(13)


为了执行矩阵乘法,我们利用了 GPU 的存储层次结构,从慢的全局内存到快的本地共享内存,再到快如闪电的寄存器 。然而,越快的存储越小 。因此,我们需要将矩阵分割成更小的矩阵,并在本地共享内存中通过这些更小的块执行矩阵乘法,它们速度快,并且接近于串流多处理器(SM)——相当于 CPU 内核 。对于张量核,我们更进一步:我们取每个块并将其中的一部分装入张量核中 。共享内存中的矩阵 memory tile 比 GPU 全局内存快大约 10-50 倍,而张量核的寄存器比 GPU 全局内存快 200 倍 。
拥有更大的 tile 意味着我们可以重用更多的内存 。我在博文 TPU vs GPU 中详细探讨了这个问题 。实际上,你可以将 TPU 看作是每个张量核都有非常非常大的 tile 。因此,TPU 在每次从全局内存传输数据时都可以重用更多的内存,这使得它们在矩阵乘法计算方面比 GPU 更有效率 。
每个块的大小是由每个串流多处理器(SM,相当于 GPU 上的一个“CPU 内核”)的内存大小决定的 。在以下架构中,我们有以下共享内存大小:

  • Volta:96kb 共享内存 / 32 kb L1
  • Turing:64kb 共享内存 / 32 kb L1
  • Ampere:164kb 共享内存 / 32 kb L1
我们看到,Ampere 的共享内存更大,块大小就更大,这减少了全局内存访问延迟 。因此,Ampere 可以更好地利用 GPU 存储的总体内存带宽 。这将提高大约 2-5% 的性能 。对于大型矩阵,性能的提升尤其明显 。
Ampere 张量核的另一个优点是它们在线程之间共享更多的数据 。这减少了寄存器的使用 。寄存器被限制为每个串流多处理器(SM)64k 或每个线程 255 。比较 Volta 和 Ampere 张量核,Ampere 张量核使用 1/3 的寄存器,允许更多张量核在共享内存的每个块上活动 。换句话说,我们可以用相同数量的寄存器支撑 3 倍的张量核 。然而,由于带宽仍然是瓶颈,所以实际的 TFLOPS 与理论的 TFLOPS 相比,只会有微小的提高 。新的张量核提高了大约 1-3% 的性能 。
总的来说,我们可以看到,Ampere 的架构经过优化,它使用改进后的存储层次结构(从全局内存到共享内存块,再到张量核寄存器),使可用内存带宽更加有效 。
评估 Ampere 的深度学习性能要点:
  • 根据内存带宽和 Ampere GPU 改进的存储层次估计,理论上,其速度提升 1.78 倍到 1.87 倍 。
  • NVIDIA 提供了 TeslaA100 和 V100 GPU 的准确基准测试数据 。这些出于营销目的数据存在偏差,但是可以建立这些数据的去偏模型 。
  • 去偏基准测试数据显示,Tesla A100 在 NLP 方面比 V100 快 1.70 倍,在计算机视觉方面比 V100 快 1.45 倍 。
如果你想了解我如何评估 Ampere GPU 性能的更多技术细节,那么本节就是为你准备的 。如果你不关心这些技术方面,则可以跳过此部分 。
Ampere 速度的理论估计综上所述,我们认为,两种配备张量核的 GPU 架构之间的差异主要在于内存带宽 。使用张量核的其他好处包括更多的共享内存 /L1 缓存和更好的寄存器 。
如果我们将 TeslaA100GPU 带宽与 TeslaV100 GPU 带宽相比较,我们得到的速度提升为 1555/900 = 1.73 倍 。此外,我希望从更大的共享内存中得到 2-5% 的加速,从改进的张量核中得到 1-3% 的加速 。这使得速度提升在 1.78 倍和 1.87 倍之间 。用类似的推理方法,你就可以估计 Ampere 系列其他 GPU 与 TeslaV100 相比的速度提升 。
Ampere 速度的实际估计假设我们有针对一种 GPU 架构的估计,如 Ampere、Turing 或 Volta,我们就可以很容易地将这些结果推到相同架构 / 系列的其他 GPU 上 。幸运的是,NVIDIA 已经在广泛的计算机视觉和自然语言理解任务中对 A100 和 V100 进行了基准测试 。遗憾的是,NVIDIA 使用了不同的批次大小和 GPU 数量,使得这些数值无法直接进行比较,从而得出有利于 A100 的结果 。所以,在某种意义上,这些基准数据部分是真实的,部分是市场数据 。一般来说,你可能会认为,更大的批次大小才公平,因为 A100 有更多的内存,但是为了比较 GPU 架构,我们应该评估批次大小相同时的无偏内存性能 。
为了得到无偏估计,我们可以通过两种方式对 V100 和 A100 结果进行缩放:
(1)考虑批次大小差异,(2)考虑使用 1 个 GPU 和 8 个 GPU 的差异 。幸运的是,我们能在 NVIDIA 提供的数据中找到对这两种偏差的估计 。
批次大小增加一倍使吞吐量增加 13.6%(CNN,以每秒图像数为单位) 。我在 RTX Titan 上针对同样的问题测试了 Transformer,惊奇地发现了同样的结果:13.5%——这似乎是一个可靠的估计 。


推荐阅读