Categories
程式開發

GPU选购指南:训练ML模型,我必须买RTX3080吗?


深度学习是一个计算要求非常高的领域,你对GPU的选择将从根本上决定你的深度学习体验。但是,如果你想购买一块新GPU,主要看哪些特性呢?GPU内存、内核、张量核?如何做出有成本效益的选择?这篇文章将深入研究这些问题,消除常见的误解,让你对如何考虑GPU有一个直观的理解,并提供建议,帮助你做出正确的选择。

前排提醒:本文字数约为15000,阅读时间较长,可收藏后慢慢阅读。

嫌长不看,先放结论

总体最好的GPU:RTX 3080和RTX 3090。

(个人)避免使用的GPU:任何Tesla卡;任何Quadro卡;任何Founders Edition卡;Titan RTX、Titan V、Titan XP。

颇具成本效益而价格高昂:RTX 3080。

颇具成本效益而价格较便宜:RTX 3070、RTX 2060 Super。

我钱不多:购买二手卡,RTX 2070($400)、RTX 2060($300)、GTX 1070($220)、GTX 1070 Ti($230)、GTX 1650 Super($190)、GTX 980 Ti(6GB $150)。

我几乎没钱:有许多创业公司在推广他们的云:使用免费的云积分,并在不同公司的账户之间来回切换,直到能买得起一块GPU。

我做Kaggle:RTX 3070。

我是一名有竞争力的计算机视觉、预训练或机器翻译研究人员:4x RTX 3090。务必要等到有了良好的冷却和足够的电力后(我将更新这篇博文)

我是一名NLP研究人员:如果你不从事机器翻译、语言建模或任何类型的预训练工作,那么RTX 3080就足够了而且颇具成本效益。

我刚开始接触深入学习,而且我很认真:从一块RTX 3070开始。如果你在6到9个月后仍然很认真,卖掉你的RTX 3070,并购买4x RTX 3080。根据你下一步选择的领域(初创公司、Kaggle、研究、深度学习应用),卖掉你的GPU,三年后再买更合适的(下一代RTX 40s GPU)。

我想尝试深度学习,但没当真:RTX 2060 Super就很好,但可能需要使用新电源。如果你的主板有一个PCIe x16插槽,并且有一个大约300W的电源,那么GTX 1050 Ti是一个很好的选择,因为它不需要任何其他计算机组件就可以在你的台式计算机上工作了。

用于模型并行化的、少于128个GPU的GPU集群:如果你可以为你的集群购买RTX GPU:66%的8x RTX 3080和33%的8x RTX 3090(要确保能有效地冷却)。如果解决不了RTX 3090的冷却问题,那么可以购买33%的RTX 6000 GPU或8x Tesla A100。如果不能购买RTX GPU,那么我可能会选择8x A100 Supermicro节点或8x RTX 6000节点。

用于模型并行化的、128个GPU的GPU集群:考虑下8x Tesla A100设置。如果你使用超过512个GPU,那么你应该考虑配置一个DGX A100 SuperPOD系统,以匹配你的规模。

正文开始

这篇博文旨在让你对GPU和NVIDIA的Ampere系列GPU有不同层次的了解。

(1)如果你对GPU如何工作、什么让GPU速度更快、NVIDIA RTX 30 Ampere系列GPU有什么独特之处等问题的细节不感兴趣,那么你可以跳到性能及每美元性能图表和建议部分。这些是这篇文章的核心和最有价值的内容。

(2)如果你关心具体的问题,我在这篇博文最后一部分回答了最常见的问题,以消除一些误解。

(3)如果你想深入了解GPU和张量核是如何工作的,最好是从头到尾阅读这篇文章。根据你对相关主题的了解,你可以跳过一两个小节。

我会在每个主要部分的开头加上一小段总结,希望可以帮助你决定是否要阅读这个部分。

概 述

这篇文章的结构如下。

首先,我将解释是什么使GPU速度更快。我将讨论CPU与GPU、张量核、内存带宽、GPU存储层次以及它们与深度学习性能的关系。对于GPU可以提供什么,这些解释可能会帮助你得到一个更直观的认识。

然后,我将对GPU的性能进行理论估计,并将其与NVIDIA的一些市场基准进行比较,以获得可靠的、无偏差的性能数据。我将讨论新的NVIDIA RTX 30 Ampere系列GPU的独特特性,如果你购买GPU,这些特性是值得考虑的。

在此基础上,我提出了1-2、4、8 GPU设置和GPU集群的GPU建议。之后是问答部分,我回答了Twitter上常见的问题;在这一节中,我还将讨论一些常见的误解和其他一些五花八门的问题,比如云与桌面对比、冷却方式、AMD与NVIDIA对比等。

GPU如何工作?

如果你经常使用GPU,那么了解它们如何工作是很有用的。这些知识有助于你理解为什么GPU在某些情况下速度慢而在其他情况下速度快。然后,你可以更好地理解为什么你首先需要一个GPU,以及其他未来的硬件选项可能会如何竞争。如果你只是想要有用的性能数值和参数,以帮助你决定购买哪个GPU,那么你可以跳过这一节。对于GPU如何工作的问题,最好的高阶解释是我在Quora上的回答:

“为什么GPU适合深度学习”:https://timdettmers.com/Why-are-GPUs-well-suited-to-deep-learning?top_ans=21379913

这是一个高阶解释,很好地说明了为什么GPU比CPU更适合深度学习。如果我们关注细节,就能理解是什么让一个GPU比另一个更好。

与处理速度相关的最重要的GPU参数

本节可以帮助你更直观地理解如何考虑深度学习的性能。这种理解可以帮助你评估未来的GPU。

张量核

要点:

  • 张量核将乘法和加法运算所需的cycle减少为1/16——在我举的例子中,对于一个32×32的矩阵,从128个cycle减少到8个cycle。

  • 张量核减少了反复共享内存访问的次数,从而节省了额外的内存访问cycle。

  • 张量核速度如此之快,计算不再是瓶颈。唯一的瓶颈是如何将数据传输到张量核中。

现在GPU已经足够便宜,几乎每个人都能负担得起一个有张量核的GPU。这就是为什么我只推荐具有张量核的GPU。了解它们是如何工作的,有助于理解这些专门用于矩阵乘法的计算单元的重要性。这里我将向你展示一个简单的例子:A*B=C矩阵乘法,其中,所有矩阵的大小都是32×32,我们将分别看下,计算模式在有和没有张量核时是什么样的。

要完全理解这一点,就必须理解cycle的概念。如果一个处理器以1GHz的速度运行,它每秒可以完成10^9个cycle。每个cycle都代表一次计算机会。然而,大多数时候,操作所花费的时间会超过一个cycle。因此,它创建了一个管道,用于启动一个操作,它需要等待前一个操作完成所需的cycle数。这也称为操作延迟。

下面是一些重要操作的延迟:

  • 全局内存访问(最高48GB):~200 cycle

  • 共享内存访问(每个串流多处理器最高达164KB):~20 cycle

  • 融合乘加(FFMA):4 cycle

  • 张量核矩阵乘法:1 cycle

此外,你应该知道GPU上的最小线程单元是一个包含32个线程的包——这被称为warp。通常,warp以同步模式运行——warp内的线程必须彼此等待。GPU上的所有内存操作都针对warp进行了优化。例如,从全局内存中加载的粒度为32*4字节,恰好有32个浮点数,恰好每个线程一个浮点数。在串流多处理器(SM,相当于一个CPU内核)中,我们最多可以有32个warp=1024个线程。SM的资源被分配给所有活动的warp。所以,有时我们想要运行较少的warp,这样每个warp就有更多的寄存器/共享内存/张量核资源。

对于下面的两个例子,我们假设计算资源相同。对于这个32×32矩阵乘法的小例子,我们使用8个SM(约为RTX 3090的10%),每个SM 8个warp。

矩阵乘法(无张量核)

如果我们想做一个A*B=C的矩阵乘法,其中每个矩阵的大小是32×32,那么我们会希望将反复访问的内存加载到共享内存中,因为它的延迟大约是前者的1/10(200cycle vs 20 cycle)。通常,共享内存中的内存块被称为memory tile或只是tile。使用2*32 warp,可以并行地将两个32 *32浮点数矩阵加载到共享内存块中。我们有8个SM,每个SM有8个warp,因此,得益于并行化,我们只需要执行一次从全局内存到共享内存的顺序加载,这需要200个cycle。

为了进行矩阵乘法,我们现在需要从共享内存A和共享内存B加载一个包含32个数值的向量,并执行一个融合乘加(FFMA)。然后将输出存储在寄存器C中。我们将工作划分为这样一种方式,即每个SM做8x点积(32×32)来计算C的8个输出。为什么这恰好是8(在旧算法中是4)有很强的技术性。这一点,我建议你阅读Scott Gray关于矩阵乘法的博文来理解。这意味着,我们有8次共享内存访问,每次20个cycle,8次FFMA操作,每次4个cycle。因此,总开销是:

200 cycle(全局内存)+ 8*20 cycle(共享内存)+ 8*4 cycle(FFMA)= 392 cycle

下面让我们看下使用张量核时需要多少开销。

矩阵乘法(有张量核)

利用张量核,我们可以在一个cycle内执行4×4矩阵乘法。要做到这一点,我们首先需要把内存读到张量核中。与上面类似,我们需要从全局内存(200 cycle)读取数据并存储在共享内存中。要做一个32×32矩阵乘法,我们需要执行8×8=64次张量核运算。一个SM有8个张量核,因此,我们总共有64个张量核——这正是我们需要的数量!我们可以通过1次内存传输(20 cycle)将数据从共享内存传输到张量核,然后进行64次并行张量核操作(1 cycle)。这意味着,在这种情况下,张量核矩阵乘法的总开销为:

200 cycle(全局内存)+ 20 cycle(共享内存)+ 1 cycle(Tensor Core)= 221 cycle

因此,我们通过张量核将矩阵乘法的开销从392个cycle大幅降低到221个cycle。在这种情况下,张量核降低了共享内存访问和FFMA操作的成本。

在这个例子中,有和没有张量核都大致遵循相同的计算步骤,请注意,这是一个非常简化的例子。在实际情况下,矩阵乘法涉及到更大的共享内存块,计算模式也稍微不同。

不过我相信,通过这个例子,我就很清楚为什么内存带宽对于配备张量核的GPU来说如此重要。在使用张量核进行矩阵乘法时,全局内存是cycle开销中最重要的部分,如果可以降低全局内存延迟,我们甚至可以拥有速度更快的GPU。要做到这一点,我们可以通过增加内存的时钟频率(增加每秒cycle数,但也会增加发热和电量消耗)或增加每次可以转移的元素数量(总线宽度)。

内存带宽

从上一节我们已经看到,张量核非常快。事实上,它们大部分时间都是空闲的,因为需要等待数据从全局内存读到共享内存。例如,在BERT大型训练中,它使用非常大的矩阵——对于张量核来说,越大越好——我们的Tensor Core TFLOPS利用率大约为30%,也就是说,70%的时间张量核都是空闲的。

这意味着,当比较两个具有张量核的GPU时,GPU性能的最佳指标之一就是它们的内存带宽。例如,A100 GPU的内存带宽为1555 GB/s,而V100的是900 GB/s。因此,基本可以估计A100的速度是V100的1555/900 = 1.73倍。

共享内存 / L1缓存大小 / 寄存器

由于内存传输到张量核是性能的限制因素,所以我们正在寻找其他可以提升内存到张量核传输速度的GPU属性。这和共享内存、L1缓存以及使用的寄存器数量有关。理解存储层次结构如何带来更快的内存传输,有助于理解矩阵乘法在GPU上如何执行。

