本文作者 Tim Dettmers 是瑞士卢加诺大学信息学硕士,热衷于开发自己的 GPU 集群和算法来加速深度学习。这篇文章深入研究这个问题,并提供建议,帮你做出最合适的选择。
目前,我的主要建议是,使用RTX 2070 GPU并使用16位计算训练模型。我不推荐购买XP Titan,Titan V,任何Quadro显卡或任何FounderEdition的GPU。
但是,一些特定的GPU也有它们的合适用途:
(1)为了获得更多显存,我建议使用RTX 2080 Ti。
(2)为了提高性能,我建议现在推荐使用(a)RTX 2080 Ti或(b)RTX2070,并在2019年第一/第二季度升级到RTX Titan。
(3)如果你缺钱,我会推荐去网上买Titan X(Pascal)或GTX1060(6GB)。如果还是觉得太贵,那就选购GTX 1050 Ti吧。
(4)如果你只是想对深度学习入门,GTX 1050 Ti(4GB)是个不错的选择。
(5)如果你确定愿意继续等等:GTX 1080 Ti和RTX 2080 Ti都是很棒的选择,但现在价格太高。它们的价格可能在一两个月内稳定下来。
(6)想快速学习如何进行深度学习:可以选用多块GTX 1060(6GB)。
(7)如果已经拥有GTX 1080 Ti或GTX Titan(Pascal),你可能需要等到RTX Titan发布。你的GPU还是可以一战的。
(8)我刚开始进行深度学习,并且我是认真的:可以先从 GTX 1060 (6GB) 开始,或者从便宜的 GTX 1070 或 GTX 1070 Ti 开始。这取决于你下一步想做什么(去初创公司,参加 Kaggle 竞赛,做研究,应用深度学习),然后卖掉最初的 GPU 再买更适合的
其实,我个人本想弄一块RTX 2080 Ti,但自从RTX 2070发布以来,我发现RTX 2070的成本效益更高,加上>虚拟显存,实际上它相当于16GB的32位显存,资源和性能足够用。
虽然一个很好的简化建议应该是 “注意内存带宽”,但我不再建议这样做。在消费级 GPU 中引入 Tensor Core 进一步复杂化了这个问题。现在,带宽、FLOPS 和 Tensor Core 的组合才是 GPU 性能的最佳指标。
为了加深理解,做出明智的选择,最好要了解一下硬件的哪些部分使 GPU 能够快速执行两种最重要的张量操作:矩阵乘法和卷积。
- 考虑矩阵乘法的一个简单而有效的方法是:它是受带宽约束的。如果你想使用 LSTM 和其他需要做很多矩阵乘法的循环网络的话,内存带宽是 GPU 最重要的特性,
- 同样,卷积受计算速度约束。因此,对于 ResNets 和其他卷积体系结构来说,GPU 的 TFLOP 是其性能的最佳指标。
- Tensor Cores 稍微改变了这种平衡。Tensor Cores 是专用计算单元,可以加速计算——但不会加大内存带宽——因此对于卷积网络来说,最大的好处是 Tensor Core 可以使速度加快 30%到 100%。
虽然 Tensor Cores 只能加快计算速度,但它们也允许使用 16-bit 数字进行计算。这也是矩阵乘法的一大优点,因为数字的大小只有 16-bit 而不是 32-bit,在内存带宽相同的矩阵中,数字的数量可以传输两倍。一般来说,使用 Tensor Cores 的 LSTM 可以加速 20% 到 60%。
请注意,这种加速并不是来自 Tensor Cores 本身,而是来自它进行 16-bit 计算的能力。在 AMD GPU 上的 16-bit 算法和在 NVIDIA 的具有 Tensor Cores 的卡上的矩阵乘法算法一样快。
Tensor Cores 的一个大问题是它们需要 16-bit 浮点输入数据,这可能会带来一些软件支持问题,因为网络通常使用 32-bit 的值。如果没有 16-bit 的输入,Tensor Cores 就相当于没用的。
但是,我认为这些问题很快就能得到解决,因为 Tensor Cores 太强大了,现在消费级 GPU 也使用 Tensor Cores,因此,将会有越来越多的人使用它们。随着 16-bit 深度学习的引入,我们实际上使 GPU 的内存翻倍了,因为同样内存的 GPU 中包含的参数翻倍了。
总的来说,最好的经验法则是:如果你使用 RNN,要看带宽;如果使用卷积,就看看 FLOPS;如果你买得起,就考虑 Tensor Cores(除非必要,否则不要买 Tesla 卡)
GPU 和 TPU 的标准化原始性能数据。越高越好。 图中加入了RTX 2070显卡的性能对比。
性价比分析
性价比也许是选择 GPU 时要考虑的最重要的一类指标。我对此做了一个新的成本性能分析,其中考虑了内存位宽、运算速度和 Tensor 核心。价格上,我参考了亚马逊和 eBay 上的价格,参考权重比为 1:1。然后我考察了使用 / 不使用 Tensor Core 情况下的 LSTM、CNN 等性能指标。将这些指标数字通过标准化几何平均得到平均性能评分,计算出性价比数字,结果如下:
标准化处理后的性价比(单位成本计算力)结果比较,考虑了内存带宽(RNN)、计算速度(卷积网络)、是否使用 Tensor Cores 等因素,数字越高越好。可以看出,RTX2070的能效是Tesla V100的5倍以上。
从上图中可以看到,RTX 2070显卡的成本效益比RTX 2080和 RTX2080 Ti都高。为什么会这样?因为能够使用Tensor Core进行16位计算的能力,其价值远远超过拥有更多Tensor Core核心。而使用RTX 2070,你可以以最低的价格获得这些功能。
我根据这个硬件下的矩阵乘法和卷积的 roofline 模型以及来自 V100 和 Titan V 的 Tensor Core 基准数字来估计性能。由于目前没有硬件规格数字,RTX 2070 完全没有排入。注意,RTX 2070 可能很容易在成本效益上击败其他两款 RTX 系列显卡,但目前没有数据支持。
从初步数据来看,我们发现 RTX 2080 比 RTX 2080 Ti 的性价比更高。 与 RTX2080 相比,RTX 2080 Ti 的 Tensor 核心和带宽增加了约 40%,价格提高了 50%,但性能并没有提高 40%。对于 LSTM 和其他 RNN 来说,从 GTX 10 系到 RTX 20 系的性能增长,主要是在于支持了 16 位浮点计算,而不是 Tensor 核心本身。虽然卷积网络的性能在理论上应该与 Tensor 核心呈线性增加,但我们从性能数据中并没有看出这一点。
这表明,卷积体系结构的其他部分无法凭借 Tensor 核心获得性能提升,而这些部分在整体计算需求中也占了很大比重。因此,RTX 2080 具有更高的性价比,因为它具有比 GTX 10 系列获得性能提升(GDDR6 + Tensor 核心)所需的所有功能,同时也比 RTX 2080 Ti 更便宜。
此外请读者注意,这个分析中存在一些问题,对这些数据的解释需要慎重:
(1)如果你购买的是高性价比、但运算速度较慢的显卡,那么在某些时候计算机可能不再会有更多 GPU 空间,因此会造成资源浪费。因此,本图表偏向于昂贵的 GPU。为了抵消这种偏差,还应该对原始性能图表进行评估。
(2)此性价比图表假设,读者会尽量多地使用 16 位计算和 Tensor 内核。也就是说,对于 32 位计算而言,RTX 系显卡的性价比很低。
(3)此前有传闻说,有大量的 RTX 20 系显卡由于加密货币行情的下滑而被延缓发布。因此,像 GTX 1080 和 GTX 1070 这样流行的挖矿 GPU 可能会迅速降价,其性价比可能会迅速提高,使得 RTX 20 系列在性价比方面不那么有优势。另一方面,大量的 RTX 20 系显卡的价格将保持稳定,以确保其具备竞争力。很难预测这些显卡的后续前景。
(4)如前文所述,目前还没有关于 RTX 显卡硬性、无偏见的性能数据,因此所有这些数字都不能太当真。
可以看出,在这么多显卡中做出正确选择并不容易。但是,如果读者对所有这些问题采取一种平衡的观点,其实还是能够做出自己的最佳选择的。