【翻译】为深度学习购买哪种GPU: 我在深度学习中使用GPU的经验和建议

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

深度学习是一个具有强烈计算要求的领域你对GPU的选择将从根本上决定你的深度学习体验。但是如果你想购买一个新的GPU哪些功能是重要的GPU内存、核心、张量核心、缓存如何做出一个具有成本效益的选择这篇博文将深入探讨这些问题解决常见的误解让你对如何思考GPU有一个直观的认识并借给你建议这将有助于你做出适合你的选择。

这篇博文旨在让你对GPU和NVIDIA的新安培系列GPU有不同程度的了解。你可以选择(1) 如果你对GPU如何工作的细节不感兴趣与CPU相比什么使GPU速度快以及新的NVIDIA RTX 40 Ampere系列的独特之处你可以直接跳到性能和每美元性能图表以及推荐部分。成本/性能数字构成了这篇博文的核心围绕它的内容解释了构成GPU性能的细节。

(2) 如果你担心具体的问题我已经在博文的后面部分回答并解决了最常见的问题和误解。

(3) 如果你想深入了解GPU、缓存和Tensor Cores的工作原理最好是从头到尾阅读这篇博文。你可能想根据你对所提出的主题的理解跳过一两节。

概述

这篇博文的结构如下。首先我将解释是什么让GPU变得快速。我将讨论CPU与GPU、Tensor Cores、内存带宽和GPU的内存层次以及这些与深度学习性能的关系。这些解释可能会帮助你对在GPU中寻找什么有一个更直观的感觉。我讨论了新的NVIDIA RTX 40安培GPU系列的独特功能如果你购买GPU这些功能值得考虑。从那里我针对不同的场景提出了GPU建议。之后是一个问答部分是在Twitter线程中向我提出的常见问题在该部分中我还将讨论常见的误解和一些杂项问题如云与桌面、冷却、AMD与NVIDIA以及其他。

GPU是如何工作的

如果你经常使用GPU了解它们的工作原理是非常有用的。这些知识将帮助你了解GPU是快还是慢的情况。反过来你也许能够更好地理解为什么你首先需要一个GPU以及其他未来的硬件选项如何能够与之竞争。如果你只想获得有用的性能数字和论据来帮助你决定购买哪种GPU你可以跳过这一部分。对于GPU如何工作的问题最好的高层次解释是我在Quora上的回答。

在Quora上阅读Tim Dettmers对 "为什么GPU非常适合深度学习 "的回答\n这是一个高水平的解释很好地解释了为什么GPU比CPU更适合深度学习。如果我们看一下细节我们就可以理解是什么让一个GPU比另一个更好。

对深度学习处理速度最重要的GPU规格

本节可以帮助你对如何思考深度学习的性能建立一个更直观的理解。这种理解将有助于你自己评估未来的GPU。本节按照每个组件的重要性进行排序。张量核心是最重要的其次是GPU的内存带宽缓存层次最后才是GPU的FLOPS。"

张量核心

张量核心是能够进行非常有效的矩阵乘法的微小核心。由于任何深度神经网络中最昂贵的部分是矩阵乘法因此张量核心非常有用。在快速方面它们是如此强大以至于我不推荐任何没有张量核心的GPU。

了解它们是如何工作的有助于理解这些专门用于矩阵乘法的计算单元的重要性。在这里我将向你展示一个简单的A*B=C矩阵乘法的例子其中所有矩阵的大小为32×32有无张量核心的计算模式是什么样的。这是一个简化的例子并不是一个高性能的矩阵乘法内核的确切写法但它有所有的基本要素。一个CUDA程序员会把它作为第一份 “草稿”然后用双缓冲、寄存器优化、占用率优化、指令级并行等概念一步步优化它在此我就不讨论了。

为了充分理解这个例子你必须理解周期的概念。如果一个处理器以1GHz的速度运行它每秒可以完成10^9个周期。每个周期代表一个计算的机会。然而大多数时候操作需要的时间超过一个周期。因此我们本质上有一个队列下一个操作需要等待下一个操作完成。这也被称为操作的延时。

下面是一些重要的操作的延迟周期时间。这些时间在不同的GPU世代会有变化。这些数字是针对安培GPU的它们的缓存相对较慢。"

  • 全局内存访问高达80GB~380周期\n
  • 二级缓存: ~200个周期
  • L1高速缓存或共享内存访问每个流式多处理器最多128kb。~34周期
  • 融合乘法和加法a*b+cFFMA4个周期
  • Tensor Core矩阵乘法。1个周期

每个操作总是由32个线程组成的包来执行。这个包被称为线程的翘曲。战群通常以同步模式运行–战群内的线程必须相互等待。GPU上的所有内存操作都是为战队而优化的。例如从全局内存加载的粒度为32*4字节正好是32个浮点在一个战线上的每个线程正好有一个浮点。我们可以在一个流式多处理器SM中拥有多达32个经线=1024个线程相当于一个CPU核心的GPU。一个SM的资源被分配给所有活动的经线。这意味着有时我们希望运行较少的经线以便每个经线有更多的寄存器/共享内存/张量核心资源。

对于下面的两个例子我们假设我们有相同的计算资源。对于这个32×32矩阵乘法的小例子我们使用了8个SM大约是RTX 3090的10%和每个SM的8个翘板。

为了了解周期延迟如何与每个SM的线程和每个SM的共享内存等资源一起发挥作用我们现在看一下矩阵乘法的例子。虽然下面的例子大致上遵循了有张量核心和无张量核心的矩阵乘法的计算步骤顺序但请注意这些是非常简化的例子。矩阵乘法的真实案例涉及到更大的共享内存瓦片和略有不同的计算模式。

没有张量核心的矩阵乘法

如果我们想做一个AB=C的矩阵乘法其中每个矩阵的大小为32×32那么我们想把重复访问的内存加载到共享内存中因为其延迟大约低五倍200个周期与34个周期。共享内存中的一个内存块通常被称为内存块或只是一个内存块。将两个32×32的浮点加载到一个共享内存瓦片中可以通过使用232的翘板来并行进行。我们有8个SM每个有8个warps所以由于并行化我们只需要从全局到共享内存做一次顺序加载这需要200个周期。

