GPU太贵无从下手?大神教你省钱又省心

导读:深度学习是一类对计算资源有着高度要求的领域,而 GPU 的选择将从根本上决定你的深度学习体验。如果没有 GPU,你可能需要等上几个月才能拿到实验结果,或者在单一实验步骤上耗费整整一天乃至更久,甚至有可能在苦等许久之后只得到“所选参数关闭”以及模型分歧等错误。

有了良好且可靠的 GPU,我们将能够对深层网络的设计方案与参数进行快速迭代,且能够将原本长达数月或者数天的处理过程压缩至数小时甚至数分钟。因此,在购买 GPU 时做出正确的选择对深度学习而言至关重要。

那么,哪些 GPU 最适合你的实际需求?本文作者 Time Dettmers 是瑞士卢加诺大学信息学硕士,热衷于开发自己的 GPU 集群和算法来加速深度学习。在今天的文章中,我们将深入研究这个问题,并为你提供相关建议,希望能够给各位带来一点启示。

先来看结论

总的来说,我认为选择 GPU 有两个主要策略:

首先,使用 RTX 20 系列 GPU 进行快速升级,或者使用便宜的 GTX 10 系列 GPU,并在 RTX Titan 上市后进行升级。

如果你对性能要求不高,例如对于 Kaggle、初创公司、原型设计或学习深度学习,廉价的 GTX 10 系列 GPU 就可以让你受益匪浅。

如果你选择 GTX 10 系列 GPU,请确认 GPU 内存大小可以满足你的要求。

具体如下:

整体最佳 GPU:RTX 2080 Ti

经济实惠但价格昂贵:RTX 2080,GTX 1080

经济实惠且便宜:GTX 1070,GTX 1070 Ti,GTX 1060

数据集> 250GB:RTX 2080 Ti 或 RTX 2080

不差钱:GTX 1060(6GB)

:GTX 1050 Ti(4GB)或 CPU(原型设计)+ AWS / TPU(训练)

Kaggle 竞赛:GTX 1060(6GB)用于原型设计,AWS 用于最终训练;使用 fastai 图书馆

有竞争力的计算机视觉研究员:GTX 2080 Ti;在 2019 年升级到 RTX Titan

研究员:RTX 2080 Ti 或 GTX 10XX – > RTX Titan——检查当前型号的内存要求

想构建一个 GPU 集群:这非常复杂,参见(http://timdettmers.com/2014/09/21/how-to-build-and-use-a-multi-gpu-system-for-deep-learning/)

认真想学深度学习的人:用 GTX 1060(6GB)或便宜的 GTX 1070 或 GTX 1070 Ti 起步。

就是想尝试一下深度学习的人:GTX 1050 Ti(4 或 2GB)最重要的建议

要点总结

首先,GPU 的速度无疑是个非常重要的方面。

当人们开始迈入深度学习领域,理想的 GPU 运行速度将确保你快速获得实践经验,借此建立起专业知识从而深入探索各类新问题。如果没有这种快速反馈能力,大家往往需要耗费大量时间从错误中吸取教训,而更进一步的深度学习尝试亦可能令人沮丧甚至彻底绝望。

在 GPU 的帮助下,我很快学会了如何在一系列 Kaggle 竞赛项目当中应用深度学习技术,并借此获得参加 Hastags Kaggle 竞赛的机会,甚至最终在 Partly Sunny 分项赛中获得了第二名。

必须承认,之所以能够在竞赛当中获得第二名,举办方提供的 GTX Titan GPU 功不可没。

如今使用多个 GPU 能够有效提升训练速度。如果大家的预算充足,那么增加 GPU 数量绝对能够带来事半功倍的效果。

总结来讲,虽然单一 GPU 已经足以应对绝大部分任务,但多 GPU 在深度学习模型加速方面的作用正变得越来越重要。如果大家希望快速学习深度学习知识,请优先考虑使用多个成本低廉的 GPU。事实上,我个人在自己的研究实验当中也选择了多个小型 GPU,而非单一大型 GPU。

主流GPU大比拼
英伟达:市场领导者

英伟达公司的标准库非常丰富,使得我们能够利用 CUDA 轻松构建起自己的第一套深度学习库。相比之下,AMD 的 OpenCL 则没有这样强大的标准库。这一早期优势又与英伟达强大的技术社区支持相结合,从而迅速提升 CUDA 社区的整体规模。换言之,如果大家使用英伟达 GPU,你将更轻松地找到支持资源;如果你需要自行编写 CUDA,则可快速找到支持与建议,且大多数深度学习库都为英伟达 GPU 提供最佳支持。这也成为英伟达 GPU 在市场上保持领导者地位的一大重要助力。

在另一方面,英伟达公司目前制定了一项政策,即仅允许在数据中心内面向 Tesla GPU 使用 CUDA——GTX 或 RTX 显卡不在此列。现在尚不清楚其中“数据中心”的具体含义,但这意味着由于担心引发法律纠纷,各类学术组织与高校往往被迫购买价格昂贵且成本效率较低的 Tesla GPU。而尽管 Tesla 显卡的成本高达 GTX 与 RTX 显卡的十倍,但其却并没有任何真正的比较优势。

英伟达公司之所以能够轻而易举地完成这场“割韭菜”,无疑是因为其在市场上拥有着垄断级别的力量——他们能够随心所欲地制定政策,而用户只能被动接受。因此,如果大家希望享受英伟达 GPU 在社区与支持方面的强大优势,就必须认同其近乎严苛的使用方式限制。

AMD: 强大,但缺少支持

HIP 通过 ROCm 将英伟达与 AMD GPU 统一为同一种通用编程语言,其能够在进行 GPU 组件编译之前将代码编译为对应的 GPU 语言。因此,如果我们能够在 HIP 当中构建所有 GPU 代码,那么这将成为一项里程碑式的成果。但这项工作非常困难,因为 TensorFlow 与 PyTorch 代码库相当难以移植。

TensorFlow 对于 AMD GPU 提供一定程度的支持,其所有主要网络类型都能够在 AMD GPU 上运行。但如果大家希望开发新型网络,则可能发现其中缺失一些细节,会导致大家无法顺利实现自己的预期目标。另外,ROCm 社区的规模也比较有限,因此我们很难直接在其中解决问题。AMD 公司似乎没有太多资金用于支持深度学习开发,而这也成为 AMD GPU 在深度学习领域得到广泛应用的最大障碍。

不过,AMD GPU 相较于英伟达 GPU 表现出强劲的性能水平,且下一代 AMD GPU Vega 20 将凭借着 Tensor-Core 类计算单元带来极为出色的强大的计算能力。

总的来说,我认为对于那些只希望能够顺利利用 GPU 运行深度学习工作负载的普通用户而言,AMD GPU 仍然是个比较纠结的选项。

经验丰富的用户应该能够自行解决大部分问题,而大家对 AMD GPU 以及 ROCm/HIP 开发社区的支持也将帮助他们更有力地打击英伟达的垄断地位——这一切从长远角度看,都将为每位参与者带来显著收益。

因此,如果你身为 GPU 开发人员并希望为 GPU 计算做出重要贡献,那么 AMD GPU 可能是你发挥长期良好影响力的最佳方式。但对于其他类型的用户而言,英伟达 GPU 可能才是更安全可靠的选项。

英特尔:正在努力

我个人对于英特尔至强 Phi 的表现感到相当失望,我甚至认为其根本算不上是英伟达或者 AMD 卡的真正竞争对手。因此这里我会简单给出结论:

如果大家打算使用至强 Phi,请注意你能够获得的技术支持将非常差劲、代码段的 GPU 计算速度低于 CPU 计算、代码优化工作非常困难、不完全支持 C++ 11 的新特性、编译器不支持多种重要的 GPU 设计模式、与依赖 BLAS 程序的其它库(NumPy 与 SciPy)之间存在兼容性问题外加大量我个人可能没有碰到的种种潜在问题。

当然,我也真心期待着英特尔的 Nervana 神经网络处理器(简称 NNP)能够早日推出,因为其预定规格确实有望在 GPU 开发人员手中迸发出强大的能量。其允许运行新的算法,甚至有可能重新定义神经网络的使用方式。然而,该项目已经被无限期推迟,且有传闻称大部分已经开发完成的成果遭到丢弃。神经网络处理器项目原本计划于 2019 年第三季度 / 第四季度推出,但即使大家愿意再等待这么长时间,也请各位记住:从 AMD 到英特尔自家的至强 Phi,已经可以看出良好的硬件并不代表一切。因此即使顺利发布,神经网络处理器的全面成熟恐怕也要等到 2020 年甚至更晚。

谷歌:低成本的按需处理方案?

谷歌 TPU 已经发展成为一种非常成熟的基于云类产品,其成本效益也极具吸引力。关于 TPU 的定义,最简单的方法就是将其理解为一组被打包起来的多个 GPU。如果我们观察 Tensor-Core 型 V100 与 TPUv2 的性能指标,就会发现两套系统的性能与 ResNet50 基本相同。然而,谷歌 TPU 的成本效益确实更为出色。

因此,是不是可以将 TPU 直接理解成一种成本效益极高的基于云类解决方案?是,也不是。

从理论及常规使用场景角度出发,TPU 确实更具成本效益。然而,如果大家使用 fastai 团队以及 fastai 库式的最佳实践与指导方针,那么完全可以以更低的价格实现更快的收敛速度——至少在利用卷积网络进行对象识别的场景下是如此。

利用同样的软件,TPU 虽然一般更具成本效益,但也有着自己的固有问题:

  1. TPU 不适用于 fastai 库,即 PyTorch;
  2. TPU 算法主要由谷歌内部团队提供支持 ;
  3. 不存在能够为 TensorFlow 良好实现提供标准的统一高级库。这三点无疑严重打击了 TPU 的实用价值,意味着其需要配合单独的软件才能跟上各类深度学习算法中增加的新功能。

我相信谷歌公司的内部团队已经完成了大量工作,但目前尚不清楚其对于特定算法的实际支持效果。举例来说,目前官方库当中只提供一套自然语言处理模型,其余皆为计算机视觉模型。所有模型都使用卷积神经网络,而没有任何一种使用递归神经网络。

根据今年 2 月发布的一份报告(这样的发布周期在深度学习这一快速演进的领域简直不可原谅),TPUv2 在使用 LSTM 时没有收敛。我找不到任何能够明确指出该问题是否得到解决的资料,但我相信其软件支持能力应该会随着时间推移而快速提高,且使用成本将进一步下降。这意味着 TPU 最终将成为一种具备强大吸引力的选项。

但就目前来讲,TPU 似乎最适用于处理计算机视觉类负载,并作为其它计算资源的补充方案——而非充当主力深度学习资源。

亚马逊:可靠但成本高昂

AWS 推出了更多的 GPU 选项。然而,其使用价格仍然有点昂贵。如果大家突然需要额外的计算资源,AWS GPU 实例可能是一种非常实用的解决方案——例如你的研究论文截止日期即将到来,但所有 GPU 都被重要任务占用着。

然而,为了保持合理的成本效益,大家应确保只在 AWS 实例上运行一部分网络,且明确知识如何为训练运行选择最佳或者趋近于最佳的参数。否则,其可能带来高昂的使用成本,甚至让大家后悔没有自行购买 GPU——虽然 AWS 的部分 GPU 实例采用 GTX 1070 甚至更高型号以提供强大的性能表现,但我们完全可以通过一次性投入在一到两年周期内安心享用自有 GPU,而不必担心随时可能出现的成本爆炸问题。

总结来讲,AWS GPU 实例非常强大,但大家需要认真规划并谨慎使用,否则可能引发严重的预算超标问题。关于云计算的更多权衡,我们将在后续文章中进一步加以探讨。

成本效率分析

GPU 的成本效率可能是选择 GPU 最重要的标准。

图 2:GPU 和 TPU 的标准化原始性能数据。数字越大表示性能越好。RTX 2080 Ti 的速度是 GTX 1080 Ti 的两倍:0.75 vs 0.4。

我做了一项新的性价比分析,其中包括内存带宽、TFLOP 和 Tensor Cores。我查看了 eBay 和亚马逊上的价格并为其加权 50:50,然后我查看了在有或无 Tensor Cores 情况下 LSTM、CNN 的性能指标。我采用这些表示性能的数字,并通过标准化几何平均值对它们进行加权以获得平均性能等级,然后计算性能 / 成本数。以下是结果:

图 3:使用内存带宽(RNN)、TFLOP(ConvNets)和 Tensor Cores 得到的标准化性能 / 成本指标。数字越高越好。RTX 2080 的成本效率比 Tesla V100 高出约 5 倍

请注意,RTX 2080 和 RTX 2080 Ti 的数据应该有些水分,因为没有硬性能相关数据。我根据这个硬件下的矩阵乘法和卷积的 Roofline Model 以及 V100 和 Titan V 的 Tensor Core 基准来评估性能。由于没有硬件规格,这里没有列出 RTX 2070 的性能数据。请注意,RTX 2070 可能在成本效益上优于其他两个 RTX 卡,但我没有数据支持这一点。

根据初步数据,我们发现 RTX 2080 比 RTX 2080 Ti 成本效益更高。RTX 2080 Ti 的 Tensor Cores 和带宽增加了约 40%,价格提高了 50%,但这并没有使性能提高 40%。

对于 LSTM 和其他 RNN,从 GTX 10 系列到 RTX 20 系列的性能提升主要是能够进行 16 位浮点计算,而不是 Tensor Cores 本身。虽然卷积计算理论上应该随着 Tensor Cores 性能呈直线上升,但性能数据(https://github.com/u39kun/deep-learning-benchmark) 却并不是这样。

这表明,卷积体系结构的其他部分无法用 Tensor Cores 作为辅助,这为整体的计算要求做出了重大贡献。因此,RTX 2080 具有更高的成本效益,因为它具有比 GTX 10 系列更好的性能(GDDR6 + Tensor 核心)所需的所有功能,同时也比 RTX 2080 Ti 便宜。

此外,请注意此分析存在一些问题,你需要谨慎理解这些数据:

  1. 如果你购买经济高效但速度较慢的卡,那么总有一天你的计算机的 GPU 空间会不足,因此资源浪费了。因此,该图表更偏向于价格更高的 GPU。为了抵消这种偏差,还应该对原始性能图表 2 进行评估。
  2. 此性能 / 成本图表还假设你尽可能多地使用 16 位计算和 Tensor Cores。这意味着对于 32 位计算,RTX 卡的性能 / 成本比很差。
  3. 有传闻说,有大量的 RTX 系列 20 卡由于加密货币的颓势而造成积压。因此,像 GTX 1080 和 GTX 1070 这样流行的加密挖掘 GPU 可能会迅速降价,其性能 / 成本比可能会迅速提高,使得 RTX 20 系列在性能 / 成本方面不那么有利。另一方面,大量的 RTX 系列 20 卡供应将保持其价格稳定和保持竞争力。我很难预测它将如何发展。
  4. 如前所述,RTX 卡不存在硬性、无偏差的性能数据可供参考,因此所有这些数字都有所偏差。

所以,做出正确选择并不容易。但是,如果你综合考虑以上观点,那么以下建议还是有一定合理性的。

对于通用 GPU 的建议

目前,我会推荐两种不同的主要策略:

  1. 购买 RTX,可以使用 2 年 +;
  2. 在 eBay 上买便宜点的 GTX 1080/1070/1060 或 GTX 1080 Ti / GTX 1070 Ti,直到发布更好的卡。例如,你可以等 2019 年第一季度 / 第二季度 RTX Titan 发布,开始销售和升级后再入手。
  3. 我们一直在等待 GPU 升级,对于很多人来说,第一种策略可能最适合现在就需要获得良好性能的人。虽然 RTX 2080 更具成本效益,但 RTX 2080 Ti 可以提供更多内存,这可能是计算机视觉研究人员和其他内存密集型应用程序采用它的决定性因素。

这两种卡都是明智的解决方案,主要的问题在于:你需要 RTX 2080 Ti 的大内存吗?请记住,你通常会以 16 位模式使用此卡,这会使可用内存翻倍。如果你不需要额外的内存,用 RTX 2080 就可以了。

有些人想要更重大的升级,等着 RTX Titan 发布。这也是一个不错的选择,因为 GTX 10 系列显卡可能会降价。由于价格太不稳定,我不会在这里推荐具体的 GPU,降价了就赶紧入手准没错。请注意,GTX 1060 有时可能缺少某些型号所需的内存和速度,因此如果你发现了一款便宜的 GTX 1060,首先要考虑一下速度和 6GB 内存是否真正满足你的需求。如果是,价格亲民的 GTX 1070、GTX 1070 Ti、GTX 1080 和 GTX 1080 Ti 都是绝佳的选择。

  • 对于创业公司、Kaggle 竞赛者以及深度学习学习者,我大力推荐价格便宜的 GTX 系列 10。对于所有这些应用领域,GTX 1060 是一个非常经济的入门选择。
  • 对于那些想要快速学习深度学习的人来说,使用多个 GTX 1060 可能是一个完美的选择,当你的技能提升后,可以在 2019 年升级到 RTX Titan,够用几年了。
  • 如果你缺钱,我会推荐配备 4 GB 内存的 GTX 1050 Ti,或者你能买得起 GTX 1060 也行。请注意,GTX 1050 Ti 的优势在于你不需要 PSU 的额外 PCIe 电源连接器,因此你可以将其插入现有计算机,在没有 PSU 升级的情况下开始深度学习,从而节省额外的资金。
  • 如果你很缺钱,但你知道 12GB 内存对你很重要,那么来自 eBay 的 GTX Titan X(Pascal)也是一个很好的选择。

然而,GTX 1080 Ti 对于大多数研究人员来说就已经够用了,大多数应用程序都不需要额外的一 GB 内存,并且它比 GTX Titan X(Pascal)更快。

我本人打算买 RTX 2080 Ti,因为我的 GTX Titan X(Maxwell)早就该升级了。因为我的研究需要更多内存,因此 RTX 2080 不适合我。我还将开发自定义 Tensor Core 算法,因此 RTX 2080 Ti 是我的最佳选择,但这并不意味着这适合你。

同理,你选择 GPU 时也应根据自己的需求,如工作任务(内存要求)、实验方式(多个快速,或多个慢速任务,或将原型扩展到云),还要考虑未来(未来的 GPU RTX 2070 或 RTX Titan,还是便宜的 GTX 10 系列更吸引我?)然后找出满足这些要求的 GPU。

云端深度学习

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

但是,请注意这里的机会成本:

  • 如果你学习了使用 AWS 实例顺利完成工作流程的技能,那么你将浪费时间在个人 GPU 上工作,并且无法获得使用 TPU 的技能。
  • 如果使用个人 GPU,则无法通过云扩展到更多 GPU / TPU。
  • 如果使用 TPU,你将无法使用 TensorFlow,且切换到 AWS 并不是一件容易的事。

学习到流畅的云工作流程成本非常昂贵,而 TPU 或 AWS GPU 可以减少成本。

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

如果你资金不足,云计算实例也可能是一个很好的解决方案,但问题是,当你可能需要购买大量计算时,只为了少量的原型设计。在这种情况下,人们可能希望在 CPU 上进行原型设计,然后在 GPU / TPU 实例上推出以进行快速训练。这不是最好的工作流程,因为在 CPU 上进行原型设计可能让人头痛,但的确是一种经济高效的解决方案。

推荐文章

沪公网安备 31010702002009号