为了执行矩阵乘法,我们利用了GPU的存储层次结构,从慢的全局内存到快的本地共享内存,再到快如闪电的寄存器。然而,越快的存储越小。因此,我们需要将矩阵分割成更小的矩阵,并在本地共享内存中通过这些更小的块执行矩阵乘法,它们速度快,并且接近于串流多处理器(SM)——相当于CPU内核。对于张量核,我们更进一步:我们取每个块并将其中的一部分装入张量核中。共享内存中的矩阵memory tile比GPU全局内存快大约10-50倍,而张量核的寄存器比GPU全局内存快200倍。

拥有更大的tile意味着我们可以重用更多的内存。我在博文TPU vs GPU中详细探讨了这个问题。实际上,你可以将TPU看作是每个张量核都有非常非常大的tile。因此,TPU在每次从全局内存传输数据时都可以重用更多的内存,这使得它们在矩阵乘法计算方面比GPU更有效率。

每个块的大小是由每个串流多处理器(SM,相当于GPU上的一个“CPU内核”)的内存大小决定的。在以下架构中,我们有以下共享内存大小:

  • Volta:96kb共享内存 / 32 kb L1

  • Turing:64kb共享内存 / 32 kb L1

  • Ampere:164kb共享内存 / 32 kb L1

我们看到,Ampere的共享内存更大,块大小就更大,这减少了全局内存访问延迟。因此,Ampere可以更好地利用GPU存储的总体内存带宽。这将提高大约2-5%的性能。对于大型矩阵,性能的提升尤其明显。

Ampere张量核的另一个优点是它们在线程之间共享更多的数据。这减少了寄存器的使用。寄存器被限制为每个串流多处理器(SM)64k或每个线程255。比较Volta和Ampere张量核,Ampere张量核使用1/3的寄存器,允许更多张量核在共享内存的每个块上活动。换句话说,我们可以用相同数量的寄存器支撑3倍的张量核。然而,由于带宽仍然是瓶颈,所以实际的TFLOPS与理论的TFLOPS相比,只会有微小的提高。新的张量核提高了大约1-3%的性能。

总的来说,我们可以看到,Ampere的架构经过优化,它使用改进后的存储层次结构(从全局内存到共享内存块,再到张量核寄存器),使可用内存带宽更加有效。

评估Ampere的深度学习性能

要点:

  • 根据内存带宽和Ampere GPU改进的存储层次估计,理论上,其速度提升1.78倍到1.87倍。

  • NVIDIA提供了TeslaA100和V100 GPU的准确基准测试数据。这些出于营销目的数据存在偏差,但是可以建立这些数据的去偏模型。

  • 去偏基准测试数据显示,Tesla A100在NLP方面比V100快1.70倍,在计算机视觉方面比V100快1.45倍。

如果你想了解我如何评估Ampere GPU性能的更多技术细节,那么本节就是为你准备的。如果你不关心这些技术方面,则可以跳过此部分。

Ampere速度的理论估计

综上所述,我们认为,两种配备张量核的GPU架构之间的差异主要在于内存带宽。使用张量核的其他好处包括更多的共享内存/L1缓存和更好的寄存器。

如果我们将TeslaA100GPU带宽与TeslaV100 GPU带宽相比较,我们得到的速度提升为1555/900 = 1.73倍。此外,我希望从更大的共享内存中得到2-5%的加速,从改进的张量核中得到1-3%的加速。这使得速度提升在1.78倍和1.87倍之间。用类似的推理方法,你就可以估计Ampere系列其他GPU与TeslaV100相比的速度提升。

Ampere速度的实际估计

假设我们有针对一种GPU架构的估计,如Ampere、Turing或Volta,我们就可以很容易地将这些结果推到相同架构/系列的其他GPU上。幸运的是,NVIDIA已经在广泛的计算机视觉和自然语言理解任务中对A100和V100进行了基准测试。遗憾的是,NVIDIA使用了不同的批次大小和GPU数量,使得这些数值无法直接进行比较,从而得出有利于A100的结果。所以,在某种意义上,这些基准数据部分是真实的,部分是市场数据。一般来说,你可能会认为,更大的批次大小才公平,因为A100有更多的内存,但是为了比较GPU架构,我们应该评估批次大小相同时的无偏内存性能。

为了得到无偏估计,我们可以通过两种方式对V100和A100结果进行缩放:

(1)考虑批次大小差异,(2)考虑使用1个GPU和8个GPU的差异。幸运的是,我们能在NVIDIA提供的数据中找到对这两种偏差的估计。

批次大小增加一倍使吞吐量增加13.6%(CNN,以每秒图像数为单位)。我在RTX Titan上针对同样的问题测试了Transformer,惊奇地发现了同样的结果:13.5%——这似乎是一个可靠的估计。

当我们将网络在更多的GPU上并行化时,由于一些网络开销,我们会损失性能。与V100 8x GPU系统(NVLink 2.0)相比,A100 8x GPU系统有更好的网络(NVLink 3.0)——这是另一个令人困惑的因素。直接查看NVIDIA的数据,我们可以发现,对于CNN来说,8x A100系统比8x V100系统开销低5%。这意味着,从1x A100到8xA100可以获得7倍的速度提升,而从1x V100到8xA100可以获得6.67倍。对于Transformer来说,这个数值是7%。

使用这些数据,我们可以从NVIDIA提供的直接数据中估算其对于一些特定深度学习架构的速度提升。与Tesla V100相比,Tesla A100可以提供以下速度提升:

  • SE-ResNeXt101:1.43倍

  • Masked-R-CNN:1.47倍

  • Transformer(12层, 机器翻译, WMT14 en-de):1.70倍

因此,对于计算机视觉来说,这些数值比理论估计要低一些。这可能是由于张量维数较小,准备矩阵乘法(如img2col或快速傅里叶变换(FFT))所需的操作开销,或者操作无法充分利用GPU(最后的层通常相对较小)。它也可以是特定架构的工件(分组卷积)。

