Get Started With Deep Learning Performance

提升建议

首先要确认算法cuda实现,是计算瓶颈还是内存瓶颈。

GPU在并行计算方面表现出色,但数据也需要在这些计算附近进行加载和存储(be loaded and stored),因此数据移动速度也可能限制性能,首先先看计算瓶颈。If the speed of a routine is limited by calculation rate (math-limited or math-bound), performance can be improved by enabling Tensor Cores and following our other recommendations.

A routine is a sequence of instructions that are performed repeatedly. In this context, it refers to a specific set of operations or calculations performed in deep learning.

那如果是内存瓶颈(bandwidth-limited or memory-bound),加速计算并不能提高性能。对于全连接层和卷积层,这通常发生在层的一个或多个参数很小的情况下。

所以为什么说小模型在GPU上跑就是没必要。

换句话说,如果一个操作是memory-bound的,那么调整参数以更有效地利用GPU是没用的。不可表示为矩阵乘法的操作,比如激活函数、池化和批量归一化,几乎总是内存绑定的。和矩阵乘法差不多的操作,比如全连接、卷积和循环层,可能是memory-bound或math-bound,具体取决于它们的大小。较大的层相对于内存访问次数具有更多的计算量,我们称之为算术强度( arithmetic intensity)。如果算术强度超过特定阈值(取决于GPU类型和正在执行的计算类型),则该操作是math-bound的,并且可以使用我们的技巧进行有效优化。

使用 Tensor Cores Efficiently With Alignment

使用Tensor Core需要设置key parameters。

如果使用 TF32,则操作的key parameters最好是 4 的倍数;如果使用 FP16,则最好是 8 的倍数;如果使用 INT8,则最好是 16 的倍数(在内存中,操作的关键维度最好都是 16 的倍数)。对于全连接层,the relevant parameters are the batch size and the number of inputs and outputs;对于卷积层,是输入和输出通道的数量;对于循环层,是小批量大小和隐藏层大小(the minibatch size and hidden sizes)。

CUDA版本越新越好。在早期版本中,如果一个或多个维度未对齐,则可能无法启用张量核心。该要求基于数据存储和内存访问方式。更多详细信息请参见 张量核心需求

TF32是NVIDIA Ampere架构引入的一种数据类型,可以与现有的FP32代码一起使用,以利用张量核心。有关TF32的更多详细信息,请单击此链接。混合精度是另一种选项,适用于当前使用FP32的网络,并且可以与NVIDIA Ampere架构、NVIDIA Volta™和NVIDIA Turing™ GPU一起使用。NVIDIA混合精度培训指南详细说明如何将混合精度与张量核心一起使用,包括在多个框架中快速入门的说明。

选择合适的参数Choosing Parameters To Maximize Execution Efficiency

GPU通过将工作分配给许多并行进程来高效执行操作。因此 using parameters that make it easier to break up the operation evenly will lead to the best efficiency。这意味着选择可被较大的2的幂整除的参数(包括批量大小、输入大小、输出大小和通道数),至少为64,最多为256。

使用512及更高次幂的值没问题,不过提升就不大了。对于参数较小的情况,二的幂次方的整除性最为重要;选择512而不是520比选择5120而不是5128有更大的影响。此外,要想通过这些微调来提高效率,运算必须已经处于数学限制的状态,这通常需要至少一个参数大于256。请参见尽可能在数学有限制的情况下运行以及其他有关计算算术密度的链接章节。

Checklists

四个检查清单,不同操作不同的优化指南。

How This Guide Fits In

NVIDIA的GPU深度学习平台提供了丰富的资源,可以了解NVIDIA的Tensor Core GPU架构以及混合精度训练的基础知识以及如何在您喜欢的框架中启用它。

NVIDIA V100 GPU架构白皮书介绍了NVIDIA Volta,这是NVIDIA GPU架构中首次引入张量核心加速深度学习操作的架构。相应的NVIDIA Turing架构白皮书通过引入NVIDIA Turing Tensor Cores进一步扩展了此功能,该功能添加了其他低精度模式。NVIDIA Ampere架构白皮书引入了张量核心对其他精度(包括TF32,它与现有FP32工作负载一起使用以利用张量核心)的支持,使用Sparsity功能可提高2倍的吞吐量,并使用Multi-Instance GPU功能对GPU进行虚拟分区。

NVIDIA混合精度培训指南介绍了使用降低精度的方式进行神经网络训练的基础知识,例如来自所使用的数字格式的算法考虑事项。它还详细说明了如何在您选择的框架中启用混合精度训练,包括TensorFlow、PyTorch和MXNet。通过自动混合精度,最简单、最安全的方法是通过自动混合精度,在PyTorch、TensorFlow和MxNet中受到支持。提供了其他文档,以帮助解释如何:

深度学习性能提升大纲,来自官方文档: