做深度学习这么多年还不会挑GPU?这儿有份选购全攻略

2019 年 4 月 11 日 大数据文摘

大数据文摘出品

来源:timdettmers

编译:刘佳玮、钱天培


深度学习是一个对算力要求很高的领域。GPU的选择将从根本上决定你的深度学习体验。


一个好的GPU可以让你快速获得实践经验,而这些经验是正是建立专业知识的关键。如果没有这种快速的反馈,你会花费过多时间,从错误中吸取教训。


那么,现在问题来了。


如果你想购买新的GPU,应该关注哪些指标呢?GPU RAM,内核,还是Tensor Core?


各种厂商五花八门。英伟达,英特尔,还是谷歌?我又应该选择哪家的产品?


本文将深入研究这些问题,并将为你提供建议,帮助你做出适合的选择。


本文结构如下:


首先,我会讨论拥有多个GPU的用处,然后讨论所有相关的硬件选项,如英伟达和AMD GPU,Intel Xeon Phis,Google TPU和初创公司的硬件。然后我会讨论哪些GPU规格指标是深度学习性能的良好指标。最后,我会总结GPU的选购建议。


只想阅读最终采购建议的同学可以直接跳到文末。


多个GPU能让我的训练更快吗?


我的核心观点是,卷积和循环网络很容易并行化,特别是当你只使用一台计算机或4个GPU时。然而,包括Google的Transformer在内的全连接网络并不能简单并行,并且需要专门的算法才能很好地运行。


图1:主计算机中的设置:你可以看到三个GPU和一个InfiniBand网卡。这是一个很好的深度学习配置吗?


像TensorFlow和PyTorch这样的现代库非常适合并行化循环和卷积网络。以卷积为例,2/3/4 块GPU的期望加速大约分别是1.9x / 2.8x / 3.5x。对于循环网络,序列长度是最重要的参数,在常见的NLP问题中,对应的加速比与卷积网络相似或稍差。


然而,全连接网络(包括Transformer)通常具有较差的数据并行性能,并且需要更高级的算法来加速网络的这些部分。如果你在多个GPU上运行Transformer,你应该也尝试在单个GPU上运行,并比较查看是否真的有加速。


在不考虑并行性的情况下使用多个GPU


除了并行运算,拥有多个GPU能带来的更显著帮助是,让你可以在每个GPU上单独运行多个算法或实验。


高效的超参数搜索是多个GPU的最常见用途。虽然你没有获得加速,但你可以获得有关不同超参数设置或不同网络架构的性能的更快信息。这对新手来说也非常有用,因为你可以快速获得训练不熟悉的深度学习架构的见解和经验。


以这种方式使用多个GPU通常比通过数据并行在多个GPU上运行单个网络更有用。购买多个GPU时,请记住这一点:当你购买多个GPU时,用于提高并行性的指标(如PCIe通道数量)并不重要。


另外,请注意,单个GPU应该足以满足几乎所有任务的要求。单GPU的体验范围与4个 GPU的体验不会差太多。唯一的区别是,你可以在给定时间内使用多个GPU运行更多实验。


你该如何选择:英伟达 vs AMD vs 英特尔 vs 谷歌 vs 亚马逊 vs 微软 vs 初创公司


英伟达:领导者


英伟达的标准库使得在CUDA中建立第一个深度学习库非常容易,而AMD的OpenCL没有这样强大的标准库。这一早期优势与英伟达强大的社区支持相结合,迅速增加了CUDA社区的规模。这意味着只要你使用英伟达 GPU,如果出现问题,你将很容易找到支持;如果你自己编写CUDA,你会找到支持和建议;并且你会发现大多数深度学习库都对英伟达 GPU提供最佳支持。在过去的几个月里,英伟达仍将更多的资源投入到软件中。例如,Apex库支持在PyTorch中实现稳定的16位梯度,还包括融合快速优化器,如FusedAdam。总的来说,软件是英伟达 GPU非常强大的一步。


另一方面,英伟达现在有一项政策,即只允许Tesla GPU在数据中心使用CUDA,而不允许GTX或RTX卡。目前外界尚不清楚“数据中心”的严格定义,但这意味着,由于担心法律问题,组织和大学将被迫购买价格昂贵且性价比低的Tesla GPU。然而,Tesla卡与GTX和RTX卡相比没有真正的优势,成本却高达10倍。


英伟达可以在没有任何重大阻力的情况下做到这一点,正表明了他们垄断的力量——他们可以随心所欲地做,我们必须接受这些条款。如果你选择了英伟达 GPU在社区和支持方面的主要优势,你也需要同时接受随时可能出现的各种限制。