Transformer实际估计值与理论估计值非常接近。这可能是因为大型矩阵的算法非常简单。我将使用这些实际的估计来计算GPU的成本效率。

估计中可能存在的偏差

上面是对A100和V100的对比估计。过去,NVIDIA“游戏”GPU RTX出现了性能偷偷下降的问题:(1)降低张量核利用率,(2)风扇散热,(3)禁用对等GPU传输。与Ampere A100相比,RT 30系列可能有未公布的性能下降。有了消息,我会更新这篇博文。

Ampere / RTX 30系列的其他考虑因素

要点:

  • Ampere可以用于稀疏网络训练,它最高可以将训练速度提高2倍。

  • 稀疏网络训练仍然很少使用,但将使Ampere可以经受住未来的考验。

  • Ampere有新的低精度数据类型,这使得使用低精度数值更容易,但不一定比以前的GPU更快。

  • 新的风扇设计非常棒,如果你的GPU之间有间隙的话,但不清楚如果多个GPU之间没有间隙,它们是否能有效冷却。

  • RTX3090的3插槽设计使得4x GPU构建成为问题。可能的解决方案是2插槽转换或使用PCIe扩展器。

  • 4x RTX 3090需要的电量比目前市场上任何标准电源单元所能提供的电量都多。

与NVIDIA Turing RTX 20系列相比,新的NVIDIA Ampere RTX30系列具有额外的优点,如稀疏网络训练和推理。其他特性,比如新的数据类型,更多的是易用性特性,因为它们提供了和Turing一样的性能提升,但是不需要任何额外的编程。

稀疏网络训练

Ampere可以以稠密矩阵的速度进行细粒度结构自动稀疏矩阵乘法。它的工作原理是,如果有一个矩阵,你把它分割成4个元素,现在,稀疏矩阵张量核特性允许这4个元素中的2个为零。这就带来了2倍的速度提升,因为矩阵乘法的带宽需求减半了。

我以前研究过稀疏网络训练。对于我的工作,有一种批评是“你减少了网络所需的FLOPS,但却没能带来速度的提升,因为GPU不能做快速稀疏矩阵乘法。”那好吧,加上张量核的稀疏矩阵乘法特性,我的算法,或者其他的稀疏训练算法,现在在实际的训练中提供了2倍的速度提升。

虽然这个特性还在实验阶段,训练稀疏网络还不是很普遍,但GPU拥有这个特性意味着你已经为未来的稀疏训练做好了准备。

低精度计算

在我之前的工作中,我已经展示过,新数据类型可以提高低精度反向传播的稳定性。目前,如果你想要实现16位浮点数(FP16)的稳定反向传播,主要问题是普通FP16数据类型只支持[-65504,65504]区间内的数值。如果梯度超出这个范围,就会变成NaN值。为了防止在FP16训练期间发生这种情况,我们通常会进行损失缩放,即在反向传播之前将损失乘以一个小数值,以防止这种梯度爆炸。

Brain Float 16格式(BF16)使用更多的位作为指数,这样,其可能的数值范围与FP32相同:[-3*10^38,3*10^38]。BF16的精度较低,但梯度精度对学习来说并不是那么重要。所以BF16所做的就是你不再需要做任何损失缩放或者担心梯度迅速膨胀。因此,我们可以看到使用BF16格式时训练稳定性的提高,只是精度稍有降低。

这意味着:使用BF16精度,训练可能比FP16精度更稳定,而提供了同等的速度提升。使用TF32精度,可以得到接近FP32的稳定性,接近FP16的速度提升。好的方面是,要使用这些数据类型,只需将FP32替换为TF32,将FP16替换为BF16——不需要修改代码!

不过,总的来说,这些新数据类型可以被视为懒惰数据类型,因为通过一些额外的编程工作(适当的损失缩放、初始化、归一化、使用Apex),使用旧数据类型就可以获得所有这些好处。因此,这些数据类型并不提供速度提升,而是提高了低精度训练的易用性。

新的风扇设计/散热问题

RTX 30系列新的风扇设计包括一个鼓风扇和一个推挽式风扇。设计很巧妙,如果你的GPU之间有间隙,也会非常有效。然而,如果你把GPU堆在一起,就不清楚它们表现如何了。鼓风扇将能够通过远离其他图形处理器的支架排气,但也没法说那多有效,因为鼓风扇的设计和以前不同。在一个4 PCIe插槽设置中,如果你想购买1到2个GPU,那应该没问题。然而,如果你打算同时使用3到4个RTX 30 GPU,那么我需要等散热性能报告出来,了解下是否需要不同的GPU冷却器、PCIe扩展器或其他解决方案。到时候我会更新这篇博文。

为了克服散热问题,水冷在任何情况下都可以提供一个解决方案。许多厂商为RTX 3080/RTX 3090卡提供水冷模块,即使在4x GPU设置中也能保持低温。如果你想运行一个4x GPU设置,可以留心下一体化水冷却解决方案,因为在大多数桌面情况下散热器都很难分散开。

冷却问题的另一个解决方案是购买PCIe扩展器,并将GPU在机箱内分散开。这非常有效,华盛顿大学的其他博士生和我使用这个设置都非常成功。那看起来不漂亮,但它可以使你的GPU保持凉爽!即使你没有足够的空间来将GPU分散开,它还是可以帮到你。例如,如果你可以在一个台式电脑的机箱中找到空间,那么你或许就可以购买标准的3槽宽RTX 3090,并在机箱中使用PCIe扩展器来把它们分散开。这样,你就可以通过一个简单的解决方案解决了4x RTX 3090设置中的空间问题和冷却问题。

image

3插槽设计和电量问题

RTX 3090是一个3插槽GPU,所以你不能在4x设置中使用NVIDIA的默认风扇设计。这是合理的,因为它运行在350W TDP下,在多GPU 2插槽设置中很难降温。RTX 3080运行在320W TDP下只稍好一点,而冷却一个4x RTX 3080设置也会非常困难。

