深度学习需要哪些GPU:我在深度学习中使用GPU的经验和建议

Sytek梭鱼智能_Digilent一级代理    技术分享    深度学习需要哪些GPU:我在深度学习中使用GPU的经验和建议

深度学习是一个具有强烈计算要求的领域,GPU的选择将从根本上决定您的深度学习体验。但是,如果您想购买新的GPU,哪些功能很重要?GPU RAM,内核,张量内核?如何做出具有成本效益的选择?这篇博文将深入研究这些问题,并将为您提供建议,帮助您做出适合您的选择。
TL; DR
拥有快速GPU是一个非常重要的方面,当一个人开始学习深度学习,因为这可以快速获得实践经验,这是建立专业知识的关键,您将能够深入学习新问题。如果没有这种快速的反馈,只需要花费太多时间来从错误中吸取教训,继续进行深度学习可能会让人感到沮丧和沮丧。通过GPU,我很快学会了如何在一系列Kaggle比赛中应用深度学习,并且通过深度学习方法,我在Chaly of Hashtags Kaggle比赛中获得了Partly Sunny的第二名,这是预测给定推文的天气评级的任务。在比赛中,我使用了一个相当大的两层深度神经网络,带有整流的线性单元和用于正则化的丢失,这个深网几乎不适合我的6GB GPU内存。在比赛中为我提供动力的GTX Titan GPU是我在比赛中获得第二名的主要因素。

概观

此博客文章的结构如下。首先,我讨论了拥有多个GPU的有用性,然后讨论了所有相关的硬件选项,如NVIDIA和AMD GPU,Intel Xeon Phis,Google TPU和新的启动硬件。然后我讨论GPU规范是深度学习性能的良好指标。主要部分讨论了性能和成本效率分析。我总结了一般和更具体的GPU建议。

多个GPU让我的训练更快?

当我开始使用多个GPU时,我很高兴使用数据并行来提高Kaggle竞赛的运行时性能。但是,我发现使用多个GPU很难获得直接的加速。我很好奇这个问题,因此我开始研究深度学习中的并行性。我分析了深度学习架构中的并行化,开发了一种8位量化技术,将GPU集群的加速从23x增加到50x,用于96 GPU的系统,并在ICLR 2016上发表了我的研究成果。

主要的见解是卷积和循环网络很容易并行化,特别是如果你只使用一台计算机或4个GPU。然而,包括变换器在内的完全连接的网络并不易于并行化,并且需要专门的算法才能很好地运行。

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

像TensorFlow和PyTorch这样的现代库非常适合并行化循环和卷积网络,对于卷积,对于2/3/4 GPU,你可以期望加速大约1.9x / 2.8x / 3.5x。对于循环网络,序列长度是最重要的参数,对于常见的NLP问题,与卷积网络相比,可以预期相似或稍差的加速。然而,完全连接的网络(包括变压器)通常具有较差的数据并行性能,并且需要更高级的算法来加速网络的这些部分。如果您在多个GPU上运行变换器,您应该尝试在1 GPU上运行它并查看它是否更快。

在没有并行性的情况下使用多个GPU

即使您没有并行化算法,使用多个GPU的另一个优点是,您可以在每个GPU上单独运行多个算法或实验。高效的超参数搜索是多个GPU的最常见用途。您没有获得加速,但您可以获得有关不同超参数设置或不同网络架构的性能的更快信息。这对新手来说也非常有用,因为您可以快速获得有关如何训练不熟悉的深度学习架构的见解和经验。

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

另外,请注意,单个GPU应该足以满足任何任务。因此,1 GPU的体验范围与4 GPU时的体验范围没有区别。唯一的区别是您可以在给定时间内使用多个GPU运行更多实验。

你的选择:NVIDIA vs AMD vs Intel vs Google vs Amazon vs Microsoft vs Fancy Startup

NVIDIA:领导者

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

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

NVIDIA可以在没有任何重大障碍的情况下做到这一点,这表明了他们垄断的力量 - 他们可以随心所欲地做,我们必须接受这些条款。如果您选择NVIDIA GPU在社区和支持方面的主要优势,您还需要接受可以随意使用的推动。

AMD:功能强大但缺乏支持

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

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

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

英特尔:努力尝试

我对英特尔Xeon Phis的个人经历非常令人失望,我不认为它们是NVIDIA或AMD显卡的真正竞争对手,因此我会保持简短:如果你决定使用Xeon Phi注意你可能会遇到穷人支持,计算代码段比CPU慢的计算问题,编写优化代码的困难,没有完全支持C ++ 11特性,不支持某些重要的GPU设计模式,与依赖BLAS例程的其他库的兼容性差(NumPy和SciPy)以及我可能还有很多其他挫折感。

除了Xeon Phi之外,我真的很期待英特尔Nervana神经网络处理器(NNP),因为它的规格在GPU开发人员的手中非常强大,并且它将允许新的算法可能重新定义神经网络的使用方式,但它已经无休止地延迟,并且有传言称大部分发达国家都在跳船。NNP计划于2019年第三季度/第四季度推出。如果您想等待那么长时间,请记住,从AMD和英特尔自己的Xeon Phi可以看出,硬件不是很好。在NNP与GPU或TPU竞争之前,可能会进入2020年或2021年。

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

Google TPU发展成为一种非常成熟的基于云的产品,具有成本效益。理解TPU的最简单方法是将其视为打包在一起的多个专用GPU,只有一个目的:进行快速矩阵乘法。如果我们看一下Tensor-Core-V100与TPUv2的性能指标,我们发现两个系统在性能上与ResNet50几乎相同[来源丢失,而不是在Wayback Machine上]。但是,Google TPU更具成本效益。由于TPU具有复杂的并行化基础架构,如果您使用多于1个云TPU(相当于4个GPU),TPU将比GPU具有更大的速度优势。

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

TPU在这里和那里仍然存在一些问题,例如,2018年2月的一份报告称当使用LSTM时TPUv2没有收敛。如果问题已经解决,我找不到来源。

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

然而,在TPU上训练大型模型的一个问题可能是累积成本。TPU具有高性能,最适合在训练阶段使用。在原型设计和推理阶段,您应该依靠非云选项来降低成本。因此,对TPU进行培训,但在您的个人GPU上进行原型设计和推断是最佳选择。

总而言之,目前,TPU似乎最适合用于训练卷积网络或大型变压器,并且应该补充其他计算资源而不是主要的深度学习资源。

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

来自Amazon AWS和Microsoft Azure的GPU实例非常具有吸引力,因为可以根据需要轻松扩展和缩小。这对于纸质期限或更大的一次性项目非常有用。然而,与TPU类似,原始成本加起来很快。目前,GPU云实例太昂贵而无法单独使用,我建议在云中启动最终培训工作之前,使用一些专用的廉价GPU进行原型设计。

花哨的启动:没有软件的革命硬件概念

有一系列初创公司旨在生产下一代深度学习硬件。这些公司通常拥有出色的理论设计,然后由谷歌/英特尔或其他公司购买,以获得完成设计和生产芯片所需的资金。对于下一代芯片(3nm),在生产芯片之前,其成本约为10亿美元。一旦这个阶段完成(没有公司设法做到这一点),主要问题是软件。没有公司能够生产出适用于当前深度学习堆栈的软件。需要开发一个完整的软件套件才能具有竞争力,这一点从AMD与NVIDIA的例子中可以清楚地看出:AMD拥有出色的硬件,但只有90%的软件 - 这还不足以与NVIDIA竞争。

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

因此,您最喜欢的初创公司的新硬件现在可以安全地被忽视。

是什么让一个GPU比另一个更快?

TL; DR

您的第一个问题可能是深度学习的快速GPU性能最重要的特性:它是CUDA核心吗?时钟速度?RAM大小?

在2019年,GPU的选择比以往更令人困惑:16位计算,Tensor核心,没有Tensor核心的16位GPU,多代GPU仍然可行(Turning,Volta,Maxwell)。但仍然有一些可靠的性能指标,人们可以使用这些指标作为经验法则。这里有一些针对不同深度学习架构的优先级指南:

