实战!对比的混合精度训练

核心提示雷锋网 AI 科技评论按:本文作者 Sanyam Bhutani 是一名机器学习和计算机视觉领域的自由职业者兼 Fast.ai 研究员。在文章中,他将 2080Ti 与 1080Ti 就训练时长进行了全方位的对比。雷锋网 AI 科技评论对此

雷科技评论出版社:本文作者Sanyam Bhutani是一名自由职业者,也是机器学习和计算机视觉领域的Fast.ai研究员。在文章中,他将2080Ti和1080Ti在训练时长上进行了对比。雷科技评论对此进行了详细的编译。

序

特别感谢:没有Tuatini GODARD的帮助,这种基准比较是不可能的。如果你想了解他更多,你可以看看这篇采访:

链接:https://hacker noon . com/interview-with-deep-learning-freelancer-tua TiNi-godard-e661a 3995 fb1

我还要感谢Laurae为这篇文章的修改提出了许多宝贵的建议。

对了,fastai最新版本刚刚上线,想必大家都有兴趣:course.fast.ai

备注:本文非fastai赞助。我只是从中学到了很多。个人认为,如果你是深度学习新手,我强烈推荐这个平台给你。

让我们言归正传。这是一个可以解释FP16本质的简单操作演示,展示了基于基准测试的混合精度训练是如何进行的。

注意:这不是一篇关于基准性能对比的文章,而是基于2个构建的2080Ti和1080Ti的训练时长对比。

对此,文章中会有更详细的介绍。

在此之前,让我们快速看一下中子的建模:

FP16是谁的圣物?为什么需要关注?

简单来说,深度学习就是基于GPU处理的一堆矩阵运算,运算依赖于FP32/32位浮点矩阵。

随着新架构和CUDA的发布,FP32/32位浮点矩阵的运算越来越简单。这也意味着,只要我们使用一个与过去相比只有一半大小的张量,我们就可以通过增加批量来处理更多的情况;另外,相比FP32进行训练,FP16可以有效减少GPU RAM的使用。

用简单的英语来说,可以在代码中用*2代替。

现在FP16运算的张量核变得更快了,只需要少量的GPU RAM就可以提升速度和性能。

等等,没那么简单。

我们仍然有半准确性的问题,这意味着:

更新的重量数据不准确。渐变会溢出。激活或丢失都可能导致溢出。精度损失明显。接下来和大家聊聊混合精准训练。

混合精确训练

为了避免上述问题,在FP16运行过程中可能造成精度损失的部分,我们会及时切换回FP32。这就是所谓的混合精确训练。

步骤1:使用FP16尽可能加快操作速度:

将输入张量改为fp16张量,加快系统运行速度。

步骤2:使用FP32计算损失值:

将张量切换回FP32以计算损失值,从而避免下溢/上溢。

第三步:

首先更新FP32张量的权重,然后切换回FP16进行正反向迭代。

步骤4:通过乘以或除以缩放因子来完成损耗缩放:

通过乘以或除以损耗缩放因子来缩放损耗。

总结就是:

fast.ai上的混合精度训练

正如人们所预料的那样,图书馆里的混合精确训练就像是一种方式

转换为

就这么简单。

如果想了解详细的操作流程,可以点击:https://docs.fast.ai/callbacks.fp16.html

这个模块允许我们使用FP16来改变训练过程中的正向和反向迭代,具有加速的效果。

在内部,回调函数可以确保所有模型参数都被转换为FP16,并且保存了FP32的副本。FP 32副本主要用于优化器上的更新;FP 16的参数用于梯度计算。这些都可以有效避免学习率低的下溢现象。

RTX 2080体训与GTX 1080体训混合精度训练效果比较

设置详细信息

你可以从这里了解笔记本的基准设置。

软件设置:

cu10+对应的是Cudnn的最新版本。

PyTorch+fastai库

最新版本的Nvidia驱动程序

硬件配置:

我们的硬件配置略有不同,所以要保留最终值。

图阿蒂尼配置:

i7-7700K

32GB内存

GTX 1080Ti

我的配置:

i7-8700K

64GB内存

RTX 2080Ti

因为运算过程不是RAM密集型或CPU密集型的,所以我们选择在这里分享我们的结果。

让我们快速浏览一遍:

输入CIFAR-100数据以调整图像大小,并启用数据增强以在fastai支持的所有Resnet上运行预期输出:

在所有混合精度训练测试中获得更好的结果。图表结果

以下是每个ResNets上培训时间的比较总结。

注意:数值越小越好。

Resnet 18

最小的Resnet。

秒时间单位:

性能比率:

Resnet 34

秒时间单位:

性能比率:

Resnet 50

秒时间单位:

性能比率:

Resnet 152

秒时间单位:

性能比率:

使用Nvidia Apex进行世界一流的语言建模

为了让混合精度训练和FP16训练的实验成为可能,Nvidia专门发布了一套实用工具Nvidia APEX,简化Pytorch中的混合精度训练和分布式训练。Apex的主要目的是以最快的速度为用户提供最新的实用工具。

开源网站:https://github.com/NVIDIA/apex

它通过一些例子向我们展示了你可以直接运行这个工具,而不需要太多的调整——这似乎是对高速旋转的另一个很好的测试。

语言模型比较:

Github开源中的例子基于语言建模任务训练了一个多层RNN。默认情况下,训练脚本使用Wikitext-2数据集。训练模型可用于生成生成新文本的脚本。

其实我们并不关心测试结果——我们主要是想比较基于混合精度训练和全精度训练的30轮训练实例,批量相同,但设置不同。

启用fp16就像在运行代码时传递“—fp16”参数一样简单。APEX可以在我们已经设置好的PyTorch环境上运行。总的来说,这似乎是一个完美的选择。

以下是相关结果:

秒时间单位

性能比率:

结论

虽然RTX卡在性能上比1080Ti强大很多,特别是对于小网络,但是训练时间上的差别并没有想象中那么明显。

如果你决定尝试混合精确训练,我会在这里给你一些关键提示:

更大的批量:在笔记本基准测试中,我们发现batch_size高出近1.8倍,这与我们尝试过的所有Resnet样本结果一致。

比全精度训练更快:我们以结果差异最大的Resnet 101为例。在2080Ti上进行全精度训练的时间是混合精度训练的1.18倍,在2080Ti上进行全精度训练的时间是混合精度训练的1.13倍。即使是“更小”的Resnet34和Resnet50,我们发现混合精度训练在训练时的加速效果也很小。

相同精度值:我们没有发现混合精度训练导致精度下降的现象。

确保使用最新版本的CUDA和Nvidia驱动程序。这里需要强调的是,在测试期间,如果环境没有更新,是不可能运行代码的。

更多关注fastai和NVIDIA Apex通过https://hacker noon . com/RTX-2080 ti-vs-GTX-1080 ti-Fastai-mixed-precision-training-comparisons-on-cifar-100-761 D8 f 615d 7 f

雷科技评论

 
友情链接
鄂ICP备19019357号-22