在4x RTX 3090设置下为一个4x350w = 1400W系统供电也很困难。1600W的供电单元(PSU)很容易获得,但只有200W是给CPU供电,主板用电可能太紧。只有在元件获得充分利用的情况下,才会达到最大电量,而在深度学习中,CPU通常只处于弱负载状态。这样,一个1600W的PSU就可以很好地为一个4x RTX 3080构建供电,但是对于一个4x RTX 3090构建,最好是找一个高瓦数的PSU(+1700W)。目前,在台式电脑市场上似乎没有一个PSU超过1600W。服务器或加密货币挖矿PSU可能可以解决这个问题,但可能外形奇怪。

GPU深度学习性能

下面的基准测试不仅包括Tesla A100和Tesla V100的基准测试,我还构建了一个适合这些数据的模型,以及基于Titan V、Titan RTX、RTX 2080 Ti和RTX 2080的四个不同的基准测试。[1234]

除此之外,我还通过在基准数据的这些数据点之间进行插值扩展了RTX 2070、RTX 2060卡或是Quadro RTX 6000&8000卡。通常,在同一个架构中,GPU的扩展与串流多处理器和带宽成线性关系,而我的架构模型就是以此为基础。

我只收集了混合精度FP16训练的基准数据,因为我相信,没有充分的理由使用FP32训练。

image

与RTX 2080 Ti相比,RTX 3090将卷积网络的速度提高了1.57倍,将Transformer的速度提高了1.5倍,与此同时,定价也涨了15%。因此,与Turing RTX 20系列相比,Ampere RTX 30提供了一个非常实质性的改进。

GPU深度学习的每美元性能

什么GPU能给你带来最好的回报?这取决于整个系统的成本。如果你有一个成本高昂的系统,那么投资更昂贵的GPU是有意义的。

这里有三个PCIe 3.0构建,我用它作为2/4 GPU系统的基础成本,然后再加上GPU成本。GPU成本是GPU在亚马逊和eBay上成本的均值。对于新的Ampere GPU,我使用了定价。结合上文给出的性能值,就可以得出这些GPU系统的每美元性能值。对于8 GPU系统,我使用Supermicro barebone作为基准成本——这是RTX服务器的行业标准。请注意,这些柱状图没有考虑内存需求。你应该首先考虑自己的内存需求,然后在图表中寻找最佳选项。关于内存,这里有一份大致的指南:

  • 使用预训练的Transformer;从头开始训练小型Transformer:>= 11GB

  • 在研发/生产环境中训练大型Transformer或卷积网络:>= 24 GB

  • 开发神经网络原型(Transformer或卷积网络):>= 10 GB

  • Kaggle竞赛:>= 8 GB

  • 计算机视觉应用:>= 10GB

image

image

image

GPU推荐

我需要再次强调的第一件事是:在选择GPU的时候,你需要确保它有足够的内存来完成你想做的事情。选择GPU应该按下面的步骤来:

  1. 我想用GPU做什么:Kaggle竞赛、学习深度学习、破解小项目(GAN还是大型语言模型?)、计算机视觉/自然语言处理/其他领域研究,或者其他什么?

  2. 我要做的事需要多大内存?

  3. 使用上面的成本/性能图找出满足内存标准的、最适合你的GPU。

  4. 对于我选择的GPU有其他的注意事项吗?例如,如果是RTX 3090,我能把它装进我的电脑吗?对于我选的GPU,我的电源单元(PSU)功率是否足够?散热会是问题吗?或者我能以某种方式有效地冷却GPU吗?

其中一些细节需要你自我反省你想要什么,也许可以研究一下,对于你的兴趣领域,其他人使用多大内存的GPU。我可以提供一些指导,但无法面面俱到。

我什么时候需要 >= 11 GB 的内存?

我之前提到过,如果你使用Transformer,那么你至少应该有11GB的内存,如果你研究Transformer,则内存>= 24GB更好。这是因为之前大多数经过预训练的模型都有相当高的内存要求,而且这些模型至少是使用拥有11 GB内存的RTX 2080 Ti GPU进行训练。因此,小于11GB可能会遇到难以或不可能运行某些模型的情况。

其他需要大量内存的领域包括医学成像、一些最先进的计算机视觉模型以及任何有超大图像的东西(GAN,样式转换)。

一般来说,如果你想建立一个模型并据此获得竞争优势,无论是研究、行业还是Kaggle竞赛,额外的内存可能会为你带来优势。

什么时候内存可以 <11 GB ?

RTX 3070和RTX3080是非常强大的卡,但它们内存有点小。不过,对于许多任务,你不需要那么大的内存。

如果你想学习深度学习,那么RTX 3070就很完美。这是因为训练大多数架构的基本技能都可以通过将它们缩小一点或者使用小一点的输入图像来学习。如果我再次学习深度学习,我可能会使用一个RTX 3070,如果有多余的钱,甚至会用多个。

RTX 3080是目前为止最具成本效益的卡,因此是原型设计的理想选择。对于原型设计,你想要内存最大的,这仍然很便宜。这里所说的原型设计可以是在任何领域的原型设计:研究、Kaggle竞赛、为创业公司出主意/设计模型、试验研究代码。对于所有这些应用程序,RTX 3080都是最好的GPU。

假设我将领导一个研究实验室/创业公司。我将把66-80%的预算投入到RTX 3080机器上,20-33%用于配备了强大水冷装置的RTX 3090机器。我的想法是,RTX 3080的成本效益更高,可以作为原型机,通过slurm集群设置来共享。因为原型设计应该以敏捷的方式完成,所以应该使用较小的模型和数据集。RTX 3080非常适合这个场景。一旦学生/同事获得了一个很好的原型模型,他们就可以将原型转移到RTX 3090机器上,并将其扩展为更大的模型。

一般建议