卷积网络和变换器:张量核心> FLOP>存储器带宽> 16位能力
循环网络:存储器带宽> 16位能力>张量核心> FLOP

其内容如下:如果我想使用卷积网络,我应首先优先考虑具有张量核心的GPU,然后是高FLOP数,然后是高内存带宽,然后是具有16位能力的GPU 。在确定优先级时,选择具有足够GPU内存的GPU来运行人们感兴趣的模型非常重要。

为什么这些优先事项?

加深理解以做出明智选择的一件事是要了解硬件的哪些部分使GPU快速进行两个最重要的张量操作:矩阵乘法和卷积。

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

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

变压器中使用的大矩阵乘法是在RNN的卷积和小矩阵乘法之间。大矩阵乘法从16位存储,Tensor内核和FLOP中获益很多,但它们仍然需要高内存带宽。

请注意,要使用Tensor Core的优点,您应该使用16位数据和权重 - 避免使用32位RTX卡!如果您在使用PyTorch时遇到16位训练问题,那么您应该使用Apex库提供的动态丢失缩放如果你使用TensorFlow,你可以自己实现损失缩放:(1)将你的损失乘以一个大数,(2)计算梯度,(3)除以大数,(4)更新你的权重。通常,16位训练应该没问题,但是如果你在复制16位丢失结果时遇到麻烦通常会解决问题。

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

成本效率分析

GPU的成本效率可能是选择GPU的最重要标准。此博客更新的性能分析如下:
(1)对于变形金刚,我对Transformer-XL和BERT进行了基准测试。
(2)对于单词和字符RNN,我对最先进的biLSTM模型进行了基准测试。
(3)(1)和(2)中的基准测试是针对Titan Xp,Titan RTX和RTX 2080 Ti进行的。对于其他卡,我线性地缩放了性能差异。
(4)我用于细胞神经网络的现有基准:(1234567)。
(5)我使用亚马逊和eBay的平均成本作为GPU的参考成本。

图3:卷积网络(CNN),循环网络(RNN)和变压器的标准化性能/成本数字。 越高越好。 RTX 2060的成本效率是Tesla V100的5倍以上。 RNN编号一词指的是长度<100的短序列的biLSTM性能。 使用PyTorch 1.0.1和CUDA 10完成基准测试。
图3:卷积网络(CNN),循环网络(RNN)和变压器的标准化性能/成本数字。越高越好。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)Overprices 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卡上的风扇是由NVIDIA开发的一种新设计,用于改善运行单GPU的游戏玩家的体验(一个GPU的静音,低热量)。但是,如果您使用具有此开放式双风扇设计的多个GPU,则设计非常糟糕。如果您想使用多个彼此相邻的RTX卡(直接在下一个PCIe插槽中),那么您应该获得具有“鼓风式”单风扇设计的版本。对于RTX 2080 Ti卡尤其如此。华硕和PNY目前市场上有RTX 2080 Ti型号,带有鼓风式风扇。

所需的内存大小和16位训练

GPU上的内存对于某些应用程序(如计算机视觉,机器翻译和某些其他NLP应用程序)至关重要,您可能认为RTX 2070具有成本效益,但其内存太小,只有8 GB。但请注意,通过16位训练,您几乎可以拥有16 GB的内存,如果使用16位,任何标准型号都可以轻松放入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
(4)如果您只想开始深度学习,GTX 1060(6GB)是一个很好的选择。
(5)如果您已经拥有GTX 1070或更高版本:请稍等。除非您使用大型变压器,否则升级是不值得的。
(6)您想快速学习如何进行深度学习:多个GTX 1060(6GB)。

云中的深度学习

AWS / Azure上的GPU实例和Google Cloud中的TPU都是深度学习的可行选择。虽然TPU稍微便宜一点,但它缺乏云GPU的多功能性和灵活性。TPU可能是训练物体识别或变压器模型的首选武器。对于其他工作负载,云GPU是更安全的选择 - 云实例的好处是您可以随时在GPU和TPU之间切换,甚至可以同时使用两者。