为了做矩阵乘法我们现在需要从共享内存A和共享内存B中加载一个32个数字的向量并进行融合乘法和累加FFMA。然后将输出存储在寄存器C中。我们进行分工使每个SM做8x点乘32×32来计算C的8个输出。为什么正好是8在旧的算法中是4是非常有技术含量的。我推荐Scott Gray关于矩阵乘法的博文来理解这个。这意味着我们有8次共享内存访问每次花费34个周期还有8次FFMA操作32次并行每次花费4个周期。总的来说我们的成本是

200个周期全局内存+834个周期共享内存+84个周期FFMA=504个周期

让我们来看看使用张量核心的周期成本。

使用张量核心的矩阵乘法

通过张量核心我们可以在一个周期内进行4×4矩阵乘法。要做到这一点我们首先需要将内存进入张量核心。与上面类似我们需要从全局内存中读取200个周期并存储在共享内存中。为了做一个32×32的矩阵乘法我们需要做8×8=64个Tensor Cores操作。一个SM有8个Tensor Cores。因此有了8个SM我们就有了64个张量核心–正是我们需要的数量我们可以通过1次内存传输34个周期将数据从共享内存传输到张量核心然后进行这64次并行的张量核心操作1个周期。这意味着在这种情况下Tensor Cores矩阵乘法的总成本是:

200个周期全局内存+34个周期共享内存+1个周期Tensor Core=235个周期。

因此我们通过张量核心将矩阵乘法成本从504个周期大幅降低到235个周期。在这个简化案例中张量核心降低了共享内存访问和FFMA操作的成本。

这个例子是简化的例如通常每个线程都需要计算从全局内存向共享内存传输数据时要读和写哪个内存。通过新的HooperH100架构我们另外让张量内存加速器TMA在硬件中计算这些指数从而帮助每个线程专注于更多计算而不是计算指数。

带有张量核心和异步拷贝的矩阵乘法RTX 30/RTX 40和TMAH100

RTX 30 Ampere和RTX 40 Ada系列GPU还支持在全局和共享内存之间进行异步传输。H100 Hopper GPU通过引入张量内存加速器TMA单元进一步扩展了这一功能。TMA单元将异步拷贝和索引计算同时用于读写–因此每个线程不再需要计算哪个是下一个要读取的元素每个线程可以专注于做更多矩阵乘法计算。这看起来如下。

TMA单元将内存从全局获取到共享内存200个周期。一旦数据到达TMA单元从全局内存异步获取下一个数据块。在此过程中线程从共享内存加载数据并通过张量核心执行矩阵乘法。一旦线程完成他们就会等待TMA单元完成下一个数据传输然后这个序列就会重复。

因此由于异步性当线程处理当前的共享内存瓦片时TMA单元的第二次全局内存读取已经在进行了。这意味着第二次读取只需要200-34-1=165个周期。

由于我们做了很多读取只有第一次内存访问会很慢所有其他的内存访问都会与TMA单元部分重叠。因此平均而言我们减少了35个周期的时间.

165个周期等待异步复制完成+34个周期共享内存+1个周期Tensor Core=200个周期。

这使矩阵乘法的速度又加快了15%。

从这些例子中可以看出为什么下一个属性即内存带宽对于配备张量核心的GPU是如此关键。由于全局内存是迄今为止使用张量核心进行矩阵乘法的最大周期成本如果能够减少全局内存的延迟我们甚至可以获得更快的GPU。我们可以通过提高内存的时钟频率每秒更多的周期但也有更多的热量和更高的能源需求或增加在任何时候可以传输的元素数量总线宽度来做到这一点。

内存带宽

从上一节中我们已经看到张量核心的速度非常快。事实上速度如此之快以至于它们大部分时间都是闲置的因为它们在等待内存从全局内存到达。例如在GPT-3大小的训练中使用巨大的矩阵–对张量核心来说越大越好–我们的张量核心TFLOPS利用率约为45-65%这意味着即使是大型神经网络也有50%的时间张量核心是空闲的。

这意味着当比较两个带有Tensor Cores的GPU时每个GPU性能的最佳指标之一是其内存带宽。例如A100 GPU的内存带宽为1,555 GB/s而V100为900 GB/s。因此A100对V100的基本估计速度是1555/900=1.73倍。

二级缓存/共享内存/一级缓存/寄存器

由于向张量核心的内存传输是性能的限制因素我们正在寻找能够更快地向张量核心传输内存的其他GPU属性。二级缓存、共享内存、一级缓存和使用的寄存器数量都是相关的。为了理解内存层次结构如何实现更快的内存传输有助于理解在GPU上如何进行矩阵乘法。

为了执行矩阵乘法我们利用了GPU的内存层次结构从缓慢的全局内存到较快的二级内存到快速的本地共享内存再到闪电般的寄存器。然而内存越快它就越小。

虽然从逻辑上讲L2和L1内存是一样的但L2缓存更大因此需要穿越的平均物理距离更大以检索一个缓存行。你可以把L1和L2缓存看作是有组织的仓库在那里你想检索一个物品。你知道物品在哪里但是对于较大的仓库来说去那里平均需要更长的时间。这就是L1和L2缓存的本质区别。大=慢小=快。

对于矩阵乘法我们可以利用这种分层分离成越来越小从而越来越快的内存块来进行非常快的矩阵乘法。为此我们需要将大的矩阵乘法分成小的子矩阵乘法。这些块被称为内存瓦片或者通常只是瓦片。

我们在本地共享内存中执行矩阵乘法该内存速度快且接近于流式多处理器SM–相当于CPU核心。有了张量核心我们更进一步。我们把每个瓦片并把这些瓦片的一部分加载到Tensor Cores中由寄存器直接寻址。二级缓存中的矩阵内存瓦片比全球GPU内存GPU RAM快3-5倍共享内存比全球GPU内存快7-10倍而张量核心的寄存器比全球GPU内存快200倍。