AMD:功能强大但缺乏支持


HIP通过ROCm将英伟达和AMD GPU统一为一种通用编程语言,在编译成GPU组件之前编译成相应的GPU语言。如果我们将所有GPU代码都放在HIP中,这将是一个重要的里程碑,但这很困难,其中就包含了移植TensorFlow和PyTorch代码库。 TensorFlow和PyTorch对AMD GPU有一些支持,所有主要网络都可以在AMD GPU上运行,但如果你想开发新网络,可能会遗漏一些细节,这可能会阻止你实现你需要的东西。 ROCm社区也不是太大,因此很难直接解决问题。 AMD对他们的深度学习软件投入很少,因此不能指望英伟达和AMD之间的软件差距将在未来缩小。


目前,AMD GPU的性能还可以。它们现在具有16位计算能力,这是一个重要的里程碑,但英伟达 GPU的Tensor核心为Transformer和卷积网络提供了更高的计算性能(不过对于词级循环网络而言,没有提高那么多)。


总的来说,我认为对于那些只希望GPU能够顺利运行的普通用户,我不太推荐AMD GPU。更有经验的用户应该可以减少问题,并且通过支持AMD GPU和ROCm / HIP开发人员,他们有助于打击英伟达的垄断地位,因为这将使每个人长期受益。如果你是GPU开发人员并希望为GPU计算做出重要贡献,那么AMD GPU可能是长期发挥良好影响力的最佳方式。对于其他所有人来说,英伟达 GPU可能是更安全的选择。


英特尔:努力追赶


以我的亲身经历而言,我对英特尔Xeon Phis非常失望,我不认为它们是英伟达或AMD显卡的真正竞争对手,因此我只简单描述一下:如果你决定使用Xeon Phi,你可能会遇到以下问题:很差的技术支持,代码运行得比CPU还慢,编写优化代码困难,没有完全支持C ++ 11特性,不支持某些重要的GPU设计模式,难以兼容依赖BLAS例程的其他库(NumPy和SciPy)等等。


除了Xeon Phi之外,我非常期待英特尔的Nervana神经网络处理器(NNP),因为它的规格对GPU开发人员而言非常强大,并且它将允许新的算法,这可能重新定义神经网络的使用方式,但这一项目已经无休止地延迟,有传言称大部分研发都打了水漂。NNP计划于2019年第三季度/第四季度开始。如果你想等待那么长时间,请记住,从AMD和英特尔自己的Xeon Phi可以看出,好的硬件并非一切。可能直到2020年或2021年,NNP才有能力与GPU或TPU竞争


谷歌:强大,廉价的按需处理


Google TPU已发展成为一种非常成熟的基于云的产品,具有成本效益。理解TPU的最简单方法是将其视为打包在一起的多个专用GPU——而且只为了一个目的:进行快速矩阵乘法。如果我们看一下Tensor-Core-enabled V100与TPU v2的性能指标,我们发现两个系统在运行ResNet50模型时的性能几乎相同。


但是,Google TPU更具成本效益。由于TPU具有复杂的并行化基础架构,如果你使用多于1个云TPU(相当于4个GPU),TPU将比GPU具有更大的速度优势。


尽管仍在试验中,但PyTorch现在也支持TPU了,这将有助于加强TPU社区和生态系统。


TPU仍然存在一些各种各样的问题,例如,2018年2月的一份报告称,当使用LSTM时TPUv2没有收敛。我至今没有找到该问题已经解决的报道。


另一方面,在TPU上训练大型Transformer取得了巨大成功。GPT-2,BERT和机器翻译模型可以在TPU上非常有效地进行训练。根据我的估计,TPU比GPU快约56%,并且由于它们与云GPU相比价格较低,因此它们是大型Transformer项目的绝佳选择。


然而,在TPU上训练大型模型的一个问题可能是累积成本。TPU具有高性能,最适合在训练阶段使用。在原型设计阶段,你应该关闭云端来降低成本。因此,最佳选择是,在你的个人GPU上进行原型设计,然后在TPU训练最终模型。


总而言之,目前TPU似乎最适合用于训练卷积网络或大型Transformer,并且应该结合其他计算资源共同使用,而不是作为主要的深度学习资源。


亚马逊AWS和微软Azure:可靠但昂贵


来自Amazon AWS和微软Azure的GPU实例非常具有吸引力,因为你可以根据需要轻松扩展和缩小实例。这对于赶paper或者更大的一次性项目非常有用。然而,与TPU类似,成本会随实例数增长而迅速累加。目前,GPU云实例太昂贵而无法单独使用,我建议在云中启动最终训练工作之前,使用一些专用的廉价GPU进行原型设计。


