深度学习对于算力的要求很高,对于个人来说,GPU 的选择很大程度上决定了你的工作、学习体验。显卡既贵又复杂,如果想购买新的 GPU,哪些功能最重要?内存、核心、Tensor Core 还是缓存?如何做出性价比高的选择?每出一代新 GPU 这些问题就要重新审视一番。
近日,华盛顿大学在读博士 Tim Dettmers 通过一篇长文在 RTX 40 时代的背景下深入探讨了这些问题,此文一出就获得了陈天奇等人的转推。
本文将解决常见的误解,让你直观地了解如何看待 GPU 并提供建议,帮你做出适合自己的选择。
这篇博文的结构如下:首先,我将解释是什么让 GPU 变快的,我将讨论 CPU 与 GPU、Tensor Core、内存带宽和 GPU 的内存层次结构,以及它们与深度学习性能的关系。我们将讨论新的 NVIDIA RTX 40 Ampere GPU 系列的独特功能。随后我们将针对不同的场景提出 GPU 推荐。
与深度学习相关性最高的 GPU 规格
本节按每个组件的重要性排序。Tensor Core 是最重要的,其次是 GPU 的内存带宽、缓存层次结构,然后才是 GPU 的纯算力 FLOPS。
Tensor Core
Tensor Core(张量核心)是执行非常高效的矩阵乘法的微核心。由于任何深度神经网络中最耗费算力的部分就是矩阵乘法,所以张量核心非常有用。它们非常强大,想搞深度学习,不推荐任何没有 Tensor Core 的 GPU。
这里展示一个简单的 A×B=C 矩阵乘法示例,其中所有矩阵的大小均为 32×32,计算模式在使用和不使用 Tensor Cores 时的样子。这是一个简化的示例,并不是编写高性能矩阵乘法内核的确切方式,但它具有所有基础知识。CUDA 程序员会把它作为第一个「草稿」,然后用双倍缓冲、寄存器优化、占用优化、指令级并行等概念逐步优化它,这里不会一一讨论。
要完全理解此示例,你必须了解循环的概念。如果处理器以 1GHz 运行,它每秒可以执行 10^9 个周期。每个循环代表一个计算机会。但大多数时候,操作需要的时间超过一个周期。笼统地说这里有一个队列,下一个操作需要等待上一个操作完成。这也称为操作的延迟。
以下是一些重要的操作延迟周期时间。这些时间数字每代 GPU 都不一样,这里的适用于缓存相对较慢的 Ampere GPU:
全局内存访问(多至 80GB):~380 个周期
L2 缓存:~200 个周期
L1 缓存或共享内存访问(每个流式多处理器最多 128 kb):~34 个周期
融合乘法和加法,ab+c (FFMA):4 个周期张量核心矩阵乘法:1 个周期
每个操作总是由一组 32 个线程执行,它的集合被称为线程 warp。warp 通常以同步模式运行 ——warp 中的线程必须相互等待。GPU 上的所有内存操作都针对 warp 进行了优化。例如,从全局内存加载以 32×4 字节的粒度发生,正好是 32 个浮点数,一个 warp 中的每个线程正好对应一个浮点数。我们最多可以在一个流式多处理器 (SM) 中拥有 32 个 warps = 1024 个线程,相当于一个 CPU 核心的 GPU。SM 的资源在所有活跃的 warp 之间分配。这意味着有时我们希望运行更少的 warp,以便每个 warp 拥有更多的寄存器 / 共享内存 / Tensor Core 资源。
对于以下两个示例,我们假设拥有相同的计算资源。对于这个 32×32 矩阵乘法的小例子,我们使用 8 个 SM(大约是 RTX 3090 的 10%)和每个 SM 8 个 warp。
要了解循环延迟如何与每个 SM 的线程和每个 SM 的共享内存等资源一起发挥作用,我们现在来看一下矩阵乘法的示例。虽然以下示例大致遵循了使用和不使用 Tensor Core 的矩阵乘法的计算步骤序列,但请注意,这些示例非常简化。矩阵乘法的真实案例涉及更大的共享内存块和略有不同的计算模式。
没有张量核的矩阵乘法
如果我们想要进行 A×B=C 矩阵乘法,其中每个矩阵的大小为 32×32,那么就要将重复访问的内存加载到共享内存中,因为它的延迟大约低五倍(200 周期对 34 周期)。共享内存中的内存块通常称为内存块或简称为块。使用 232 warp 可以并行地将两个 32×32 的浮点数加载到共享内存块中。我们有 8 个 SM,每个 8 warp,因此由于并行化,我们只需要执行一次从全局到共享内存的顺序加载,这需要 200 个周期。
要进行矩阵乘法,我们现在要从共享内存 A 和共享内存 B 加载一个包含 32 个数字的向量,并执行融合乘加 (FFMA)。然后将输出存储在寄存器 C 中。我们划分工作,使每个 SM 进行 8 次点积 (32×32) 来计算 C 的 8 个输出。为什么这恰好是 8(在旧算法中为 4)是非常技术性的。
这里推荐 Scott Gray 关于矩阵乘法的博文 (https://github.com/NervanaSystems/maxas/wiki/SGEMM) 来理解这一点。
这意味着我们有 8 次共享内存访问,每次访问花费 34 个周期和 8 个 FFMA 操作(并行 32 个),每个操作花费 4 个周期。总的来说成本是:200 个周期(全局内存)+ 834 个周期(共享内存)+ 84 个周期(FFMA)= 504 个周期。
让我们看看使用 Tensor Cores 的周期成本。
用 Tensor Core 进行矩阵乘法
使用 Tensor Core,我们可以在一个周期内执行 4×4 矩阵乘法。为此我们首先需要将内存放入 Tensor Core。与上面类似,我们需要从全局内存(200 个周期)中读取并存储在共享内存中。要进行 32×32 矩阵乘法,我们需要进行 8×8=64 个 Tensor Core 运算。单个 SM 有 8 个 Tensor Core。因此,有了 8 个 SM 我们就有了 64 个 Tensor Core—— 这正是我们需要的数量!我们可以通过 1 次内存传输(34 个周期)将数据从共享内存传输到 Tensor Core,然后执行这 64 个并行 Tensor Core 操作(1 个周期)。
这意味着 Tensor Cores 矩阵乘法的总成本,在这种情况下是:200 个周期(全局内存)+ 34 个周期(共享内存)+ 1 个周期(Tensor Core)= 235 个周期。
因此,我们通过 Tensor Core 将矩阵乘法成本从 504 个周期减少到了 235 个周期。在这个简化的案例中,Tensor Cores 降低了共享内存访问和 FFMA 操作的成本。借助新的 Hooper (H100) 和 Ada(RTX 40 系)架构,我们还拥有可以进一步加速此操作的张量内存加速器 (TMA) 单元。
用 Tensor Core 和 TMA 进行矩阵乘法
TMA 单元允许将全局内存加载到共享内存中,而无需用完宝贵的线程资源。因此当 TMA 执行异步传输时,线程可以专注于共享内存和 Tensor Core 之间的工作,就像这样
TMA 从全局内存获取内存到共享内存(200 个周期)。数据到达后,TMA 就会从全局内存中异步获取下一个数据块。这样,线程从共享内存加载数据并通过张量核心执行矩阵乘法。线程完成后,它们等待 TMA 完成下一个数据传输,然后重复该序列。
由于异步性质,TMA 读取的第二个全局内存已经在线程处理当前共享内存块时进行。这意味着第二次读取仅需 200 – 34 – 1 = 165 个周期。
由于我们进行了多次读取,只有第一个内存访问会很慢,所有其他内存访问将与 TMA 部分重叠。因此平均而言,我们将时间减少了 35 个周期。
165 个周期(等待 TMA 完成)+ 34 个周期(共享内存)+ 1 个周期(Tensor Core)= 200 个周期。这又将矩阵乘法加速了 15%。
从这些示例中可以清楚地看出为什么下一个属性内存带宽对于配备 Tensor-Core 的 GPU 如此重要。由于全局内存是迄今为止使用 Tensor Core 进行矩阵乘法的最大周期成本,如果可以减少全局内存延迟,我们甚至可以拥有更快的 GPU。我们可以通过增加内存的时钟频率(每秒更多的周期,但也有更多的热量和更高的供电需求)或增加可以在任何时间传输的元素数量(总线宽度)来做到这一点。
内存带宽
我们已经知道 Tensor Core 是非常快的,事实上,它们大部分时间都处于空闲状态,因为它们正在等待内存从全局内存到达。例如,在使用巨大矩阵的 GPT-3 训练期间(模型越大,对 Tensor Core 越友好)我们的 Tensor Core TFLOPS 利用率约为 45-65%,这意味着即使对于大型神经网络也有大约 50% 时间处于闲置状态。
所以当比较两个有 Tensor Core 的 GPU 时,GPU 性能的最重要指标之一是它们的内存带宽。例如 A100 GPU 的内存带宽为 1,555 GB/s,而 V100 为 900 GB/s。因此,A100 与 V100 的加速比基本估计为 1555/900 = 1.73 倍。
L2 缓存 / 共享内存 / L1 缓存 / 寄存器
由于内存传输到 Tensor Core 是性能的限制因素,我们应当寻求更快的内存传输到 Tensor Cores 的方式。二级缓存、共享内存、一级缓存和使用的寄存器数量与该速度都是相关的。
为了执行矩阵乘法,我们利用了 GPU 的内存层次结构,从慢速全局内存到更快的 L2 内存,再到快速本地共享内存,再到快如闪电的寄存器。但是,内存越快,它就越小。
虽然从逻辑上讲,L2 和 L1 内存相同,但 L2 缓存更大,因此检索缓存行需要遍历的平均物理距离更大。你可以将 L1 和 L2 缓存视为有组织的仓库,可以在其中检索项目。你知道物品在哪里,但是对于较大的仓库来说,去那里平均需要更长的时间。这就是 L1 和 L2 缓存的本质区别:大 = 慢,小 = 快。
对于矩阵乘法,我们可以使用这种层次把结构分割开,用更快的内存块来执行快速的矩阵乘法。为此,我们需要将大矩阵乘法分块为更小的子矩阵乘法。这些块称为内存块,或通常简称为块(tile)。
我们在快速且接近流式多处理器 (SM,相当于 CPU 内核)的本地共享内存中对这些较小的块执行矩阵乘法。对于 Tensor Cores 则更进一步:我们获取每个块并将这些块的一部分加载到 Tensor Core 中,这些 Tensor Core 由寄存器直接寻址。L2 缓存中的矩阵内存块比全局 GPU 内存(GPU RAM)快 3-5 倍,共享内存比全局 GPU 内存快约 7-10 倍,而 Tensor Cores 的寄存器比全局 GPU 内存快约 200 倍。
拥有更大的块意味着我们可以重用更多的内存。事实上,你可以看到 TPU 的每个 Tensor Core 都有非常非常大的块。因此,TPU 可以在每次从全局内存传输时重用更多的内存,这使得它们在矩阵乘法方面比 GPU 更高效。
每个块大小取决于每个流式多处理器 (SM) 有多少内存,以及所有 SM 有多少二级缓存。我们在以下架构上有以下共享内存大小:
Volta (Titan V):128kb 共享内存 / 6 MB L2
Turing(RTX 20 系):96 kb 共享内存 / 5.5 MB L2
Ampere(RTX 30 系):128 kb 共享内存 / 6 MB L2
Ada(RTX 40 系):128 kb 共享内存 / 72 MB L2
显然 Ada 有很大的 L2 缓存,允许更大的块体量,这减少了全局内存访问。例如在 BERT large 在训练期间,任何矩阵乘法的输入和权重矩阵都可以很好地适合 Ada 的 L2 缓存,更早期的英伟达 GPU 则不然。因此,数据只需从全局内存加载一次,然后可通过 L2 缓存使用,使 Ada 的这种架构的矩阵乘法速度提高约 1.5-2.0 倍。对于较大的模型,训练期间的加速比较低,但存在某些最佳点可能会使某些模型更快。推理时,batch size 大于 8 也可以从更大的 L2 缓存中获益匪浅。
Ada / Hopper 架构的深度学习性能
英伟达已经在广泛的计算机视觉和自然语言理解任务中对 A100、V100 和 H100 进行了基准测试。不幸的是,英伟达的测试通过尽可能使用不同的 batch size 和 GPU 数量来确保这些数字不能直接比较,以支持 H100 更好的结果。因此从某种意义上说,基准数字部分是诚实的,部分是营销数字。你可能会争辩说使用更大的 batch size 是公平的,因为 H100/A100 有更多内存。尽管如此,为了比较 GPU 架构,我们应该评估具有相同 batch size 的无偏内存性能。
为获得无偏估计,我们可以通过两种方式扩展数据中心 GPU 结果:(1) 考虑 batch size 的差异,(2) 考虑使用 1 块 GPU 与 8 块 GPU 的差异。幸运的是,我们可以在英伟达提供的数据中找到对这两种偏差的估计。
将 batch size 加倍可将 CNN 网络的图像 / 秒吞吐量提高 13.6%。在我的 RTX Titan 上对 transformer 的相同问题进行了基准测试,结果令人惊讶地发现了完全相同的结果:13.5%—— 这似乎是一个可靠的估计。
随着我们在越来越多的 GPU 上并行化网络,我们会因为一些网络开销而损失性能。A100 8x GPU 系统具有比 V100 8x GPU 系统(NVLink 2.0)更好的网络(NVLink 3.0)—— 这是另一个第三方因素。直接看英伟达的数据我们可以发现,对于 CNN,8x A100 的系统比 8x V100 的系统开销低 5%。这意味着如果从 1x A100 提升到 8x A100 进行加速,比如得到了 7.00x,那么从 1x V100 到 8x V100 只能给你 6.67x 的加速。对于 transformer,这个数字是 7%。
使用这些数字,我们可以从英伟达提供的直接数据中估计一些特定深度学习架构的加速。与 Tesla V100 相比,A100 提供以下加速:
SE-ResNeXt101:1.43x
Masked-R-CNN:1.47x
Transformer(12 层,机器翻译,WMT14 en-de):1.70x
这些数字略低于计算机视觉的理论估计值。这可能是由于较小的张量维度、准备矩阵乘法所需的操作(如 img2col 或快速傅里叶变换,FFT)的开销,或者无法使 GPU 饱和的操作(最终层通常相对较小)。它也可能是特定架构(分组卷积)的产物。
实际 transformer 估计值非常接近理论估计值。这可能是因为巨大矩阵的算法非常简单。我将使用这些实际估算来计算 GPU 的成本效率。
需要注意的是,以上估算值适用于 H100、A100 和 V100 GPU。英伟达曾在「游戏用」的 RTX GPU 中偷偷降低了未宣布的性能:(1) 降低 Tensor Core 利用率,(2) 用于冷却的风扇,(3) 禁用点对点 GPU 传输。与完整的 Hopper H100 相比,RTX 40 系列可能存在未明确的性能下降。
RTX 40 系列的优劣
与英伟达 Turing RTX 20 系列相比,新的 Ampere RTX 30 系列具有额外的优势,例如稀疏网络训练和推理能力。其他功能,如新数据类型,应该更多地被视为一种易于使用的功能,因为它们提供与 Turing 相同的性能提升,但不需要任何额外的编程。
Ada RTX 40 系列还有更进一步的改进,例如上面介绍的张量内存加速器 (TMA) 和 8 位浮点数 (FP8)。与 RTX 30 相比,40 系也存在类似的功率和温度问题。通过正确连接电源线,可以避免 RTX 40 中电源连接器电缆熔化的问题。
稀疏网络训练
Ampere 允许以密集的速度进行细粒度结构自动稀疏矩阵乘法。这是如何运作的?取一个权重矩阵并将其分成 4 个元素的片段。现在想象这 4 个中的 2 个元素为零。如下图所示:
图 1:Ampere GPU 中稀疏矩阵乘法功能支持的结构。
当你将此稀疏权重矩阵与一些密集输入相乘时,Ampere 中的稀疏矩阵张量核心功能会自动将稀疏矩阵压缩为大小一半的密集表示,如下图所示。压缩后密集压缩矩阵块被送入张量核心,该核心计算两倍于通常大小的矩阵乘法。这有效地产生了 2 倍加速,因为从共享内存进行矩阵乘法期间的带宽要求减半。
图 2:稀疏矩阵在执行矩阵乘法之前被压缩为密集表示。
低精度计算
在我的工作中,我之前已经证明新数据类型可以提高低精度在反向传播过程中的稳定性 (https://arxiv.org/abs/1511.04561)。
图 4:低精度深度学习 8 位数据类型。深度学习训练受益于高度专业化的数据类型。
但使用 BF16 精度,训练可能比使用 FP16 精度更稳定,同时提供相同的加速。使用 TF32 精度,你可以获得接近 FP32 的稳定性,同时提供接近 FP16 的加速。另外要使用这些数据类型,只需要将 FP32 替换为 TF32,将 FP16 替换为 BF16—— 无需更改代码!
风扇设计的问题
虽然目前 GPU 的设计充分考虑了散热,但如果将多个 GPU 彼此相邻堆叠,过热情况仍可能发生。一个解决方案是使用 PCIe 扩展器在 GPU 之间创造空间。
图 5:带有 PCIe 扩展器的 4 块 GPU。
电源设计和插槽问题
RTX 3090 和 RTX 4090 是 3 插槽 GPU,因此无法在采用英伟达默认风扇设计的 4x 设置中使用它。这自然有其道理,因为它以超过 350W TDP 运行,并且在多 GPU 双插槽设置中很难冷却。RTX 3080 仅在 320W TDP 时稍好一些,冷却 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,尤其是在美国。如果你买到服务器级 PSU,请注意外形尺寸 —— 确保它适合你的机箱。
你也可以在 GPU 上设置功率限制,以编程方式将 RTX 3090 的功率限制设置为 300W,而不是其标准的 350W。在 4x GPU 系统中,这节省了 200W,这可能足以构建具有 1600W PSU 的 4x RTX 3090 系统。它还有助于使 GPU 保持低温。因此,设置功率限制可以同时解决 4x RTX 3080 或 4x RTX 3090 设置、冷却和功率的两个主要问题。对于 4x 配置,仍然需要有效的大风扇 GPU(标准设计可能足以满足此要求),但这至少解决了供电问题。
图 6:降低功率限制具有轻微的冷却效果。
你肯定会问,「这不会降低 GPU 的速度吗?」是的,但问题在于降低了多少。我在不同的功率限制下对图 5 所示的 4x RTX 2080 Ti 系统进行了基准测试。在推理期间对 BERT Large 的 500 个小 batch 的时间进行了基准测试(不包括 softmax 层)。我选择 BERT Large inference,因为根据我的经验,这是对 GPU 压力最大的深度学习模型。因此,我预计功率限制对该模型的影响最大。因此,此处报告的减速可能接近你可以预期的最大减速。结果如下图所示:
图 7:在 RTX 2080 Ti 上给定功率限制下测得的减速。所采取的测量是推理期间 500 个 BERT Large mini-batches 的平均处理时间(不包括 softmax 层)。
可见,设置功率限制不会严重影响性能。将功率限制为降 50W 足以带动 4x RTX 3090,性能仅降低 7%。
H100 和 RTX 40 中的 8 位浮点数支持
支持 8 位浮点数 (FP8) 是 RTX 40 系列和 H100 GPU 的巨大优势。使用 8 位输入,它可以让你以两倍的速度加载矩阵乘法的数据,在缓存中存储两倍的矩阵元素,现在使用 FP8 张量核心,你可以用一块 RTX 4090 获得 0.66 PFLOPS 的算力,这比 2007 年世界上最快的超级计算机的 FLOPS 还要多。
使用 8 位精度的主要问题是:transformer 在训练过程中使用如此少的位会变得非常不稳定和易崩溃,或者在推理过程中产生无意义的结果。
但 RTX 30 / A100 / Ampere 一代 GPU 已经支持 Int8,为什么 RTX 40 中的 FP8 又是一次大升级?FP8 数据类型比 Int8 数据类型稳定得多,并且很容易在层范数或非线性函数等函数中使用它,而这些函数很难用整数(Integer)数据类型来实现。这将使在训练和推理中使用它变得非常简单,我认为 FP8 训练和推理会在几个月内变得逐渐流行起来。
针对不同数据类型的 Pythia 大语言模型的 4-bit 推理扩展比例。可以看到与 Int4 数据类型相比,逐位的 4 位浮点数据类型具有更好的 zeroshot 精度。
GPU 纯性能排名
下图是所有 GPU 的原始相关性能图表。我们看到 H100 GPU 的 8 位性能与针对 16 位性能优化的旧卡相比存在巨大优势。
这里展示的是 GPU 的原始相对性能。例如,对于 8 位推理,RTX 4090 的性能大约是 H100 SMX 的 0.33 倍。换句话说,与 RTX 4090 相比,H100 SMX 的 8 位推理速度快三倍。
对于此数据,我没有为旧 GPU 建模 8 位计算速度,这样做的原因是 8 位推理和训练在 Ada/Hopper GPU 上更有效,因为张量内存加速器 (TMA) 节省了大量寄存器,这些寄存器在 8 位矩阵乘法中非常精确。Ada/Hopper 也有 FP8 支持,这使得特别是 8 位训练更加有效。我没有为 8 位训练建模数字,因为这需要知道 Hopper/Ada GPU 上 L1 和 L2 缓存的延迟,它们是未知的,我无法访问此类 GPU。
在 Hopper/Ada 上,8 位训练性能很可能是 16 位训练性能的 3-4 倍,如果缓存像传闻的那样快的话。对于旧 GPU,它们的 Int8 推理性能接近 16 位推理性能。
深度学习 GPU 性价比
下面是按 8 位推理性能排序的所有 GPU 性价比图表。选择适合的 GPU 时需要:
可以看到,RTX 4070 Ti 对于 8 位和 16 位推理的成本效益最高,而 RTX 3080 对于 16 位训练的成本效益仍然最高。虽然这些 GPU 性价比看来挺高,但不一定推荐使用它们,因为它们没有足够的内存用于许多用例,但它可能是你开始深度学习之旅的理想 GPU。其中一些 GPU 非常适合 Kaggle 竞赛。在数据竞赛中,人们通常可以依赖较小的模型,想要取得好成绩,工作方法比模型大小更重要。
用于学术和启动服务器的最佳 GPU 似乎是 A6000 Ada GPU(注意不要与 A6000 Turing 混淆)。H100 SXM 的性价比也很高,内存大,性能非常强。如果我要为公司 / 学术实验室构建一个小型集群,我会使用 66-80% 的 A6000 GPU 和 20-33% 的 H100 SXM GPU。如果我在买 L40 GPU 时能获得折扣价,我也会选择它们而不是 A6000,因此请关注这些 GPU 的报价。
这里显示的是每美元 GPU 的相对性能,按台式计算机的成本和每块 GPU 的亚马逊和 eBay 平均价格归一化。例如,与 RTX 3090 GPU 相比,配备 RTX 4070 Ti 卡的台式计算机每美元产生的 8 位推理性能高出约 2 倍。
GPU 推荐
我创建了一个推荐流程图。这个图表在 80% 的情况下可以帮助到你,但也可能也不完全使用,因为有些选项太过昂贵了。如果是这样,你可以试着看一下上面的基准,并选择性价比最高的 GPU,仍然能满足你的日常使用。
具体来说,你可以通过在 vast.ai 或 Lambda Cloud 中运行你的问题来估计所需的 GPU 内存。如果你只是需要一个不常用的 GPU(每隔几天用那么几个小时),而且不需要下载和处理大型数据集就可以开始工作,那么 vast.ai 或 Lambda 云可能也很好用。但如果你会连续几个月使用 GPU,并且每天都有很高的使用率(如每天 12 小时),云 GPU 通常不是一个好的选择。
Ada/Hopper GPU 的推荐表。按照是 / 否问题的答案,可以找到最适合你的 GPU。使用上面的成本 / 性能图表来进行选择吧。
我直接等 RTX 50 系?
为了理解跳过这一代而购买下一代 GPU 是否有意义,我们有必要谈一谈未来的 GPU 改进会是什么样子。
过去,通过缩小晶体管的尺寸可以提高处理器的速度,而这种状态即将终结。例如,虽然缩小 SRAM 曾经可以提高其速度,但目前对 SRAM 的改进并没有再提高其性能,甚至可能是「负面改进」。虽然张量核心等逻辑变得更小,但这并不一定能使 GPU 更快,因为矩阵乘法的主要问题是将内存送到张量核心,这是由 SRAM 和 GPU RAM 的速度和大小决定的。
如果我们将内存模块堆叠成高带宽模块(HBM3+),GPU RAM 的速度仍然会提高,但对于消费者应用来说,这些模块的制造成本太高。提高 GPU 原始速度的主要方法是使用更多的功率和更多的冷却,正如我们在 RTX 30 和 40 系列中看到的那样。但这种情况不能再持续下去了。
诸如 AMD CPU 所使用的芯片是另一种改进方式。AMD 通过开发 CPU 芯粒击败了英特尔。芯粒是指用高速片上网络融合在一起的小芯片,你可以把它们看作是两个物理层面非常接近的 GPU,也可以看作是一个单一的大 GPU。它们的制造成本较低,但要组合成一个大的芯片却比较困难。因此,你需要专有技术和芯粒之间的快速连接。
AMD 在芯粒设计方面有很多经验,其下一代 GPU 将采用芯片组设计,而英伟达目前没有公开的此类设计计划。这可能意味着,与英伟达的 GPU 相比,下一代的 AMD GPU 在成本或性能方面可能表现更好。
然而,目前 GPU 的主要性能提升属于专业逻辑。例如,张量存储器加速器(TMA)单元节省了宝贵的寄存器,这些寄存器现在被释放出来以进行更多的计算。这对 8 位计算尤为重要。
总体来说,低位精度是几年内的另一个直接的发展方向。在接下来的几个月里,我们将看到 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 来生成图像和其他任务。
最后,我认为买 8 位精度的 GPU 将是未来九年内一项非常可靠的投资。4 位和 2 位的改进可能很小,而像排序核心这样的其他功能只有在稀疏矩阵乘法能够得到很好利用时才会变得相关。我们可能会在 2-3 年内看到一些其他的进步,这些进步会在 4 年后的下一个 GPU 中出现,但是如果我们继续依赖矩阵乘法,我们就会耗尽精力。
参考内容:
https://timdettmers.com/2023/01/16/which-gpu-for-deep-learning/#RTX_4090s_and_Melting_Power_Connectors_How_to_Prevent_Problems