拥有更大的瓦片意味着我们可以重复使用更多的内存。我在TPU与GPU的博文中详细介绍了这一点。事实上你可以看到TPU对每个Tensor Core都有非常、非常、大的磁贴。因此TPU在每次从全局内存传输时可以重用更多的内存这使得它们在矩阵乘法方面比GPU更有效率一些。

每个瓦片的大小由我们每个流式多处理器SM有多少内存和我们在所有SM上有多少二级缓存决定。我们在以下架构上有以下共享内存大小。

  • Volta (Titan V)。128kb共享内存/6MB L2
  • 图灵RTX 20s系列: 96kb共享内存/5.5 MB L2
  • 安培RTX 30s系列: 128kb共享内存/6MB L2
  • 阿达RTX 40s系列: 128 kb共享内存/72 MB L2

我们看到Ada有一个大得多的二级缓存允许更大的瓦片尺寸这减少了全局内存访问。例如对于训练期间的大型BERT任何矩阵乘法的输入和权重矩阵都能整齐地放入Ada的二级缓存中而不是其他我们。因此数据只需要从全局内存加载一次然后通过二级缓存提供数据使矩阵乘法的速度在Ada的这个架构上快了1.5-2.0倍。对于较大的模型在训练过程中速度较低但存在某些甜蜜点可能会使某些模型快得多。推理如果批处理量大于8也可以从较大的二级缓存中获得巨大的好处。

估算Ada/Hopper深度学习性能

本节是为那些想了解我如何得出安培GPU的性能估计的更多技术细节的人准备的。如果你不关心这些技术方面的问题可以安全地跳过本节。

实用Ada/Hopper速度估算

假设我们有一个GPU架构如Hopper、Ada、Ampere、Turing或Volta的GPU估算。将这些结果推断到同一架构/系列的其他GPU上很容易。幸运的是英伟达已经在广泛的计算机视觉和自然语言理解任务中对A100与V100与H100进行了基准测试。不幸的是NVIDIA确保这些数字不具有直接可比性因为它尽可能使用不同的批处理规模和GPU数量以有利于H100 GPU的结果。因此从某种意义上说这些基准数字部分是诚实的部分是营销数字。一般来说你可以说使用更大的批次是公平的因为H100/A100 GPU有更多的内存。不过为了比较GPU架构我们应该用相同的批次大小来评估无偏见的内存性能。

为了得到一个无偏见的估计我们可以通过两种方式来扩展数据中心GPU的结果1考虑批次大小的差异2考虑使用1个与8个GPU的差异。我们很幸运可以在NVIDIA提供的数据中找到这样一个对这两种偏差的估计。

将批处理规模翻倍以图像/秒CNN计算的吞吐量增加了13.6%。我在我的RTX Titan上对变换器的相同问题进行了基准测试并发现令人惊讶的是结果非常相同13.5% - 看来这是一个稳健的估计。

随着我们在越来越多的GPU上进行网络并行化我们会因为一些网络开销而失去性能。A100 8x GPU系统比V100 8x GPU系统NVLink 2.0拥有更好的网络NVLink 3.0–这是另一个混杂因素。直接看NVIDIA的数据我们可以发现对于CNN来说8x A100的系统比8x V100的系统开销低5%。这意味着如果从1x A100到8x A100可以使你的速度提高例如7.00倍那么从1x V100到8x V100只能使你的速度提高6.67倍。 对于变压器这个数字是7%。

利用这些数字我们可以从英伟达提供的直接数据中估算出一些特定深度学习架构的速度提升。与Tesla V100相比Tesla A100的速度提升如下。

  • SE-ResNeXt101: 1.43x
  • 掩码-R-CNN:1.47x
  • 变换器12层机器翻译WMT14 en-de。1.70x

因此这些数字比计算机视觉的理论估计值要低一些。这可能是由于较小的张量维度需要准备矩阵乘法的操作的开销如img2col或快速傅里叶变换FFT或不能使GPU饱和的操作最终层通常相对较小。它也可能是特定架构分组卷积的神器。

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

估算中可能存在的偏差

上面的估计是针对H100、A100和V100 GPU。过去英伟达在 "游戏 "RTX GPU中偷偷地进行了未宣布的性能退化1减少了Tensor Core的利用率2游戏风扇的冷却3禁用点对点GPU传输。也许有可能在RTX 40系列中存在未宣布的性能下降与完整的霍普H100相比。

截至目前其中一个退化是针对安培GPU发现的。张量核心性能被降低因此RTX 30系列GPU在深度学习方面不如Quadro卡。这也是为RTX 20系列所做的所以这不是什么新鲜事但这次也是为Titan等效卡RTX 3090所做的。RTX Titan没有启用性能降级。

目前不知道Ada GPU的降级情况但我在这篇文章中更新了这方面的消息并让我在twitter上的粉丝们知道。"

RTX40和RTX30系列的优势和问题

与英伟达图灵RTX 20系列相比新的英伟达安培RTX 30系列具有更多优势如稀疏网络训练和推理。其他功能如新的数据类型应更多地被看作是一种易于使用的功能因为它们提供了与图灵相同的性能提升但无需任何额外的编程。

Ada RTX 40系列甚至有更多的进步如8位浮点FP8张量核心。与RTX 30相比RTX 40系列也有类似的功率和温度问题。RTX 40中的电源连接器电缆融化的问题可以通过正确连接电源电缆而轻松避免。

稀疏网络训练

安培允许以密集的速度进行细粒度结构的自动稀疏矩阵乘法。这是如何做到的以一个权重矩阵为例将其切成4个元素的碎片。现在想象这4个元素中的2个元素为零。图1显示了这种情况的样子

请添加图片描述
图1Ampere GPU中的稀疏矩阵乘法功能所支持的结构。该图摘自Jeff Pool在GTC 2020上的演讲内容是在NVIDIA Ampere架构中加速稀疏性由NVIDIA提供

