雷科技评论出版社:本文作者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
雷科技评论