总的来说,RTX 30系列非常强大,我强烈推荐这些GPU。如前一节所述,要注意内存,还要注意电源和冷却需求。如果你的GPU之间有一个PCIe插槽,则冷却将没有任何问题。否则,如果使用RTX 30卡,请准备好水冷装置、PCIe扩展器或有效的鼓风扇卡(未来几周的数据将会说明,NVIDIA的风扇设计是足够的)。

一般来说,我会推荐RTX 3090给任何买得起它的人。不仅是现在,未来3-7年它都将是一个非常有效的卡。因此,这是一项将保持强劲增长的好投资。HBM内存三年内不太可能变便宜,所以下一个GPU只会比RTX 3090好25%左右。我们可能会在5-7年内看到廉价的HBM内存,在那之后,你肯定想要升级。

如果你有多个RTX 3090,请确保你选择的解决方案可以提供有效的冷却和足够的电力。对于什么样的设置合适,我将随着可用数据的增加更新关于这个问题的博文。

对于没有强烈竞争需求的企业(研究公司、Kaggle竞赛、竞争性初创公司),我推荐RTX 3080。这是一个更经济的解决方案,并将确保大多数网络的训练都足够快。如果你使用了合适的内存技巧,并且不介意额外进行编程,那么现在有足够的技巧将一个24GB的神经网络适配到10GB的GPU上。因此,如果你接受一些不确定性和额外的编程,那么RTX 3080也可能是比RTX 3090更好的选择。

一般来说,对于学习深度学习和原型设计,RTX 3070也是一种可靠的卡,它比RTX 3080便宜200美元。如果你负担不起RTX3080,那么RTX3070是最好的选择。

如果你的预算有限,而RTX 3070又太贵,那么一个二手RTX 2070在易趣上大约要260美元。现在还不清楚是否会推出RTX 3060,但如果你的预算有限,可能也值得再等一段时间。如果定价与RTX 2060和GTX 1060类似,那么预计其价格将在250美元到300美元之间,而且性能相当强劲。

GPU集群建议

GPU集群设计高度依赖于用途。对于一个+1024 GPU系统,网络最重要,但在这样的系统上,如果用户一次最多只使用32个GPU,投资强大的网络基础设施就是浪费。在这里,我将使用类似原型推广的推理,如在RTX 3080和RTX 3090案例对比中所做的那样。

一般来说,因为CUDA许可协议,RTX卡被禁止进入数据中心。然而,大学通常可以得到这个规则的豁免。与英伟达的人取得联系请求豁免权是值得的。如果你被允许使用RTX卡,那么我建议使用配备了RTX 3080或RTX 3090 GPU的标准Supermicro 8 GPU系统(如果可以保证有效冷却)。一组8x A100节点就可以确保在原型化之后有效地“推广”,特别是在不能保证8x RTX 3090服务器能够得到充分冷却的情况下。在这种情况下,我建议使用A100而不是RTX 6000 / RTX 8000,因为A100非常划算,而且是面向未来的。

如果你想在一个GPU集群(+256个GPU)上训练非常大的网络,我推荐配备了A100 GPU的NVIDIA DGX SuperPOD系统。在+256 GPU的规模下,网络变得至关重要。如果你想扩展到超过256个GPU,那么你将需要一个高度优化的系统,把标准解决方案攒在一起就不在有效了。

特别是在+1024 GPU的规模上,市场上唯一具有竞争力的解决方案是谷歌TPU Pod和NVIDIA DGX SuperPod。在这个规模上,我更喜欢谷歌TPU Pod,因为他们定制的网络基础设施似乎优于NVIDIA DGX SuperPod系统——尽管这两种系统非常接近。比起TPU系统,GPU系统为深度学习模型和应用提供了更多的灵活性,而TPU系统支持更大的模型,并提供更好的伸缩性。所以两种系统都有各自的优点和缺点。

不要买这些GPU

我不建议购买多个RTX Founders Editions或RTX Titans,除非你有PCIe扩展器可以解决它们的冷却问题。它们运行时很容易过热,其性能将远远低于上文图表中的数值。4x RTX 2080 Ti Founders Editions GPU将很快超过90C,此时,其内核的时钟频率会降低,运行速度将比适当冷却的RTX 2070 GPU更慢。

我不建议购买Tesla V100或A100,除非你是被迫购买的(禁止RTX数据中心策略的公司),或者你想在一个巨大的GPU集群上训练非常大的网络——这些GPU不是很划算。

如果你能买得起更好的卡,就不要购买GTX 16系列。这些卡没有张量核,因此,深度学习性能相对较差。相比GTX 16系列,我宁可选择二手的RTX 2070 / RTX 2060 / RTX 2060 Super。如果你差钱,那GTX 16系列也算是个不错的选择。

什么情况下最好不要购买新的GPU?

如果你已经拥有RTX 2080 Tis或更好的GPU,升级到RTX 3090可能就没有意义。你的GPU已经很好了,使用新推出的高能耗RTX 30卡,你需要为PSU和冷却问题担忧,而性能的提升却微不足道——不值得。

我想要从4x RTX 2080 Ti升级到4x RTX 3090的唯一原因是,我在研究非常大的Transformer或其他高度依赖计算的网络训练。但是,如果内存是问题,在升级到RTX 3090之前,你可以首先考虑一些内存技巧,以便在4x RTX 2080 Tis上适配大模型。

如果你有一个或多个RTX 2070 GPU,升级前要三思。这些都是很好的GPU。如果你发现自己经常受限于8GB的内存,那么可以在eBay上转手出售这些GPU并获得RTX 3090。这一推论也适用于许多其他GPU:如果内存紧张,那么升级就是对的。

问 & 答 & 误解