初创公司:具有革命性的硬件概念但缺乏软件


有一系列初创公司旨在生产下一代深度学习硬件。这些公司通常拥有出色的理论设计,然后被谷歌、英特尔或其他公司收购,以获得完成设计和生产芯片所需的资金。下一代芯片的开发成本十分昂贵(约10亿美元)。一旦这个阶段完成,软件就成了主要问题。目前,还没有初创公司能够生产出适用于当前深度学习硬件的软件。需要开发一个完整的软件套件才能具有竞争力,这一点从AMD与英伟达的例子中可以清楚地看出:AMD拥有出色的硬件,但只有90%的软件——这还不足以与英伟达竞争。


目前,没有任何公司能够完成所有的硬件和软件步骤。英特尔NNP可能是最接近的,但目前来看,我们不能指望在2020年或2021年之前出现有竞争力的产品。所以目前我们需要继续使用GPU和TPU。


因此,你就先别指望初创公司的新硬件了。


一个优秀的GPU应该拥有什么性能?


训练深度学习模型时,GPU性能中最重要的特性到底是什么?是CUDA Core吗?还是时钟频率?或是RAM大小?


GPU的选择实在令人困惑:16位计算能力,Tensor Core,没有Tensor Core的16位GPU,多代GPU仍然可行(Turning,Volta,Maxwell)。


所幸我们仍然有一些可靠的性能指标,我们可以使用这些指标作为经验法则。这里有一些针对不同深度学习架构的优先级指南:


卷积网络和Transformer:Tensor Core> FLOP>存储器带宽> 16位计算能力


循环网络:存储器带宽> 16位计算能力>Tensor Core> FLOP


解释如下:如果我想使用卷积网络,我应该首先优先考虑具有Tensor Core的GPU,然后是高FLOP指数,然后是高内存带宽,然后是具有16位计算能力的GPU 。在确定优先级时,你也需要根据模型大小选择具有足够内存的GPU。


为什么优先级是这样的呢?


GPU可以快速实现两个最重要的张量操作:矩阵乘法和卷积。


考虑矩阵乘法A * B = C。将A,B的存储器复制到芯片上比计算A * B更昂贵。这意味着,如果你想使用LSTM和其他经常进行大量小矩阵乘法的循环网络,则内存带宽是GPU最重要的特性。矩阵乘法越小,内存带宽就越重要。


相反,卷积受计算速度的约束。因此,GPU上的TFLOP是ResNets和其他卷积架构性能的最佳指标。Tensor Core可以明显增加FLOP。


图2:GPU和TPU的标准化性能数据。越高越好。RTX卡假定16位计算。RNN编号指的是长度小于100的短序列的biLSTM性能。使用PyTorch 1.0.1和CUDA 10完成基准测试。


性价比分析


GPU的性价比可能是选择GPU的最重要标准。本文的性能分析如下:

1.对于Transformer,我对Transformer-XL和BERT进行了基准测试。

2.对于词级和字符级RNN,我对最先进的biLSTM模型进行了基准测试。

3.(1)和(2)中的基准测试是针对Titan Xp,Titan RTX和RTX 2080 Ti进行的。对于其他卡,我线性地缩放了性能差异。

4.我使用现有的CNN基准。

5.我使用亚马逊和eBay的平均成本作为GPU的参考成本。


图3:卷积网络(CNN),循环网络(RNN)和Transformer的标准化性能/成本。越高越好。RTX 2060的成本效率是Tesla V100的5倍以上。RNN编号指的是长度小于100的短序列的biLSTM性能。使用PyTorch 1.0.1和CUDA 10完成基准测试。


从这些数据中,我们看到RTX 2060比RTX 2070,RTX 2080或RTX 2080 Ti更具性价比。为什么会这样呢?使用Tensor Core进行16位计算的能力远远超过拥有更多Tensor Core核心的更大的硬件。使用RTX 2060,你可以以最低的价格获得这些功能。


然而,这种分析存在一些应该考虑的偏差:

1.这种分析强烈倾向于较小的显卡。较小而经济高效的GPU可能没有足够的内存来运行你真正感兴趣的模型!

2.GTX 10xx卡标价过高:目前,由于游戏玩家不喜欢RTX卡,GTX 10XX卡似乎加价格被哄抬过高。

3.单GPU偏置:一台具有4个低成本卡(4x RTX 2080 Ti)的计算机比具有最高成本/效率卡(8x RTX 2060)的2台计算机更具性价比。


