为什么使用混合精度深度学习?
随着深度学习(DL)领域的进步,关于DL模型的混合精度训练的讨论也出现了类似的增长。神经网络的范围、序列和原始能力的这些改进和自然演变意味着这些模型的大小必须增加以进行相应的补偿。更大、更复杂的DL模型需要技术和方法的进步。
这导致具有分布式训练的多GPU设置随着更多GPU集成到训练中而迅速失控。回归DL的基本训练原理,复习基础技术,可以缓解神经网络训练阶段的压力,优化GPU的使用。混合精度训练或自动混合精度训练可以是一种简单的方法来做到这一点。
DL神经网络的混合精度训练是加速神经网络训练阶段的过程。在本指南中,我们将更深入地探讨混合精度训练和自动混合精度训练,以及它如何保持神经网络训练阶段的准确性,同时减少训练所花费的时间。
什么是混合精度DL?
DL中的混合精度训练是同时使用单精度(32位)和半精度(16位)表示的过程。通过同时使用32位(或FP32)和16位(或FP16)浮点类型,模型的训练阶段将更快并消耗更少的内存。这是通过模型在FP32中为需要精度的计算保留一些训练来实现的,而在FP16中对精度不那么重要的其他计算进行训练。
以半精度(FP16)格式执行一些操作可以减少步进时间,而其他操作仍以单精度(FP32)执行以用于存储和准确性。这创造了一个最佳点,可以减少培训时间,而不会丢失任何关键信息。最后,混合精度训练为DL模型提供了显着的计算加速,几乎没有任何缺点。事实上,随着Tensor Cores的引入,DL社区甚至在数学最密集的模型中也看到了3倍以上的加速。
什么是自动混合精度训练?
DL中混合精度训练的棘手部分是它需要手动编码,导致可能的人为错误。使用张量核心是相当新的,并且仅在张量核心上分配特定操作需要一些独特的编码技术。
然而,现在整个过程可以通过几行简单的代码实现自动化!在DL中,这已变得司空见惯,并且对于保持模型训练尽可能快而不会显着降低质量非常重要。在设置混合精度训练时,只需要仔细注意。凭借自动化混合精度训练的能力,技术在扩展神经网络方面取得了重大改进和进步。
自动混合精度训练示例
自动混合精度(AMP)训练示例可能有助于阐明如何设置和使用混合精度训练。无论是使用Keras、PyTorch还是任何其他框架,都要遵循适当的编码程序和标签。
1.启用Max Tensor Cores Utilization
在整个训练过程中专用一个GPU来存储内存。这在您同时使用混合精度训练和分布式训练的情况下非常重要。密切注意使用FP16和FP32对某些进程和操作进行分区的位置。
2.为框架启用Cuda
启用CUDA将适当地设置混合训练代码。如前所述,现在通过对CUDA和PyTorch等框架的改进使这变得更简单。为此过程使用_GradScaler_选项进行损失缩放。在编程语言中,数字以有限的位数表示。_GradScaler_将消除可能的零值,某些位数可能会意外舍入到当一个微小的值仍然在避免被零除方面发挥作用时。
3.设置自动化
设置_autocast_上下文管理器以尽可能多地自动化该过程。这里没有太多需要调整的地方,但这将是你的代码中支持混合精度训练的部分,所以要特别小心并仔细检查你的工作。
4.测试在提交代码之前
测试一切。如果某些事情没有按照您的预期工作,请不要犹豫,重新运行它并从头开始。这是一段关键的代码,因此要进行双重和三重检查,以节省DL模型的时间和内存。
PyTorch示例:
scaler=GradScaler()
withautocast():
output=model(input)
loss=loss_fn(output,target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
准备好深入研究混合精度训练了吗?
自动混合精度训练经常被忽视,因为它在DL社区中已经成为某种标准。不过,值得确定它是如何工作的以及如何正确使用它,而不是在考虑所有选项之前潜入水中。
我们在本文中遗漏了哪些您希望我们能够涵盖的内容?我们很乐意听取您的意见,以便我们解决您可能遇到的任何问题或疑虑。如果您在开始使用混合精度训练时需要帮助,那么我们也可以提供帮助!