要点:

  • PCIe 4.0和PCIe通道在2x GPU设置中并不重要。对于4x GPU设置,它们也不是特别重要。

  • RTX 3090和RTX 3080的冷却会是个问题。使用水冷卡或PCIe扩展器。

  • NVLink没用,只对GPU集群有用。

  • 你可以在一台计算机中使用不同的GPU类型(如GTX 1080 + RTX 2080 + RTX 3090),但你无法有效地将它们并行。

  • 在两台以上的机器上并行训练,你需要Infiniband +50Gbit/s的网络。

  • AMD CPU比Intel CPU便宜,而Intel CPU几乎没有任何优势。

  • 尽管做出了非常大的努力,但由于缺少社区和张量核,至少在1-2年内AMD GPU+ ROCm可能都无法与NVIDIA竞争。

  • 如果你使用GPU的时间不到一年,那么云GPU是有帮助的。除此之外,台式机是更便宜的解决方案。

我需要PCIe 4.0吗?

一般来说,不需要。如果你有一个GPU集群,PCIe 4.0很有用。如果你有一台8x GPU机器,也还可以,但除此之外,它就没有多大好处了。它可以帮助实现更好的并行化和更快的数据传输。数据传输在任何应用程序中都不是瓶颈。在计算机视觉中,在数据传输管道中,数据存储可能是瓶颈,而PCIe从CPU到GPU的传输则不是瓶颈。所以,对于大多数人来说,没有真正的理由去安装PCIe 4.0。在4 GPU设置中,这样做的好处是,并行度可能会提高1-7%。

我需要8x/16x PCIe通道吗?

和PCIe 4.0一样,一般来说,不需要。并行化和快速数据传输需要PCIe通道,但这几乎不会成为瓶颈。在4x 通道上运行GPU就很好,特别是当你只有2个GPU的时候。对于4 GPU设置,我更希望每个GPU有8个通道,但如果你是在4个GPU上并行运行的话,那么4个通道可能只会降低5-10%的性能。

如果每个RTX 3090需要3个PCIe插槽,我该如何安装4x RTX 3090?

你需要一个双插槽变体,或者你可以尝试使用PCIe扩展器布置它们。除了空间之外,你还需要考虑冷却问题和一个合适的PSU。最易于管理的解决方案似乎是,4xRTX 3090 EVGA Hydro Copper加一个定制的水冷循环。这可以使卡处于低温状态。EVGA生产Hydro Copper版本的GPU已有多年,我认为你可以信任其水冷式GPU的质量。不过,可能还有其他更便宜的变体。

PCIe扩展器也可以解决空间和冷却问题,但是你需要确保你的机箱中有足够的空间来布置GPU。一定要确保你的PCIe扩展器足够长!

我该如何冷却4x RTX 3090或4x RTX 3080?

请看上节。

我可以使用多个不同类型的GPU吗?

是的,你可以!但是不同类型的GPU无法有效地并行。我认为,一个3x RTX 3070加一个RTX 3090就够原型推广了。另一方面,在4x RTX 3070 GPU上并行会非常快,如果你能将模型放到这些GPU上的话。除此之外,我能想到的你希望这样做的唯一原因是,你希望继续使用旧GPU。这没问题,但是在那些GPU上并行会比较低效,因为最快的GPU会等待最慢的GPU到达一个同步点(通常是梯度更新)。

NVLink是什么,有用吗?

一般来说,NVLink是没有用的。NVLink是GPU之间的高速互连。如果你有一个有+128 GPU的GPU集群,它就有用了。否则,与标准PCIe传输相比,它几乎不会产生任何好处。

我钱不够,即使是你推荐的最便宜的GPU。我能做什么?

当然是买二手GPU。二手RTX 2070(400美元)和RTX 2060(300美元)都很棒。如果你负担不起,次佳选项是试着买一个二手的GTX 1070(220美元)或GTX 1070 Ti(230美元)。如果那还太贵,则可以使用GTX 980 Ti (6GB 150美元)或使用GTX 1650 Super(190美元)。如果这都太贵的话,最好是使用免费的GPU云服务。通常,这些服务会有时间限制,之后你就需要付费了。你可以轮流使用不同的服务和账户,直到你有钱购买自己的GPU。

GPU的碳排放量是多少?我如何使用GPU而又不污染环境?

我构建了一个碳计算器,供学者们计算自己的碳排放量(从航班到会议 + GPU时间的碳排放)。该计算器也可以用来计算纯粹的GPU碳排放量。你会发现,GPU产生的碳比国际航班多得多。因此,你应该确保你有一个绿色能源,如果你不想有一个天文数字的碳排放量。如果我们这个地区没有电力供应商提供绿色能源,最好的办法就是购买碳抵消。许多人对碳抵消持怀疑态度。他们工作吗?他们是在诈骗吗?

我相信,在这种情况下,怀疑主义是有害的,因为什么都不做比冒着被骗的风险更有害。如果你担心被骗,只需投资一个抵消投资组合来最小化风险。

大约十年前,我参与了一个产生碳抵消的项目。联合国官员跟踪了整个过程,他们获得了干净的数字数据,并对项目现场进行了实地检查。在这种情况下产生的碳抵消是非常可靠的。我相信,其他许多项目也有类似的质量标准。

碳计算器:https://github.com/TimDettmers/carbonneutral

在两台机器之间并行需要什么?

如果你想要跨机器并行,那么你将需要+50Gbits/s的网卡来提高速度。关于这个问题,我有一篇有点过时的博文。现在,我建议至少有一个EDR Infiniband设置,这意味着网卡至少有50 GBit/s的带宽。两张带线缆的EDR卡在eBay上大约卖500美元。

稀疏矩阵乘法特性适用于一般的稀疏矩阵吗?

似乎并非如此。稀疏矩阵的粒度需要满足每4个元素有2个零值元素,也就是说,稀疏矩阵需要是高度结构化的。可以稍微调整下算法,这涉及到将4个值组合成2个值的压缩表示,但这也意味着Ampere GPU不可能实现任意稀疏矩阵的精确乘法。

我需要Intel CPU来支持多GPU设置吗?