警告:多GPU RTX发热问题


如果你使用多个彼此相邻的GPU,那么RTX 2080 Ti和其他具有标准双风扇的RTX GPU就存在问题了——尤其是一台计算机中的多个RTX 2080 Ti。多个RTX 2080和RTX 2070也会受到影响。


RTX卡上的风扇是由英伟达开发的一种新设计,用于改善运行单GPU的游戏玩家的体验(静音,低发热)。但是,如果你使用具有此开放式双风扇设计的多个GPU,那么这种设计非常糟糕。如果你想使用多个彼此相邻的RTX卡(直接在下一个PCIe插槽中),那么你应该获得具有“鼓风式”单风扇设计的版本。对于RTX 2080 Ti卡尤其如此。华硕和PNY目前市场上有RTX 2080 Ti型号,带有鼓风式风扇。如果你使用两个RTX 2070,你可以使用任何风扇,但是,我仍愿意选择使用一个鼓风式风扇,以便在彼此旁边运行2个以上的RTX 2070。


所需内存大小和16位训练


GPU上的内存对于某些应用程序(如计算机视觉,机器翻译和某些其他NLP应用程序)至关重要,你可能认为RTX 2070具有性价比,但其内存太小,只有8 GB。但请注意,通过16位训练,你几乎可以拥有16 GB的内存。任何标准型号都可以被轻松放入RTX 2070。


RTX 2080和RTX 2080 Ti也是如此。但请注意,在大多数软件框架中,16位运算并非默认选项,因为某些框架以32位存储权重以执行更精确的梯度下降。一个好的经验法则是,使用16位计算往往可以节省50%的内存。因此,16位8GB内存的大小与12 GB 32位内存大致相当。


GPU推荐


目前,我的主要建议是购买RTX 2070 GPU并使用16位训练。我永远不会建议购买XP Titan,Titan V,任何Quadro显卡或任何Founders Edition GPU。但是,有一些特定的GPU也有它们的用武之处:

1.如果要额外内存的话,我建议使用RTX 2080 Ti。如果你真的需要大量的内存,RTX Titan是最好的选择——但要确保你真的需要那么多内存!

2.如果想要额外的性能,我建议使用RTX 2080 Ti。

3.如果你缺钱,我会推荐eBay上的任何便宜的GTX 10XX卡(取决于你需要多少内存)或RTX 2060。如果太贵,可以看看Colab。


https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d)


4.如果你只想入门深度学习,GTX 1060(6GB)是一个很好的选择。

5.如果你已经拥有GTX 1070或更高版本,请再等等。除非你使用大型Transformer,否则升级是不值得的。

6.如果你想快速学习深度学习,建议使用多个GTX 1060(6GB)。


云端深度学习


AWS / Azure上的GPU实例和Google Cloud中的TPU都是深度学习的可行选择。虽然TPU稍微便宜一点,但它缺乏云GPU的多功能性和灵活性。


TPU可能是训练物体识别或Transformer模型的首选武器。对于其他工作负载,云GPU是更安全的选择——云实例的好处是你可以随时在GPU和TPU之间切换,甚至可以同时使用两者。


但是,请注意这样做的代价:如果你一直使用AWS / Azure完成工作,那么你将无法学到如何在个人GPU上工作的技能,并且你也无法获得使用TPU的技能。如果你一直使用个人GPU,则无法学会通过云扩展到更多GPU / TPU的技能。


如果你使用TPU,当你需要完整功能时,你可能就只能使用TensorFlow了。学习云GPU / TPU工作流的代价是很高,如果你正在面临TPU、云GPU和个人GPU的选择,你应该意识到这个代价。


另一个问题是,何时使用云服务?如果你试图学习深度学习,或者你需要搭建原型,那么个人GPU可能是最好的选择,因为云实例可能很昂贵。


但是,一旦你找到了良好的深度网络配置,并且你只想使用数据并行性训练模型,那么使用云实例是一种可靠的方法。小型GPU足以进行原型设计,而人们可以依靠云计算的强大功能来扩展到更大的实验。


如果你的资金不足,云计算实例也可能是一个很好的解决方案:在CPU上进行原型设计,然后在GPU / TPU实例上实验,以便快速进行训练。这不是最好的工作流程,因为在CPU上做原型设计十分痛苦,但它可以是一个具有高性价比的替代方案。


结论


总的来说,在GPU选取上,我推荐以下三个策略:

1.坚持使用GTX 1070或更好的GPU

2.购买RTX GPU

3.使用某种GPU进行原型设计,然后在TPU或云GPU上进行并行训练。