当你将这个稀疏的权重矩阵与一些密集的输入相乘时安培的稀疏矩阵张量核心功能会自动将稀疏矩阵压缩成密集表示其大小为原来的一半如图2所见。在压缩之后密集压缩的矩阵瓦片被送入张量核心张量核心计算的矩阵乘法是通常大小的两倍。这有效地产生了2倍的速度因为在共享内存的矩阵乘法过程中带宽要求减半。

请添加图片描述
图2在进行矩阵乘法之前稀疏矩阵被压缩为密集表示。该图摘自Jeff Pool在GTC 2020上发表的关于加速NVIDIA Ampere架构的稀疏性的演讲由NVIDIA提供

我在研究中致力于稀疏网络训练我还写了一篇关于稀疏训练的博文。对我的工作的一个批评是“你减少了网络所需的FLOPS但并没有产生速度的提升因为GPU不能进行快速的稀疏矩阵乘法”。好吧随着Tensor Cores的稀疏矩阵乘法功能的增加我的算法或其他稀疏训练算法现在实际上在训练期间提供了高达2倍的速度。请添加图片描述

图3我开发的稀疏训练算法有三个阶段1确定每层的重要性。(2) 删除最小的、不重要的权重。(3) 根据每层的重要性增长新的权重。在我的稀疏训练博文中阅读更多关于我的工作

虽然这一功能仍在实验阶段而且训练稀疏网络还不普遍但在你的GPU上拥有这一功能意味着你已经为稀疏训练的未来做好了准备。

低精度计算

在我的工作中我曾经表明新的数据类型可以提高低精度反向传播期间的稳定性。
请添加图片描述
图4我开发的低精度深度学习8位数据类型。深度学习训练得益于高度专业化的数据类型。我的动态树数据类型使用了一个动态位表示一个二进制二分树的开始该树量化了范围[0, 0.9]而之前的所有位都用于指数。这样就可以动态地表示既大又小的高精度的数字

目前如果你想用16位浮点数FP16进行稳定的反向传播最大的问题是普通FP16数据类型只支持[-65,504, 65,504]范围内的数字。如果你的梯度滑过这个范围你的梯度就会爆炸成NaN值。为了防止在FP16训练中出现这种情况我们通常会进行损失缩放即在反向传播之前将损失乘以一个小数字以防止这种梯度爆炸。

BrainFloat 16格式BF16为指数使用了更多的比特因此可能的数字范围与FP32相同[-3*10383*1038]。BF16的精度较低也就是有效数字但梯度精度对学习来说并不那么重要。所以BF16的作用是你不再需要做任何损失缩放也不需要担心梯度会迅速爆炸。因此我们应该看到通过使用BF16格式训练的稳定性会增加因为精度略有损失。

这对你意味着什么。使用BF16精度训练可能比使用FP16精度更稳定同时提供同样的速度提升。使用32位TensorFloatTF32精度你可以得到接近FP32的稳定性同时给予接近FP16的加速。好的是要使用这些数据类型你只需用TF32取代FP32用BF16取代FP16–不需要修改代码

不过总的来说这些新的数据类型可以被看作是懒惰的数据类型因为你可以通过一些额外的编程努力适当的损失缩放、初始化、规范化、使用Apex来获得旧数据类型的所有好处。因此这些数据类型并没有提供速度而是改善了训练中低精度的使用便利性。

风扇设计和GPU温度问题

虽然RTX 30系列的新风扇设计在冷却GPU方面表现非常好但非创始版GPU的不同风扇设计可能会有更多问题。如果你的GPU发热超过80C它就会自我节流降低其计算速度/功率。如果你将多个GPU堆放在一起这种过热现象尤其可能发生。解决这个问题的方法是使用PCIe扩展器在GPU之间创造空间。

用PCIe扩展器分散GPU对散热非常有效华盛顿大学的其他博士生和我都使用这种设置并取得了巨大的成功。它看起来并不漂亮但它能使你的GPU保持凉爽!这已经运行了4年完全没有问题。如果你没有足够的空间在PCIe插槽中安装所有的GPU它也可以帮助你。例如如果你能在台式电脑机箱内找到空间也许可以购买标准的3槽宽度的RTX 4090并在机箱内用PCIe扩展器分散它们。这样一来你可能会用一个简单的解决方案来解决4x RTX 4090设置的空间问题和冷却问题。

请添加图片描述
图5带有PCIe扩展器的4倍GPU。它看起来很乱但对冷却非常有效。我使用这个装备4年了尽管RTX 2080 Ti Founders Edition GPU有问题但冷却效果很好

3槽设计和电源问题

RTX 3090和RTX 4090是3插槽的GPU因此在NVIDIA默认的风扇设计下人们无法将其用于4x设置。这是有道理的因为它的TDP超过350W在多GPU的2插槽设置中很难冷却。RTX 3080的TDP为320W仅略胜一筹而冷却4x RTX 3080设置也将非常困难。

在4x RTX 3090或4x RTX 4090机箱中为4x 350W=1400W或4x 450W=1800W系统供电也很困难。1600W的电源装置PSU是现成的但只有200W为CPU和主板供电可能太紧张。组件的最大功率只有在组件被完全利用的情况下才会被使用而在深度学习中CPU通常只处于弱负载状态。在这种情况下1600W的PSU可能对4x RTX 3080的构建效果相当好但对于4x RTX 3090的构建最好寻找高瓦数的PSU+1700W。我的一些追随者在使用加密电源方面取得了巨大的成功–请在评论区看看关于这方面的更多信息。否则需要注意的是并非所有的插座都支持1600W以上的PSU尤其是在美国。这就是为什么在美国目前市场上很少有1600W以上的标准台式PSU。如果你买的是服务器或加密的PSU要注意外形尺寸–确保它适合你的电脑机箱。

功率限制 解决功率问题的优雅解决方案

在你的GPU上设置一个功率限制是可能的。因此你将能够以编程方式将RTX 3090的功率限制设置为300W而不是其标准的350W。在4个GPU系统中这相当于节省了200W这可能刚好足够用1600W PSU建立一个4x RTX 3090系统的可行性。它还有助于保持GPU的冷却。因此设置功率限制可以同时解决4x RTX 3080或4x RTX 3090设置的两个主要问题冷却和电源。对于4倍的设置你仍然需要有效的鼓风机GPU标准设计可能被证明足以满足这个要求但这解决了PSU的问题。

