社会焦点

【组图】实用指南:如何为你的深度学习任务挑选最合适的 GPU?(最新版)

字号+ 作者: 来源: 2017-03-21

【组图】实用指南:如何为你的深度学习任务挑选最合适的 GPU?(最新版),gpu编程指南 pdf,看门狗gpu最大缓冲格数,gpu时钟和显存时钟,gpu占用过高怎么办

文章作者 Tim Dettmers 系瑞士卢加诺大学信息学硕士,热衷于开发自己的 GPU 集群和算法来加速深度学习。这篇博文最早版本发布于 2014 年 8 月,之后随着相关技术的发展和硬件的更新,Dettmers 也在不断对本文进行修正。2016 年 7 月 18 日,机器之心曾经推出文章。当时,机器之心呈现的文章是其 2016 年 6 月 25 日的更新(之前已经有五次更新)。接着,2016 年 7 月 23 日以及 2017 年 3 月 19 日,作者又分别根据硬件发展情况两度更新博文:2016 年 7 月 23 日主要添加了 Titan X Pascal 以及 GTX 1060 并更新了相应推荐;2017 年 3 月 19 日添加了 GTX 1080 Ti 并对博客进行了较大调整。本文依据的是 3 月 19 日更新后的最新版本。另外,除了 GPU 之外,深度学习还需要其它一些硬件基础,详情可参阅机器之心之前的文章《》。

深度学习是一个计算密集型领域,而 GPU 的选择将从根本上决定你的深度学习实验。没有 GPU,一个实验也许花费数月才能完成,或者实验运行一天却只关闭了被选择的参数;而一个良好稳定的 GPU 可让你在深度学习网络中快速迭代,在数天、数小时、数分钟内完成实验,而不是数月、数天、数小时。所以,购买 GPU 时正确的选择很关键。那么,如何选择一个适合你的 GPU 呢?这正是本篇博文探讨的问题,帮助你做出正确选择。

对于深度学习初学者来说,拥有一个快速 GPU 非常重要,因为它可以使你迅速获得有助于构建专业知识的实践经验,这些专业知识可以帮助你将深度学习应用到新问题上。没有这种迅速反馈,从错误中汲取经验将会花费太多时间,在继续深度学习过程中也会感到受挫和沮丧。在 GPU 的帮助下,我很快就学会了如何在一系列 Kaggle 竞赛中应用深度学习,并且在 Partly Sunny with a Chance of Hashtags Kaggle 竞赛上获得了第二名,竞赛内容是通过一个给定推文预测气象评分。比赛中,我使用了一个相当大的两层深度神经网络(带有两个修正线性单元和 dropout,用于正则化),差点就没办法把这个深度网络塞进我的 6G GPU 内存。

应该使用多个 GPU 吗?

在 GPU 的帮助下,深度学习可以完成很多事情,这让我感到兴奋。我投身到多 GPU 的领域之中,用 InfiniBand 40Gbit/s 互连组装了小型 GPU 集群。我疯狂地想要知道多个 GPU 能否获得更好的结果。我很快发现,不仅很难在多个 GPU 上并行神经网络。而且对普通的密集神经网络来说,加速效果也很一般。小型神经网络可以并行并且有效地利用数据并行性,但对于大一点的神经网络来说,例如我在 Partly Sunny with a Chance of Hashtags Kaggle 比赛中使用的,几乎没有加速效果。

随后,我进一步试验,对比 32 位方法,我开发了带有模型并行性的新型 8 位压缩技术,该技术能更有效地并行处理密集或全连接神经网络层。

然而,我也发现,并行化也会让人沮丧得发狂。针对一系列问题,我天真地优化了并行算法,结果发现:考虑到你投入的精力,即使使用优化过的自定义代码,多个 GPU 上的并行注意的效果也并不好。你需要非常留意你的硬件及其与深度学习算法交互的方式,这样你一开始就能衡量你是否可以受益于并行化。

  

【组图】实用指南:如何为你的深度学习任务挑选最合适的 GPU?(最新版)

我的计算机主机设置:你可以看到 3 个 GXT Titan 和一个 InfiniBand 卡。对于深度学习来说,这是一个好的设置吗?

自那时起,GPU 的并行性支持越来越普遍,但距离全面可用和有效还差的很远。目前,在 GPU 和计算机中实现有效算法的唯一深度学习库是 CNTK,它使用微软的 1 比特量子化(有效)和 block momentum(很有效)的特殊并行化算法。通过 CNTK 和一个包含 96 块 GPU 的聚类,你可以拥有一个大约 90x-95x 的新线性速度。Pytorch 也许是跨机器支持有效并行化的库,但是,库目前还不存在。如果你想要在一台机器上做并行,那么,CNTK、Torch 和 Pytorch 是你的主要选择,这些库具备良好的加速(3.6x-3.8x),并在一台包含 4 至 8 块 GPU 的机器之中预定义了并行化算法。也有其他支持并行化的库,但它们不是慢(比如 2x-3x 的 TensorFlow)就是难于用于多 GPU (Theano),或者兼而有之。

如果你重视并行,我建议你使用 Pytorch 或 CNTK。

使用多 GPU 而无并行

使用多 GPU 的另外一个好处是:即使没有并行算法,你也可以分别在每个 GPU 上运行多个算法或实验。速度没有变快,但是你能一次性通过使用不同算法或参数得到更多关于性能信息。如果你的主要目标是尽快获得深度学习经验,这是非常有用的,而且对于想同时尝试新算法不同版本的研究人员来说,这也非常有用。

如果你想要学习深度学习,这也具有心理上的重要性。执行任务的间隔以及得到反馈信息的时间越短,大脑越能将相关记忆片段整合成连贯画面。如果你在小数据集上使用独立的 GPU 训练两个卷积网络,你就能更快地知道什么对于性能优良来说是重要的;你将更容易地检测到交叉验证误差中的模式并正确地解释它们。你也会发现暗示需要添加、移除或调整哪些参数与层的模式。

所以总体而言,几乎对于所有任务来说,一个 GPU 已经足够了,但是加速深度学习模型,多个 GPU 会变得越来越重要。如果你想快速学习深度学习,多个廉价的 GPU 也很好。我个人宁愿使用多个小的 GPU,而不是一个大的 GPU,即使是出于研究实验的没目的。

那么,我该选择哪类加速器呢?英伟达 GPU、AMD GUP 还是英特尔的 Xeon Phi?

英伟达的标准库使得在 CUDA 中建立第一个深度学习库很容易,但没有适合 AMD 的 OpenCL 那样强大的标准库。目前还没有适合 AMD 显卡的深度学习库——所以,只能选择英伟达了。即使未来一些 OpenCL 库可用,我仍会坚持使用英伟达:因为对于 CUDA 来说,GPU 计算或者 GPGPU 社区是很大的,对于 OpenCL 来说,则相对较小。因此,在 CUDA 社区,有现成的好的开源解决方案和为编程提供可靠建议。

此外,英伟达现在为深度学习赌上一切,即使深度学习还只是处于婴儿期。押注获得了回报。尽管现在其他公司也往深度学习投入了钱和精力,但由于开始的晚,目前依然很落后。目前,除了 NVIDIA-CUDA,其他任何用于深度学习的软硬结合的选择都会让你受挫。

转载请注明出处。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章