NVIDIA 深度学习性能

开始使用深度学习性能

摘要

这是我们的深度学习性能文档的着陆页。此页面提供了适用于大多数深度学习操作的建议。它还提供了链接、其他性能文档的简短说明以及这些页面如何组合在一起。

GPU 通过并行执行计算来加速机器学习操作。许多操作,尤其是那些可以表示为矩阵乘法的操作,将直接获得良好的加速效果。通过调整操作参数以有效地使用 GPU 资源,可以实现更好的性能。

本文档介绍了我们认为最广泛有用的技巧。我们链接到每个其他页面,并在适当的地方提供更深入的信息。如果您想直接开始优化网络,请阅读我们的清单


2.1. 尽可能在计算受限的模式下运行

GPU 擅长并行执行计算,但数据也需要加载并存储在这些计算周围,因此数据移动速度也可能限制可实现的性能。如果例程的速度受到计算速率(计算受限计算约束)的限制,则可以通过启用 Tensor Core 并遵循我们的其他建议来提高性能。

另一方面,如果例程受到加载输入和写入输出所用时间(带宽受限内存约束)的限制,则加速计算不会提高性能。对于全连接层和卷积层,这种情况主要发生在层的一个或多个参数较小时。

换句话说,如果操作是内存约束的,则调整参数以更有效地利用 GPU 是无效的。不可表示为矩阵乘法的操作,包括激活函数、池化和批归一化,几乎总是内存约束的。那些具有等效矩阵乘法的操作,包括全连接层、卷积层和循环层,可能是内存约束的或计算约束的,具体取决于它们的大小。较大的层往往具有相对于内存访问次数更多的计算,我们将这种比率称为 算术强度。如果算术强度超过特定阈值(取决于 GPU 类型和正在进行的计算类型),则该操作是计算约束的,并且可以通过我们的技巧有效地进行优化。有关背景和详细信息,请参阅理解性能计算和内存约束

2.2. 通过对齐高效使用 Tensor Core

当操作的关键参数是 4 的倍数(如果使用 TF32)、8 的倍数(如果使用 FP16)或 16 的倍数(如果使用 INT8)(等效地,当操作的关键维度与内存中 16 字节的倍数对齐时),Tensor Core 最有效。对于全连接层,相关参数是批大小以及输入和输出的数量;对于卷积层,是输入和输出通道的数量;对于循环层,是小批量大小和隐藏大小。使用 NVIDIA® cuBLAS 11.0 或更高版本以及 NVIDIA CUDA® 深度神经网络库 (cuDNN) 7.6.3 或更高版本,即使不满足此要求也可以使用 Tensor Core,但如果满足此要求,性能会更好。在早期版本中,如果一个或多个维度未对齐,则可能无法启用 Tensor Core。此要求基于数据在内存中的存储和访问方式。更多详细信息请参见Tensor Core 要求

TF32 是一种随 NVIDIA Ampere 架构引入的数据类型,可与现有的 FP32 代码配合使用以利用 Tensor Core。有关 TF32 的更多详细信息,请访问此链接。混合精度是当前使用 FP32 的网络的另一种选择,它适用于 NVIDIA Ampere 架构以及 NVIDIA Volta™ 和 NVIDIA Turing™ GPU。NVIDIA 混合精度训练指南介绍了如何将混合精度与 Tensor Core 一起使用,包括在许多框架中快速入门的说明。

2.3. 选择参数以最大化执行效率

GPU 通过在许多并行进程之间分配工作来高效地执行操作。因此,使用使操作更容易均匀分解的参数将获得最佳效率。这意味着选择参数(包括批大小、输入大小、输出大小和通道计数)为 2 的较大幂(至少为 64,最多为 256)的倍数。

使用可被 512 和更高的 2 的幂整除的值没有缺点,但额外的好处较少。对于较小的参数,可被 2 的幂整除性最为重要;选择 512 而不是 520 比选择 5120 而不是 5128 影响更大。此外,为了使这些调整提高效率,操作必须已经是计算受限的,这通常需要至少一个参数远大于 256。请参阅尽可能在计算受限的模式下运行以及其他关于计算算术强度的链接部分。

不同例程的更具体要求可以在相应的清单和指南中找到。有关为什么这很重要的背景信息,请参阅GPU 架构基础知识CUBLAS 中的典型瓦片尺寸和性能

我们提供了以下快速入门清单,其中包含特定于每种操作类型的技巧。

NVIDIA 的 GPU 深度学习平台配备了丰富的其他资源,您可以使用这些资源来详细了解 NVIDIA 的 Tensor Core GPU 架构,以及混合精度训练的基础知识以及如何在您喜欢的框架中启用它。