请添加图片描述
图6降低功率限制有轻微的冷却效果。将RTX 2080 Ti的功率限制降低50-60W温度略有下降风扇运行更加安静。

你可能会问"这不会降低GPU的速度吗"是的确实如此但问题是降低了多少。我对图5所示的4x RTX 2080 Ti系统在不同功率限制下进行了基准测试以测试这一点。我对推理过程中BERT Large的500个小批次的时间进行了基准测试不包括softmax层。我选择BERT Large推理因为根据我的经验这是深度学习模型对GPU的压力最大。因此我希望电源限制对这个模型有最大规模的减慢。因此这里报告的减慢可能接近你可以预期的最大减慢。结果显示在图7中。
请添加图片描述
图7在RTX 2080 Ti上在给定的功率限制下测得的速度下降。测量结果是推理过程中500个迷你批次的BERT Large的平均处理时间不包括softmax层。

我们可以看到设置功率限制并不严重影响性能。将功率限制在50W–足以处理4x RTX 3090–仅使性能下降7%。

RTX 4090s和融化的电源连接器。如何防止问题的发生

有一种误解认为RTX 4090电源线融化是因为它们被弯曲了。然而发现只有0.1%的用户有这个问题问题的发生是由于用户的错误。这里有一段视频显示主要问题是电缆没有正确插入

因此如果你遵循以下安装说明使用RTX 4090卡是完全安全的。

  • 如果你使用旧的电缆或旧的GPU请确保触点没有碎屑/灰尘。
  • 使用电源连接器并将其插入插座直到你听到 "咔嚓 "一声–这是最重要的部分。
  • 通过从左到右扭动电源线来测试是否合适。电缆不应该移动。
  • 目测一下与插座的接触情况电缆和插座之间应该没有间隙。

H100和RTX 40系列GPU中的8位浮点支持

支持8位浮点FP8是RTX 40系列和H100 GPU的一个巨大优势。有了8位输入你就可以以两倍的速度加载矩阵乘法的数据你可以在缓存中存储两倍的矩阵元素而在Ada和Hopper架构中缓存是非常大的现在有了FP8张量核心你可以为RTX 4090获得0.66 PFLOPS的计算量–这比2007年世界上最快超级计算机的全部FLOPS还要多。4倍RTX 4090的FP8计算量可以与2010年世界上最快的超级计算机相媲美深度学习在2009年才开始工作。

使用8位精度的主要问题是变压器在这么少的位子上会变得非常不稳定在训练过程中崩溃或者在推理过程中产生非理性。我写了一篇关于大型语言模型中不稳定性的出现的论文我还写了一篇更容易理解的博文。

主要的收获是这样的。使用8位而不是16位会使事情变得非常不稳定但如果你保持几个维度的高精度一切都会很好。

请添加图片描述
我在大型语言模型LLM的8位矩阵乘法工作中的主要结果。我们可以看到最好的8位基线未能提供良好的零点性能。我开发的方法LLM.int8()可以进行Int8矩阵乘法结果与16位基线相同。

但是Int8已经被RTX 30 / A100 / Ampere这一代GPU所支持为什么FP8在RTX 40中又是一个大升级呢FP8数据类型比Int8数据类型要稳定得多而且很容易在层规范或非线性函数中使用它这在Integer数据类型中是很难做到的。这将使它在训练和推理中的使用变得非常简单明了。我认为这将使FP8的训练和推理在几个月后变得相对普遍。

如果你想阅读更多关于Float与Integer数据类型的优势你可以阅读我最近关于k-bit推理缩放法的论文。下面你可以看到这篇论文中关于Float vs Integer数据类型的一个相关主要结果。我们可以看到逐个比特FP4数据类型比Int4数据类型保留了更多的信息从而提高了4个任务的平均LLM零点准确性。

请添加图片描述

不同数据类型的Pythia大型语言模型的4位推理缩放规律。我们看到与Int4数据类型相比逐位的4位浮点数数据类型具有更好的零点准确性

GPU的原始性能排名

下面我们看到一张所有GPU的原始相关性能的图表。我们看到H100 GPU的8位性能与为16位性能优化的旧卡有巨大的差距。请添加图片描述
显示的是GPU的原始相对变换器性能。例如RTX 4090的8位推理性能是H100 SMX的0.33倍左右。换句话说与RTX 4090相比H100 SMX的8位推理速度是3倍。

对于这些数据我没有为旧的GPU建立8位计算模型。我这样做是因为8位推理和训练在Ada/Hopper GPU上更有效因为8位Float数据类型和Tensor Memory AcceleratorTMA节省了计算读/写索引的开销这对8位矩阵乘法特别有帮助。Ada/Hopper也有FP8支持这使得特别是8位的训练更加有效。

我没有为8位训练建立模型因为要建立模型我需要知道Hopper/Ada GPU上L1和L2缓存的延迟而它们是未知的我没有机会接触到这种GPU。在Hopper/Ada上如果缓存的速度像传言的那样快8位训练性能很可能是16位训练性能的3-4倍。

但即使是新的FP8张量核心也有一些额外的问题在对GPU性能建模时很难考虑到。例如FP8张量核心不支持转置的矩阵乘法这意味着反向传播需要在乘法之前进行单独的转置或者需要在内存中保存两套权重–一套转置的一套非转置的。我在LLM.int8()项目中试验Int8训练时使用了两套权重这使整体速度大大降低。我认为用正确的算法/软件可以做得更好但这表明缺少张量核心的转置矩阵乘法等功能会影响性能。

对于旧的GPU来说Int8推理性能接近于13B参数以下模型的16位推理性能。只有当你有175B参数或更多的相对较大的模型时旧GPU上的Int8性能才有意义。如果你对老式GPU的8位性能感兴趣你可以阅读我的LLM.int8()论文的附录D在那里我对Int8性能进行了基准测试。

每美元的GPU深度学习性能

