雷锋网按:本文原作者lqfarmer,本文整理自作者在知乎专栏《深度学习与NLP》。雷锋网已获得转载授权。
雷锋网注:文章翻译自Which GPU(s) to Get for Deep Learning
深度学习是一个计算需求强烈的领域,GPU的选择将从根本上决定你的深度学习研究过程体验。在没有GPU的情况下,等待一个实验完成往往需要很长时间,可能是运行一天,几天,几个月或更长的时间。因此,选择一个好的,合适的GPU,研究人员可以快速开始迭代深度学习网络,几个月的实验可以在几天之内跑完,几天的实验可以在几个小时之内跑完。因此,在购买GPU时,正确的选择至关重要。那么应该如何选择适合的GPU呢?今天我们将深入探讨这个问题,并会给出一些合适的建议,帮助你做出适合的选择。
拥有高速GPU是开始学习深度学习的一个非常重要的方面,因为这可以帮助你快速获得实践经验,这是搭建专业知识的关键,有足够的时间将深度学习应用于解决新问题。如果没有这种快速的反馈,就需要花费太多的时间从错误中学习。因此,今天就谈谈如何选择一款合适的GPU来进行深度学习的研究。
首先给出一些总体的建议
最好的GPU整体(小幅度):Titan Xp
综合性价比高,但略贵:GTX 1080 Ti,GTX 1070,GTX 1080
性价比还不错且便宜:GTX 1060(6GB)
当使用数据集> 250GB:GTX Titan X(Maxwell) ,NVIDIA Titan X Pascal或NVIDIA Titan Xp
没有足够的钱:GTX 1060(6GB)
几乎没有钱:GTX 1050 Ti(4GB)
做Kaggle比赛:GTX 1060(6GB)适用于任何“正常”比赛,或GTX 1080 Ti用于“深度学习竞赛”
计算机视觉研究员:NVIDIA Titan Xp;不要买现在新出的Titan X(Pascal或Maxwell)
一名研究员人员:GTX 1080 Ti。在某些情况下,如自然语言处理,一个GTX 1070或GTX 1080已经足够了-检查你现在模型的内存需求
搭建一个GPU集群:这个优点复杂,另做探讨。
刚开始进行深度学习研究:从GTX 1060(6GB)开始。根据你下一步兴趣(入门,Kaggle比赛,研究,应用深度学习)等等,在进行选择。目前,GTX 1060更合适。
想尝试下深度学习,但没有过多要求:GTX 1050 ti(4或2GB)
应该选择什么样的GPU?NVIDIA GPU,AMD GPU或Intel Xeon Phi?
NVIDIA的标准库使得基于CUDA来建立第一个深度学习库变得非常容易,而AMD的OpenCL则没有这样强大的标准库。现在,AMD卡没有像这样好的深度学习库,所以就只有NVIDIA。即使未来有一些OpenCL库可能也可用,但我也会坚持使用NVIDIA,因为GPU计算能力或GPGPU社区非常强大,可以持续促进CUDA的发展,而OpenCL则相对有限。因此,在CUDA社区中,很容易获得不错的开源解决方案和可靠的建议。
此外,即使深度学习刚刚起步,NVIDIA仍然在持续深入的发展。这个选择得到了回报。而其他公司现在把钱和精力放在深度学习上,由于起步较晚,现在还是相对落后。目前,除NVIDIA-CUDA之外,其他很多软硬件结合的深度学习方案都会遇到或多或少的问题。
至于英特尔的Xeon Phi处理方案,官方广告宣称编程者可以使用标准的C代码进行开发,并很容易将代码轻松转换为经过加速的Xeon Phi代码。这个特性听起来很有趣,因为我们可以依靠丰富的C代码资源。但是,实际上只有很小部分的C代码是被支持的,所以这个特性目前并不是很有用,而且能够运行的大部分C代码都很慢。
在选择GPU时,首先要考虑的第一个GPU性能问题是什么呢:是否为cuda核心?时钟速度多大?内存大小多少?
这些都不是,对于深度学习性能而言,最重要的特征是内存带宽(memory bandwidth)。
简而言之:GPU针对内存带宽进行了优化,但同时牺牲了内存访问时间(延迟)。CPU的设计恰恰相反:如果涉及少量内存(例如几个数字相乘(3 * 6 * 9)),CPU可以快速计算,但是对于大量内存(如矩阵乘法(A * B * C)则很慢。由于内存带宽的限制,当涉及大量内存的问题时,GPU快速计算的优势往往会受到限制。当然,GPU和CPU之间还有更复杂的区别,关于为何GPU如此适用于处理深度学习问题,另做探讨。
所以如果你想购买一个快速的GPU,首先要关注的是GPU的带宽(bandwidth)。
通过内存带宽评估GPU的性能
随着时间的变化,CPU和GPU的带宽比较:带宽是GPU比CPU更快的主要原因之一。
带宽可以直接在芯片的体系结构上进行比较,例如像GTX 1080和GTX 1070这样的Pascal卡,其性能可以直接通过单独查看内存带宽进行比较。例如,GTX 1080(320GB / s)比GTX 1070(256 GB / s)快25%(320/256)。然而,不同的结构,例如像GTX 1080与GTX Titan X之类的Pascal与Maxwell不能直接比较,因为不同制造工艺(以纳米为单位),导致不同的架构对于如何利用给定的内存带宽的方式不同。这使得一切都有点棘手,但仅仅基于整体带宽就能让我们很好地评价GPU的速度到底有多快。为了确定在一个给定的条件下,一款GPU最快能多快,可以查看这个维基百科页面,以GB / s为单位查看带宽;这里列出的关于这些新卡(900和1000系列)的价格是相当准确,但较旧的卡明显比较便宜 - 特别是如果你通过eBay购买这些卡。例如,一个普通的GTX Titan X在eBay上的售价约为550美元。
另一个需要考虑的重要因素是,并不是所有的架构都与cuDNN兼容。由于几乎所有深度学习库都使用cuDNN进行卷积运算,这就限制GPU的选择只能是Kepler GPU或更高的版本,即GTX 600系列或更高版本。最重要的是,Kepler GPU一般都很慢。所以这意味着应该选择GTX 900或1000系列的GPU,以获得更好的性能。
为了粗略地估计一下这些卡在深度学习任务上的表现,我构建了一个简单的GPU等值图。如何阅读这个?例如,一个GTX 980与0.35 Titan X Pascal一样快,或者换句话说,Titan X Pascal几乎是GTX 980的三倍。
请注意,我自己并没有所有的这些卡,我并没有在所有这些卡上运行然后得到深度学习的benchemarks。比较的结果通过卡片规格以及一些可得到的计算benchmarks(一些用于加密货币挖掘的情况,这一性能在深度学习相关的计算能力上是可比较的)得出的。所以这些结果粗略的估计。实际的数字可能会有所不同,但通常错误应该是比较小的,卡的顺序应该是正确的。另外请注意,那些不足以充分利用GPU性能的小型网络会让GPU的性能看上去不好。例如,GTX 1080 Ti上的小型LSTM(128个隐藏单元;批量大小> 64)不会比在GTX 1070上运行速度快很多。为了获得图下表中显示的性能差异,需要运行更大的网络,比如具有1024个隐单元的LSTM(批量大小> 64)。
GPU之间粗略的性能比较。此比较建立于充分利用GPU性能情况下。
基于上面绘制的性能比较图,除以它们对应的价格,得到下图的基于成本的排名,越长代表性价比越高,该图某种程度上反映了不同卡之间的性价比差异。
成本效益对比图。请注意,这个数字在很多方面都有偏差,例如它没有考虑到内存。
但请注意,这种对GPU排名的衡量标准考虑并不全面。首先,没有考虑GPU的内存大小。从上面的图看,GTX 1050 Ti性价比最高,但当实际应用中你说需要的内存超过了1050 Ti所能提供的内存时,也不能用。类似地,使用4个小的GPU比仅使用1个大得GPU要复杂的多,因此小型GPU也有很多不足之处。此外,不能通过购买16 GTX 1050 Ti来获得4 GTX 1080 Ti的性能,因为还需要购买3台额外的昂贵的电脑。如果考虑这最后一点,即GPU的内存大小,得到下图所示性价比分析图。
综合考虑其他硬件的价格(比如搭载GPU的电脑价格),对GPU的性价比进行标准化。在这里,比较了一台完整的机器,包含4个GPU,配置价值约1500美元的其他高端硬件(CPU,主板等)条件下。
因此,在这种情况下,如果您想要购买更多的GPU,毫无疑问,内存越大的GPU性价比越高,因为相同内存需求条件下,不需要买更多的机器。但是,这种对GPU选择方法仍然存在缺陷。如果你预算金额有限,没有办法无法负担4 GTX 1080 Ti机器的价格,这种对比就毫无意义。因此,实际情况是,基于你有限的预算下,你可以购买到的哪种系统性能是最好的?同时,你还必须处理其他问题,例如:每天使用此GPU的时间有多长?想在几年内升级GPU或整个计算机?想在未来多长一段时间内卖掉当前的GPU,并购买新的更好的GPU?等等
所以你可以看到,做出正确的选择并不容易。但是,如果你对所有这些问题平衡的看待,就会得出类似于以下的这些结论。
一般来说,我会推荐GTX 1080 Ti,GTX 1080或GTX 1070.他们都是优秀的显卡,如果你有钱,应该购买GTX 1080 Ti。GTX 1070比普通的GTX Titan X(Maxwell)便宜一些。GTX 1080的性价比比GTX 1070低一些,但是自GTX 1080 Ti推出以来,价格大幅下滑,现在GTX 1080的性价比已经能够与GTX 1070比拟。所有这三款显卡应该比GTX 980 Ti要好,因为它们具有11GB和8GB(而不是6GB)的内存。
8GB的内存可能看起来有点小,但是对于许多任务来说这已经足够了。例如对于Kaggle比赛,大多数图像数据,deep style和自然语言理解任务,这些你可能会遇到几个问题。
对于入门级的人来或是偶尔想用GPU来参加类似Kaggle比赛的人,GTX 1060是一个不错的选择。我不推荐内存只有3GB的GTX 1060 variant产品,因为6G的内存就已经很有限了。但是,对于许多应用来说,6GB就足够了。GTX 1060比普通的Titan X慢,但与GTX 980具有可比的性价比。
就综合性价比而言,10系列设计得非常好。GTX 1050 Ti,GTX 1060,GTX 1070,GTX 1080和GTX 1080 Ti都非常出色。GTX 1060和GTX 1050 Ti适用于初学者,GTX 1070和GTX 1080是适合于初创公司,部分研究和工业部门,而性能突出的GTX 1080 Ti,对于以上应用都合适。
不推荐NVIDIA Titan Xp,因为它的性价比太昂贵了。可以用GTX 1080 Ti代替。然而,NVIDIA Titan Xp在计算机视觉研究领域中仍然有一定的使用,用于处理大数据集或视频数据。在这些领域中,按照每GB的内存数量计算,NVIDIA Titan Xp只比GTX 1080 Ti多1GB,但在这种情况下也具有一定的优势。不推荐NVIDIA Titan X(Pascal),因为NVIDIA Titan Xp速度更快,但价格几乎相同。但由于市场上这些GPU的稀缺性,如果你找不到NVIDIA Titan Xp,也可以购买Titan X(Pascal)。
如果你已经有了GTX Titan X(Maxwell)GPU,那么升级到NVIDIA Titan X(Pascal)或NVIDIA Titan Xp就没有必要了。
如果你缺钱,但是你需要12GB内存来开展你的研究,那么GTX Titan X(Maxwell)也是一个很好的选择。
对于大多数研究人员来说,GTX 1080 Ti已经完全够用了。大多数研究和大多数应用,GTX 1080 Ti的内存完全够用。
在NLP中,内存限制并不像计算机视觉领域那么严格,所以GTX 1070 / GTX 1080也是不错的选择。通常是,需要解决什么样的任务以及如何进行试验,决定了需要选择哪一款GPU,无论是GTX 1070还是GTX 1080。当你选择GPU时,应该按照类似的方式推理。考虑一下你在做什么任务,如何运行你的实验,然后尝试找到适合这些要求的GPU。
对于预算有限的人来说,选择条件则更加有限。亚马逊网络服务上的GPU相当昂贵和缓慢,如果只有少量的资金,也是一个不错的选择。我不推荐GTX 970,因为它很慢,即使在某些限制条件下也是相当昂贵的(在eBay上150美元),并且存在与卡启动相关的内存问题。相反,建议花更多一点的钱购买更快,有更大的内存,没有内存问题的GTX 1060。如果实在买不起GTX 1060,我建议选择配备4GB内存的GTX 1050 Ti。4GB内存可能有限,但至少可以开展进行你的研究,只是需要你对模型进行一些调整,也可以得到良好的性能。
GTX 1050 Ti一般来说也是一个不错的选择,如果你只是想尝试一下深度学习,而没有其他更多的需求。
结论有了这篇文章中提供的所有信息,你应该能够考虑选择哪一种合适的GPU,综合考虑所需的内存大小,带宽(GB/s)大小和GPU的价格,这一思路在未来很久也适用。最后,如果有足够的资金,建议购买GTX 1080 Ti,GTX 1070或者GTX 1080。如果刚刚开始研究深度学习,或者资金有限,可以购买GTX 1060。如果资金实在有限,可以购买GTX 1050 ti;如果想要从事计算机视觉研究,可以购买Titan Xp。