更多建议


最佳GPU:RTX 2070 


最差GPU:任何Tesla卡、任何Quadro卡、任何初创公司的卡; Titan RTX,Titan V,Titan XP


高性价比但价格昂贵:RTX 2070


高性价比且价格便宜:RTX 2060,GTX 1060(6GB)


有点小钱:GTX 1060(6GB)


没钱:GTX 1050 Ti(4GB)或者:CPU(原型)+ AWS / TPU(训练);或者Colab。


参加Kaggle:RTX 2070。如果你没有足够的钱,可以从eBay购买GTX 1060(6GB)或GTX Titan(Pascal)进行原型设计,然后使用AWS进行最终训练。使用fastai库。

计算机视觉或机器翻译研究员:GTX 2080 Ti(采用鼓风机设计)。如果你训练非常大的网络,请使用RTX Titans。

NLP研究员:16位的RTX 2080 Ti。


想认真学习深度学习:从RTX 2070开始。在6-9个月后购买更多RTX 2070。根据你接下来选择的领域(创业,Kaggle,研究,应用深度学习),卖掉你的GPU,并在大约两年后购买更合适的东西。


只想玩一玩试深度学习:GTX 1050 Ti(4或2GB)。这通常适合你的标准桌面,不需要新的PSU。如果装得下的话,不要购买新电脑!


相关报道:

http://timdettmers.com/2019/04/03/which-gpu-for-deep-learning/



实习/全职编辑记者招聘ing

加入我们,亲身体验一家专业科技媒体采写的每个细节,在最有前景的行业,和一群遍布全球最优秀的人一起成长。坐标北京·清华东门,在大数据文摘主页对话页回复“招聘”了解详情。简历请直接发送至zz@bigdatadigest.cn


志愿者介绍

后台回复志愿者”加入我们

点「在看」的人都变好看了哦
登录查看更多
1

相关内容

最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
谷歌机器学习速成课程中文版pdf
专知会员服务
145+阅读 · 2019年12月4日
【Google论文】ALBERT:自我监督学习语言表达的精简BERT
专知会员服务
23+阅读 · 2019年11月4日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
229+阅读 · 2019年10月12日
教程 | 从零开始搭建『深度学习』GPU开发环境
机器学习算法与Python学习
8+阅读 · 2019年10月28日
人工智能 | 深度学习机装机流程与体验
沈浩老师
7+阅读 · 2018年1月7日
深度学习的GPU:深度学习中使用GPU的经验和建议
数据挖掘入门与实战
11+阅读 · 2018年1月3日
为个人深度学习机器选择合适的配置
AI研习社
3+阅读 · 2017年12月2日
Pytorch还是Tensorflow?英伟达工程师帮你总结了
人工智能头条
5+阅读 · 2017年10月27日
TResNet: High Performance GPU-Dedicated Architecture
Arxiv
8+阅读 · 2020年3月30日
Arxiv
8+阅读 · 2019年5月20日
Universal Transformers
Arxiv
5+阅读 · 2019年3月5日
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
3+阅读 · 2018年6月1日
Arxiv
27+阅读 · 2017年12月6日
Arxiv
3+阅读 · 2017年10月1日
VIP会员
相关VIP内容
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
谷歌机器学习速成课程中文版pdf
专知会员服务
145+阅读 · 2019年12月4日
【Google论文】ALBERT:自我监督学习语言表达的精简BERT
专知会员服务
23+阅读 · 2019年11月4日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
229+阅读 · 2019年10月12日
相关资讯
教程 | 从零开始搭建『深度学习』GPU开发环境
机器学习算法与Python学习
8+阅读 · 2019年10月28日
人工智能 | 深度学习机装机流程与体验
沈浩老师
7+阅读 · 2018年1月7日
深度学习的GPU:深度学习中使用GPU的经验和建议
数据挖掘入门与实战
11+阅读 · 2018年1月3日
为个人深度学习机器选择合适的配置
AI研习社
3+阅读 · 2017年12月2日
Pytorch还是Tensorflow?英伟达工程师帮你总结了
人工智能头条
5+阅读 · 2017年10月27日
相关论文
TResNet: High Performance GPU-Dedicated Architecture
Arxiv
8+阅读 · 2020年3月30日
Arxiv
8+阅读 · 2019年5月20日
Universal Transformers
Arxiv
5+阅读 · 2019年3月5日
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
3+阅读 · 2018年6月1日
Arxiv
27+阅读 · 2017年12月6日
Arxiv
3+阅读 · 2017年10月1日
Top
微信扫码咨询专知VIP会员