下面我们看到按8位推理性能排序的所有GPU的每美元性能图表。如何使用该图表来寻找适合自己的GPU方法如下:

  • 确定你需要的GPU内存量粗略的启发式方法至少12GB用于图像生成至少24GB用于变换器的工作
  • 虽然8位推理和训练是实验性的但它将在6个月内成为标准。在这期间你可能需要做一些额外的困难的编码来使用8位的工作。这对你来说可以吗如果不行就选择16位的性能。
  • 使用2中确定的指标找到具有最高相对性能/美元的GPU并具有你需要的内存量。"

我们可以看到RTX 4070 Ti在8位和16位推理中的性价比最高而RTX 3080在16位训练中的性价比仍然最高。虽然这些GPU最具成本效益但不一定推荐使用因为它们没有足够的内存用于许多使用情况。然而这可能是开始深度学习之旅的理想卡。其中一些GPU对于Kaggle竞赛来说是非常好的在那里人们经常可以依靠较小的模型。由于要在Kaggle比赛中取得好成绩你的工作方法比模型大小更重要所以这些较小的GPU对Kaggle比赛是非常好的。

用于学术和初创公司服务器的最佳GPU似乎是A6000 Ada GPU不要与A6000 Turing混淆。H100 SXM GPU也非常具有成本效益具有高内存和非常强的性能。如果我将为公司/学术实验室建立一个小型集群我会使用66-80%的A6000 GPU和20-33%的H100 SXM GPU。如果我在L40 GPU上得到一个好的交易我也会选择它们而不是A6000所以你可以随时询问这些的报价。请添加图片描述

显示的是每美元GPU的相对性能根据台式电脑的成本和每个GPU在亚马逊和eBay的平均价格进行归一化。此外以每千瓦时0.175美元的电价和15%的GPU利用率计算增加了5年的电力成本。RTX 4090的电费约为每年100美元。如何阅读和解释该图表一台拥有RTX 4070 Ti卡5年的台式电脑与RTX 3090 GPU相比每美元产生的8位推理性能高出约2倍。

GPU建议

我创建了一个推荐流程图你可以在下面看到点击这里查看肖楠的互动应用程序。虽然这个图表在80%的情况下会帮助你但它可能不完全适合你因为选择可能太贵。在这种情况下试着看一下上面的基准并选择性价比最高的GPU它仍然有足够的GPU内存满足你的使用情况。你可以通过在 vast.ai或Lambda云中运行你的问题一段时间来估计所需的GPU内存这样你就知道你需要什么。如果你只是非常零星地需要一个GPU每隔几天几个小时而且不需要下载和处理大型数据集就可以开始工作那么 vast.ai或Lambda云可能也很好。然而如果你连续几个月使用你的GPU并且每天都有很高的使用率每天12小时云GPU通常不是一个好的选择。你可以使用下面 "什么时候使用云计算与专用GPU桌面/服务器更好"一节中的例子来确定云GPU是否适合你。

请添加图片描述
Ada/Hopper GPU的推荐表。按照是/否问题的答案找到最适合你的GPU。虽然这个图表在大约80%的情况下都很有效但你最终可能会得到一个太贵的GPU。使用上面的成本/性能图表来进行选择。[互动应用]

等待未来的GPU进行升级是否更好GPU的未来。

为了了解跳过这一代而购买下一代GPU是否有意义谈一谈未来的改进会是什么样子。

在过去可以通过缩小晶体管的尺寸来提高处理器的速度。现在这种情况即将结束。例如虽然缩小SRAM可以提高其速度距离更小内存访问速度更快但现在情况不再如此。目前对SRAM的改进并没有再提高其性能甚至可能是负面的。虽然张量核心等逻辑变得更小但这并不一定能使GPU更快因为矩阵乘法的主要问题是将内存送到张量核心这是由SRAM和GPU RAM的速度和大小决定的。如果我们将内存模块堆叠成高带宽模块HBM3+GPU RAM的速度仍然会提高但对于消费者应用来说这些模块的制造成本太高。提高GPU原始速度的主要方法是使用更多的功率和更多的冷却正如我们在RTX 30s和40s系列中看到的那样。但这种情况不能再持续下去了。

诸如AMD CPU使用的芯片是另一种直接的前进方式。AMD通过开发CPU芯片击败了英特尔。芯片是用高速片上网络融合在一起的小芯片。你可以把它们看作是两个物理上非常接近的GPU你几乎可以把它们看作是一个单一的大GPU。它们的制造成本较低但要结合成一个大的芯片却比较困难。因此你需要专有技术和小芯片之间的快速连接。AMD在小芯片设计方面有很多经验。AMD的下一代GPU将采用芯片组设计而NVIDIA目前没有公开的此类设计计划。这可能意味着与英伟达的GPU相比下一代AMD的GPU在成本/性能方面可能更好。

然而目前GPU的主要性能提升是专门的逻辑。例如安培一代RTX 30 / A100 / RTX 40上的异步复制硬件单元或扩展即张量内存加速器TMA都通过专门的硬件减少了将内存从慢速全局内存复制到快速共享内存缓存的开销因此每个线程可以做更多的计算。TMA还通过执行读/写索引的自动计算来减少开销这对于8位计算尤其重要因为与16位计算相比在相同的内存量下人们有双倍的元素。所以专门的硬件逻辑可以进一步加速矩阵乘法。

低位精度是几年内的另一条直接的发展道路。在接下来的几个月里我们将看到8位推理和训练的广泛采用。我们将在明年看到4位推理的普及。目前4位的训练技术并不存在但研究看起来很有希望我预计在1-2年内将训练出第一个具有竞争性预测性能的高性能FP4大型语言模型LLM。

目前将训练精度提高到2位看起来是不可能的但这是一个比进一步缩小晶体管更容易的问题。因此硬件方面的进展主要取决于软件和算法这些软件和算法使使用硬件提供的专门功能成为可能。

