引入本地PyTorch自动混合精度以在NVIDIA GPU上进行更快的训练

默认情况下,大多数深度学习框架(包括PyTorch)都采用32位浮点(FP32)算法进行训练。但是,对于许多深度学习模型而言,这对于获得完全准确性不是必需的。2017年,NVIDIA研究人员开发了一种用于混合精度训练的方法,该方法在训练网络时将单精度(FP32)与半精度(例如FP16)格式结合在一起,并使用相同的超参数实现了与FP32训练相同的精度, NVIDIA GPU的其他性能优势:

  • 训练时间更短;
  • 较低的内存要求,可实现更大的批处理大小,更大的型号或更大的输入。

为了简化为研究人员和从业人员提供的混合精度训练的用户体验,NVIDIA在2018年开发了Apex,这是具有自动混合精度(AMP)功能的轻型PyTorch扩展。此功能可将某些GPU操作从FP32精度自动转换为混合精度,从而在保持精度的同时提高性能。

对于PyTorch 1.6版本,NVIDIA和Facebook的开发人员将混合精度功能作为AMP软件包torch.cuda.amp移入了PyTorch核心。torch.cuda.ampapex.amp。相比,更加灵活和直观。能够解决的一些apex.amp已知痛点torch.cuda.amp

  • 保证的PyTorch版本兼容性,因为它是PyTorch的一部分
  • 无需构建扩展
  • Windows支援
  • 按位精确保存/还原检查点
  • DataParallel和进程内模型并行性(尽管我们仍然建议torch.nn.DistributedDataParallel每个进程一个GPU,这是性能最高的方法)
  • 渐变惩罚(向后翻倍)
  • torch.cuda.amp.autocast()在启用该功能的区域之外没有任何影响,因此它应该可以为以前多次调用apex.amp.initialize()(包括交叉验证)而遇到困难的情况提供服务。在同一脚本中运行的多个收敛都应使用一个新的GradScaler实例,但是GradScalers是轻量级的且自包含的,因此这不是问题。
  • 稀疏梯度支持

随着AMP被添加到PyTorch Core,我们已经开始弃用过程,apex.amp.我们已经apex.amp进入维护模式,将为客户提供支持。apex.amp.但是,我们强烈鼓励apex.amp客户torch.cuda.amp从PyTorch Core过渡到使用。

 

示例演练

请参阅官方文档以了解用法:

例:

import torch# Creates once at the beginning of trainingscaler = torch.cuda.amp.GradScaler()for data, label in data_iter:optimizer.zero_grad()   # Casts operations to mixed precisionwith torch.cuda.amp.autocast():loss = model(data)   # Scales the loss, and calls backward()   # to create scaled gradientsscaler.scale(loss).backward()   # Unscales gradients and calls   # or skips optimizer.step()scaler.step(optimizer)   # Updates the scale for next iterationscaler.update()

 

 

Performance Benchmarks

在本节中,我们将讨论在最新的NVIDIA GPU A100和上一代V100 GPU上使用AMP进行混合精度训练的准确性和性能。在NGC的NVIDIA pytorch:20.06-py3容器中运行深度学习工作负载时,将混合精度性能与FP32性能进行了比较。

 

精度:AMP(FP16),FP32

使用AMP进行深度学习训练的优势在于,模型可以收敛到相似的最终精度,同时提供改进的训练效果。为了说明这一点,对于Resnet 50 v1.5训练,我们看到以下精度结果,越高越好。请注意,下面的准确度数字是样本数,该样本数之间的差异最大为0.4%。包括BERT,Transformer,ResNeXt-101,Mask-RCNN,DLRM在内的其他型号的精度数字可在 NVIDIA深度学习示例Github中找到

训练精度:NVIDIA DGX A100(8x A100 40GB)

 

 时代

 混合精度前1(%)

 TF32 Top1(%)

 90

 76.93

 76.85

训练精度:NVIDIA DGX-1(8x V100 16GB)

 

 时代

 混合精度前1(%)

 FP32 Top1(%)

50

76.25

76.26

90

77.09

77.01

250

78.42

78.30

 

加速性能:

 

NVIDIA V100上的FP16与V100上的FP32

带FP16的AMP是V100上进行DL训练的最高性能的选择。在表1中,我们可以看到,对于各种型号,V100上的AMP的速度比V100上的FP32快1.5倍至5.5倍,同时收敛到相同的最终精度。

 

在NVIDIA 8xV100上混合精度训练与在8xV100 GPU上FP32训练的性能对比。条形图表示V100 AMP相对于V100 FP32的加速因子。越高越好

 

NVIDIA A100上的FP16与V100上的FP16

带有FP16的AMP仍然是A100上进行DL训练的最高性能的选择。在下图中,我们可以看到,对于各种型号,A100上的AMP的速度比V100上的AMP快1.3倍至2.5倍,同时收敛到相同的最终精度。

 

 

在NVIDIA 8xA100与8xV100 GPU上进行混合精度训练的性能。条形图表示A100相对于V100的加速因子。越高越好。

 

 

Call to action

 

AMP为Nvidia Tensor Core GPU(尤其是最新一代的Ampere A100 GPU)上的深度学习训练工作负载提供了健康的加速。您可以开始针对NVIDIA深度学习示例中可用的A100,V100,T4和其他GPU的启用AMP的模型和模型脚本进行实验。PyTorch NGC容器版本20.06可提供具有本地AMP支持的NVIDIA PyTorch 。我们强烈建议现有apex.amp客户过渡到使用torch.cuda.amp最新PyTorch 1.6版本中可用的PyTorch Core 。

 

​接下来,给大家介绍一下租用GPU做实验的方法,我们是在智星云租用的GPU,使用体验很好。具体大家可以参考:智星云官网: http://www.ai-galaxy.cn/,淘宝店:https://shop36573300.taobao.com/公众号: 智星AI

 

                                      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值