NVIDIA V100 GPU 架构白皮书介绍了 NVIDIA Volta,这是第一个引入Tensor Core 以加速深度学习操作的 NVIDIA GPU 架构。等效的 NVIDIA Turing 架构白皮书对此进行了扩展,介绍了 NVIDIA Turing Tensor Core,它增加了额外的低精度模式。NVIDIA Ampere 架构白皮书介绍了 Tensor Core 对其他精度的支持(包括 TF32,它与现有的 FP32 工作负载配合使用以利用 Tensor Core)、通过 Sparsity 功能实现的最高 2 倍吞吐量以及通过 Multi-Instance GPU 功能实现的 GPU 虚拟分区。

NVIDIA 混合精度训练用户指南介绍了使用降低的精度(例如所用数值格式带来的算法考虑)训练神经网络的基础知识。它还详细介绍了如何在您选择的框架(包括 TensorFlow、PyTorch 和 MXNet)中启用混合精度训练。启用混合精度训练并使用 Tensor Core 最简单和最安全的方法是通过 自动混合精度,PyTorch、TensorFlow 和 MxNet 均支持该功能。提供了额外的文档来帮助解释如何:

声明

本文档仅供参考,不应被视为对产品的特定功能、状况或质量的保证。NVIDIA Corporation(“NVIDIA”)对本文档中包含的信息的准确性或完整性不作任何明示或暗示的陈述或保证,并且对本文档中包含的任何错误不承担任何责任。NVIDIA 对因使用此类信息或因使用此类信息而可能导致的任何专利或第三方其他权利的侵权行为的后果或使用不承担任何责任。本文档不构成对开发、发布或交付任何材料(定义如下)、代码或功能的承诺。

NVIDIA 保留在不另行通知的情况下随时对本文档进行更正、修改、增强、改进和任何其他更改的权利。

客户在下订单前应获取最新的相关信息,并应验证此类信息是否为最新且完整。

NVIDIA 产品的销售受订单确认时提供的 NVIDIA 标准销售条款和条件的约束,除非 NVIDIA 和客户的授权代表签署的个别销售协议另有约定(“销售条款”)。NVIDIA 在此明确反对将任何客户一般条款和条件应用于购买本文档中引用的 NVIDIA 产品。本文档未直接或间接地形成任何合同义务。

NVIDIA 产品并非设计、授权或保证适用于医疗、军事、航空、航天或生命支持设备,也不适用于 NVIDIA 产品的故障或失灵可能合理预期会导致人身伤害、死亡或财产或环境损害的应用。对于将 NVIDIA 产品包含和/或用于此类设备或应用,NVIDIA 不承担任何责任,因此,此类包含和/或使用由客户自行承担风险。

NVIDIA 不保证基于本文档的产品适用于任何特定用途。NVIDIA 不一定会对每种产品的所有参数进行测试。客户全权负责评估和确定本文档中包含的任何信息的适用性,确保产品适合并满足客户计划的应用,并执行必要的应用测试以避免应用或产品的默认设置。客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本文档中包含的附加或不同条件和/或要求。NVIDIA 对可能基于或归因于以下原因的任何默认设置、损坏、成本或问题不承担任何责任:(i) 以任何违反本文档的方式使用 NVIDIA 产品,或 (ii) 客户产品设计。

本文档未授予任何 NVIDIA 专利权、版权或其他 NVIDIA 知识产权下的任何明示或暗示的许可。NVIDIA 发布的有关第三方产品或服务的信息不构成 NVIDIA 授予的使用此类产品或服务的许可,也不构成对其的保证或认可。使用此类信息可能需要获得第三方在其专利或其他知识产权下的许可,或获得 NVIDIA 在其专利或其他知识产权下的许可。

只有在事先获得 NVIDIA 书面批准的情况下,才允许复制本文档中的信息,复制时不得进行更改,并且必须完全遵守所有适用的出口法律法规,并附带所有相关的条件、限制和声明。

本文档和所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”,单独称为“材料”)均按“原样”提供。NVIDIA 对材料不作任何明示、暗示、法定或其他形式的保证,并且明确声明不承担所有关于不侵权、适销性和特定用途适用性的暗示保证。在法律未禁止的范围内,在任何情况下,NVIDIA 均不对任何损害(包括但不限于任何直接、间接、特殊、偶然、惩罚性或后果性损害)负责,无论其因何种原因引起,也无论责任理论如何,即使 NVIDIA 已被告知可能发生此类损害。尽管客户可能因任何原因而遭受任何损害,但 NVIDIA 对本文所述产品的客户的累计责任应根据产品的销售条款进行限制。

Google

Android、Android TV、Google Play 和 Google Play 徽标是 Google, Inc. 的商标。

商标

NVIDIA、NVIDIA 徽标、CUDA、Merlin、RAPIDS、Triton Inference Server、Turing 和 Volta 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。其他公司和产品名称可能是与其关联的各自公司的商标。

© 2020-2023 NVIDIA Corporation 和/或其附属公司。保留所有权利。 上次更新时间:2023 年 2 月 1 日。