但是,请注意这里的机会成本:如果您学习了使用AWS / Azure顺利完成工作流程的技能,那么您将失去在个人GPU上工作所花费的时间,并且您也无法获得使用的技能热塑性聚氨酯。如果您使用个人GPU,则无法通过云扩展到更多GPU / TPU。如果您使用TPU,如果您需要完整功能,可能会暂时停留TensorFlow,并且将代码库切换到PyTorch并不简单。学习流畅的云GPU / TPU工作流是一个昂贵的机会成本,如果您选择TPU,云GPU或个人GPU,您应该减轻这个成本。

另一个问题是关于何时使用云服务。如果你试图学习深度学习或者你需要原型,那么个人GPU可能是最好的选择,因为云实例可能很昂贵。但是,一旦找到了良好的深度网络配置并且您只想使用数据并行性训练模型,那么使用云实例是一种可靠的方法。这意味着小型GPU足以进行原型设计,人们可以依靠云计算的强大功能来扩展到更大的实验。

如果您的资金不足,云计算实例也可能是一个很好的解决方案:在CPU上进行原型设计,然后在GPU / TPU实例上推出,以便快速进行培训。这不是最好的工作流程,因为CPU上的原型设计可能是一个巨大的痛苦,但它可以是一个具有成本效益的替代方案。

结论 

根据此博客文章中的信息,您应该能够了解哪种GPU适合您。总的来说,我看到三个主要策略(1)坚持使用GTX 1070或更好的GPU,(2)购买RTX GPU,(3)使用某种GPU进行原型设计,然后并行训练TPU或云GPU上的模型。

TL; DR建议

最佳GPU整体:RTX 2070 
GPU可避免:任何特斯拉卡; 任何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研究员:RTX 2080 Ti使用16位。
我想构建一个GPU集群:这非常复杂,你可以从我的多GPU博客文章中获得一些想法
我开始深入学习并且我认真对待它:从RTX 2070开始。在6-9个月之后购买更多RTX 2070并且您仍然希望投入更多时间进行深度学习。根据您接下来选择的区域(启动,Kaggle,研究,应用深度学习),销售GPU并在大约两年后购买更合适的东西。
我想尝试深度学习,但我并不认真:GTX 1050 Ti(4或2GB)。这通常适合您的标准桌面,不需要新的PSU。如果它适合,不要购买新电脑!

更新2019-04-03:添加了RTX Titan和GTX 1660 Ti。更新了TPU部分。添加了启动硬件讨论。
更新2018-11-26:添加了有关RTX卡过热问题的讨论。
更新2018-11-05:添加了RTX 2070和更新的建议。更新了具有硬性能数据的图表。更新了TPU部分。
更新2018-08-21:添加了RTX 2080和RTX 2080 Ti; 返工性能分析
更新2017-04-09:增加了成本效率分析; 更新推荐NVIDIA Titan Xp 
更新2017-03-19:清理博客文章; 添加了GTX 1080 Ti 
更新2016-07-23:添加了Titan X Pascal和GTX 1060; 更新的建议
更新2016-06-25:重做多GPU部分; 删除简单的神经网络内存部分不再相关; 扩展的卷积记忆部分; 由于效率不高而截断的AWS部分; 添加了我对Xeon Phi的看法; 添加了GTX 1000系列
更新的更新2015-08-20:AWS GPU实例的新增部分; 将GTX 980 Ti加入比较关系
更新2015-04-22:不再推荐GTX 580; 卡之间增加的性能关系
更新2015-03-16:更新的GPU建议:GTX 970和GTX 580 
更新2015-02-23:更新的GPU建议和内存计算
更新2014-09-28:增加了对CNN内存需求的重视

致谢

我要感谢  Mat Kelcey  帮我调试和测试GTX 970的自定义代码; 我要感谢Sander Dieleman让我意识到我对卷积网的GPU内存建议的缺点; 我要感谢Hannes Bretschneider指出GTX 580的软件依赖性问题; 我要感谢Oliver Griesel指出AWS实例的笔记本解决方案。我要感谢Brad Nemire为我提供RTX Titan以进行基准测试。

2019年7月19日 10:52
浏览量:0
收藏