我们可能仍将能够改进算法+硬件的组合直到2032年但在那之后将遇到GPU改进的终点类似于智能手机。2032年之后的性能改进浪潮将来自更好的网络算法和大规模硬件。目前还不能确定消费级GPU是否会与此相关。可能是你需要RTX 9090来运行Super HyperStableDiffusion Ultra Plus 9000 Extra或OpenChatGPT 5.0但也可能是一些公司将提供高质量的API比RTX 9090的电费更便宜你想用笔记本+API来生成图像和其他任务。

总的来说我认为在未来9年内投资于8位能力的GPU将是一项非常坚实的投资。4位和2位的改进可能很小而像排序核心这样的其他功能只有在稀疏矩阵乘法能够得到很好的利用时才会变得相关。我们可能会在2-3年内看到一些其他的进步这些进步将进入4年后的下一个GPU但如果我们继续依赖矩阵乘法我们将耗尽精力。这使得对新GPU的投资可以持续更长时间。

问题和答案以及误解

我需要PCIe 4.0或PCIe 5.0吗

一般来说不需要。如果你有一个GPU集群PCIe 5.0或4.0是很好的。如果你有一个8倍的GPU机器它是可以的但除此之外它并没有产生很多好处。它允许更好的并行化和更快一点的数据传输。数据传输在任何应用中都不是一个瓶颈。在计算机视觉中在数据传输管道中数据存储可能是一个瓶颈但不是从CPU到GPU的PCIe传输。因此对于大多数人来说没有真正的理由获得一个PCIe 5.0或4.0设置。在4个GPU的设置中其好处可能是并行化程度提高了1-7%。

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

与PCIe 4.0相同 - 一般来说不需要。PCIe通道需要用于并行化和快速数据传输这很少是一个瓶颈。在4倍通道上操作GPU是没有问题的特别是如果你只有2个GPU。对于4个GPU的设置我希望每个GPU有8倍的通道但如果你在所有4个GPU上进行并行化在4倍通道上运行它们可能只会降低大约5-10%的性能。

如果4个RTX 4090或3090各占3个PCIe插槽我如何安装

你需要买一个双槽的变种或者你可以尝试用PCIe扩展器来分散它们。除了空间你还应该立即考虑冷却和一个合适的PSU。

PCIe扩展器也可能同时解决空间和冷却问题但你需要确保你的机箱有足够的空间来分散GPU。确保你的PCIe扩展器足够长!

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

见上一节。

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

是的你可以!但是你不能在不同类型的GPU之间有效地进行并行化因为你往往会以最慢的GPU的速度进行数据和完全分片并行。因此不同的GPU可以正常工作但跨这些GPU的并行化将是低效的因为最快的GPU将等待最慢的GPU赶上一个同步点通常是梯度更新。

什么是NVLink它有用吗

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

我没有足够的钱即使是你推荐的最便宜的GPU。我可以做什么?

一定要买二手GPU。你可以买一个小的便宜的GPU用于原型设计和测试然后推出全面的实验如 vast.ai 或 Lambda Cloud。如果你只是偶尔对大型模型进行训练/微调/推理而把更多的时间花在小型模型的原型设计上这可能会很便宜。

GPU的碳足迹是什么我怎样才能在不污染环境的情况下使用GPU

我建立了一个碳计算器用于计算你在学术上的碳足迹从航班到会议的碳+GPU时间。该计算器也可用于计算纯GPU的碳足迹。你会发现GPU产生的碳比国际航班多得多。因此如果你不想有一个天文数字的碳足迹你应该确保你有一个绿色的能源来源。如果我们地区没有电力供应商提供绿色能源最好的办法是购买碳抵消。许多人对碳抵消持怀疑态度。它们有用吗它们是骗局吗

我相信在这种情况下怀疑只是一种伤害因为不做任何事情会比冒着被骗的概率更有害。如果你担心受骗只需投资于一个抵消组合以尽量减少风险。

大约十年前我在一个生产碳抵消的项目上工作。这些碳抵消是通过燃烧中国矿场泄漏的甲烷产生的。联合国官员跟踪了这个过程他们要求对项目现场进行干净的数字数据和实物检查。在这种情况下所产生的碳抵消是高度可靠的。我相信许多其他项目也有类似的质量标准。

我需要在两台机器上进行并行处理需要什么

如果你想安全起见你应该得到至少+50Gbits/s的网卡以获得加速如果你想跨机器并行化。我建议至少要有一个EDR Infiniband设置这意味着网卡至少有50GBit/s的带宽。两张EDR网卡和电缆在eBay上大约是500美元。

在某些情况下你也许可以用10Gbit/s的以太网但这通常只适用于特殊的网络某些卷积网络或如果你使用某些算法微软DeepSpeed。

稀疏矩阵乘法功能是否适用于一般的稀疏矩阵

似乎不是这样。因为稀疏矩阵的粒度需要有2个零值元素每4个元素稀疏矩阵需要相当的结构化。也许可以稍微调整一下算法这涉及到你把4个值汇集成2个值的压缩表示但这也意味着精确的任意稀疏矩阵乘法在安培GPU上是不可能的。

我需要一个英特尔CPU来驱动多GPU设置吗

我不推荐英特尔CPU除非你在Kaggle比赛中大量使用CPU在CPU上进行大量线性代数。即使是Kaggle比赛AMD的CPU也很不错。一般来说AMD的CPU比英特尔的CPU更便宜更适合深度学习。对于4倍的GPU构建我的首选CPU将是Threadripper。我们在大学里用Threadrippers构建了几十个系统它们都很好用–还没有任何抱怨。对于8倍GPU系统我通常会选择你的供应商有经验的CPU。在8x系统中CPU和PCIe/系统的可靠性比直接的性能或直接的成本效益更重要。

电脑机箱的设计对散热有影响吗

不如果GPU之间至少有一个小的间隙GPU通常可以完美地冷却。机箱设计将使你的温度提高1-3℃GPU之间的空间将为你提供10-30℃的改善。底线是如果你在GPU之间有空间冷却并不重要。如果你的GPU之间没有空间你需要正确的冷却器设计鼓风机或其他解决方案水冷、PCIe扩展器但在任何情况下机箱设计和机箱风扇都不重要。