我不推荐Intel CPU,除非你在Kaggle竞赛中大量使用了CPU(CPU上的大量线性代数运算)。即使是在Kaggle竞赛中,AMD CPU仍然很好。在深度学习方面,AMD GPU比Intel GPU更便宜也更好。对于4x GPU构建,我的首选CPU是Threadripper。我们在大学里用Threadripper构建了几十个系统,它们都工作得很好——还没有人抱怨。对于8x GPU系统,我通常会选择供应商熟悉的CPU。在8x系统中,CPU和PCIe/系统可靠性比单纯的性能或成本效益更重要。

我应该等待RTX 3090 Ti吗?

目前还不清楚是否会有RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。GTX XX90的名称通常是留给双GPU卡,所以NVIDIA是偏离了这一趋势。从价格和性能来看,似乎RTX 3090是一个取代RTX 3080 Ti的名字。但是所有这些都是推测。如果你对这个问题感兴趣,我建议你对Rumor Mill上的新闻跟踪一两个月,如果你什么都没有看到,就不太可能出现RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。

机箱设计对散热有影响吗?

没有。只要GPU之间有一个小间隙,GPU的冷却通常就没问题。机箱设计可以提供1到3摄氏度的好处,而GPU之间的间隙将提供10到30摄氏度的改进。归根结底,如果GPU之间有间隙,冷却就没问题。如果GPU之间没有间隙,就需要合适的冷却器设计(鼓风扇)或其他解决方案(水冷、PCIe扩展器),但无论哪种情况,机箱设计和机箱风扇都不很重要。

AMD GPUs + ROCm能赶上NVIDIA GPUs + CUDA吗?

1-2年内赶不上。这涉及三个方面的问题:张量核、软件和社区。

就纯硅而言,AMD GPU很棒:优秀的FP16性能,优秀的内存带宽。然而,由于缺乏张量核或等效特性,其深度学习性能与NVIDIA GPU相比较差。封装的低精度数学函数不能解决这个问题。没有这个硬件特性,AMD GPU将永远不会有竞争力。有传言称,AMD计划在2020年推出某种具有张量核等效特性的数据中心卡,但此后就没有新的数据出现了。拥有张量核等效特性的数据中心卡意味着很少有人能够负担得起这样的AMD GPU,这将给NVIDIA带来竞争优势。

假设AMD在未来引入了类似于张量核的硬件特性。然后很多人会说,“但是没有软件针对AMD GPU!”我该怎么使用它们呢?这更多的是一种误解。AMD软件ROCm已经发展很长一段时间了,并且PyTorch提供了优秀的支持。虽然我没有看到很多针对AMD GPU+ PyTorch的经验报告,但所有的软件功能已整合。看起来,不管你选择什么网络,都可以很好地在AMD GPU上运行。所以,在这方面,AMD已经走过了一段很长的路,这个问题或多或少得到了解决。

然而,如果软件问题和缺少张量核的问题已得到了解决,AMD还有一个问题:缺少社区。如果你使用NVIDIA GPU遇到问题,你可以在谷歌查询这个问题并找到解决方案。这让人们对NVIDIA GPU产生了很大的信任。你有基础设施,使使用NVIDIA GPU变得很容易(任何深度学习框架都可以使用,任何科学问题都得到很好的支持)。你可以轻松地使用NVIDIA GPU(比如apex)。你很容易就可以找到NVIDIA GPU和编程专家,而我认识的AMD GPU专家就少得多。

在社区方面,AMD和NVIDIA的对比有点像Julia和Python。Julia有很大的潜力,很多人会说,它是科学计算的高级编程语言。然而,与Python相比,Julia很少被使用。这是因为Python社区非常强大。Numpy、SciPy、Pandas都是功能强大的软件包,有很多人在使用它们。这与NVIDIA vs AMD的问题非常相似。

因此,在引入张量核等效特性(1/2到1年?)并围绕ROCm建立一个强大的社区(2年?)之前,AMD很可能都无法赶上NVIDIA。AMD总是会在特定的子领域(如加密货币挖掘、数据中心)抢夺一部分市场份额。不过,在深度学习领域,至少几年的时间内,NVIDIA可能会保持其垄断地位。

什么时候使用云GPU?什么时候使用专用的GPU台式机/服务器?

经验法则:如果你希望做深度学习超过一年,那就买一台GPU台式机。否则,最好使用云实例。

最好自己算一下。例如,如果对比下配备了1x V100的AWS V100 spot实例和一个只有一块RTX 3090的台式机(性能类似),那么对于台式机,我们要花2200美元(2-GPU Barebone+ RTX 3090)。此外,假设你在美国,你需要额外支付每千瓦/时0.12美元的电费,而AWS实例是每小时2.14美元。

以每年15%的利用率来说,台式机每年消耗的电量为:

(350 Watt (GPU) + 100 Watt (CPU))*0.15 (utilization) * 24 hours * 365 days = 591 kW/h

即每年591kW/h,需额外支付71美元。

在利用率为15%(一天中15%的时间使用云实例)的情况下,台式机和云实例的盈亏平衡点大约是300天(2311美元 vs 2270美元):

$2.14/h * 0.15 (utilization) * 24 hours * 300 days = $2,311

因此,如果你希望在300天后继续运行深度学习模型,最好是购买一台台式机,而不是使用AWS spot实例。

对任何云服务,你都可以进行类似的计算,以决定是使用云服务还是台式机。

下面是常见的利用率:

  • 博士生个人台式机:< 15%

  • 博士生slurm GPU集群:> 35%

  • 企业slurm研究集群:> 60%

一般来说,对于那些思考前沿想法比开发实用产品更重要的职业来说,利用率较低。有些领域的利用率很低(可解释性研究),而其他领域的利用率则高得多(机器翻译、语言建模)。一般来说,个人机器的利用率几乎总是被高估了。大多数个人系统的利用率通常在5-10%之间。这就是为什么我强烈推荐slurm GPU集群给研究小组和公司,而不是个人的桌面GPU机器。

查看英文原文:

https://timdettmers.com/2020/09/07/which-gpu-for-deep-learning/