AMD GPU + ROCm能否追上NVIDIA GPU + CUDA

在未来1-2年内不会。这是一个三方面的问题张量核心、软件和社区。

AMD的GPU在纯硅方面是很好的。伟大的FP16性能伟大的内存带宽。然而与英伟达GPU相比他们缺乏Tensor Cores或类似的东西使得他们的深度学习性能很差。打包的低精度数学并不能解决问题。没有这个硬件功能AMD的GPU将永远没有竞争力。传言显示一些具有Tensor Core等效的数据中心卡计划在2020年推出但此后没有新的数据出现。仅仅拥有相当于Tensor Core的数据中心卡也意味着很少有人能买得起这样的AMD GPU这将使英伟达获得竞争优势。

假设AMD在未来推出了类似于Tensor-Core的硬件功能。然后很多人会说"但是没有适用于AMD GPU的软件我怎么能使用它们我应该如何使用它们呢"这多半是一种误解。通过ROCm的AMD软件已经走过了很长的路通过PyTorch的支持也很好。虽然我没有看到很多关于AMD GPU + PyTorch的经验报告但所有的软件功能都是集成的。看来如果你选择任何网络在AMD GPU上运行都会很好。因此在这里AMD已经走了很长一段路这个问题或多或少得到了解决。

然而如果你解决了软件和缺乏张量核心的问题AMD仍有一个问题缺乏社区。如果你有NVIDIA GPU的问题你可以在谷歌上搜索这个问题并找到解决方案。这为NVIDIA GPU建立了很多信任。你拥有使英伟达GPU的使用变得简单的基础设施任何深度学习框架都可以使用任何科学问题都得到很好的支持。你有使NVIDIA GPU的使用变得轻而易举的黑客和技巧例如顶点。你可以在每个角落找到NVIDIA GPU和编程方面的专家而我对AMD GPU专家的了解要少得多。

在社区方面AMD有点像Julia与Python。Julia有很大的潜力很多人会说而且是正确的它是科学计算的高级编程语言。然而与Python相比Julia几乎不被使用。这是因为Python社区是非常强大的。Numpy、SciPy、Pandas是强大的软件包大量的人聚集在一起。这与NVIDIA与AMD的问题非常相似。

因此在Tensor Core同等产品推出之前1/2到1年AMD很可能不会赶上而且围绕ROCm建立了强大的社区2年在特定的子群体中如加密货币开采、数据中心AMD总是会抢夺一部分市场份额。尽管如此在深度学习方面英伟达很可能至少再保持几年的垄断地位。

什么时候使用云与专用GPU桌面/服务器更好

经验法则如果你预计做深度学习的时间超过一年那么买一个桌面GPU会更便宜。否则除非你有丰富的云计算技能并希望获得随意增加和减少GPU数量的好处否则云实例是最好的。

以下段落中的数字会发生变化但它可以作为一个场景帮助你了解大致的成本。你可以使用类似的数学方法来确定云计算GPU是否是最适合你的解决方案。

对于云计算GPU比台式机更贵的确切时间点在很大程度上取决于你所使用的服务最好是自己做一下这方面的数学计算。下面我做了一个AWS V100现货实例的计算例子其中有1个V100并将其与带有单个RTX 3090的台式机性能相似的价格进行比较。带有RTX 3090的台式机价格为2200美元2-GPU裸机+RTX 3090。此外假设你在美国每千瓦时要额外支付0.12美元的电费。相比之下AWS的按需实例每小时2.14美元。

在每年15%的利用率下台式机使用。

(350 W (GPU) + 100 W (CPU))*0.15 (利用率) 24小时365天=591千瓦时/年\n\n所以每年591千瓦时的电就是额外的71美元。

在15%的利用率下台式机与云实例的收支平衡点你在白天使用云实例15%的时间将是大约300天2311美元对2270美元。

2.14美元/小时*0.15利用率24小时300天=2311美元\n\n因此如果你期望在300天后运行深度学习模型最好购买一台台式机而不是使用AWS的按需实例。

你可以对任何云服务进行类似的计算以决定你是选择云服务还是桌面。

常见的利用率有以下几种:

  • 博士生的个人桌面: < 15%
  • 博士生slurm GPU集群: > 35%
  • 全公司的slurm研究集群: > 60%

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

版本历史

  • 2023-01-30:改进了字体和推荐图。增加了5年拥有成本的电力perf/USD图表。更新了异步复制和TMA功能。稍微更新了FP8培训。一般改进。
  • 2023-01-16:添加了Hopper和Ada GPU。添加了GPU推荐图。添加了关于TMA单元和二级缓存的信息。
  • 2020-09-20:添加了关于使用功率限制来运行4x RTX 3090系统的讨论。在性能和成本/性能图表中增加了较早的GPU。添加了稀疏矩阵乘法的数字。
  • 2020-09-07: 添加了NVIDIA Ampere系列GPU。包括了很多好知道的GPU细节。
  • 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不再推荐GTX580增加了卡之间的性能关系
  • 2015-03-16:更新了GPU推荐。GTX 970 和 GTX 580
  • 2015-02-23:更新了GPU推荐和内存计算
  • 2014-09-28:增加了对CNN的内存要求的强调

鸣谢

我感谢Suhail让我意识到H100 GPU的价格已经过时感谢Gjorgji Kjosev指出字体问题感谢Anonymous指出TMA单元在Ada GPU上不存在感谢Scott Gray指出FP8张量核心没有转置矩阵乘法感谢reddit和HackerNews用户指出的许多其他改进。

对于这篇博文过去的更新我要感谢Mat Kelcey帮助我调试和测试GTX 970的自定义代码我要感谢Sander Dieleman让我意识到我对卷积网的GPU内存建议的缺点我要感谢Hannes Bretschneider指出GTX 580的软件依赖问题我要感谢Oliver Griesel指出AWS实例的笔记本解决方案。我要感谢Brad Nemire为我提供了一台RTX Titan用于基准测试。我要感谢Agrin Hilmkil、Ari Holtzman、Gabriel Ilharco、Nam Pho对本博文上一版本的出色反馈。"

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6