原节目:https://www.youtube.com/watch?v=oIk3R-sMX5o&t=159s · 时间戳可点击,就地跳转播放器
在本期节目中,主持人采访了 AI 芯片公司 MatX 的首席执行官 Reiner Pope,从底层开始了解 AI 芯片的工作原理。从最基本的逻辑门开始,Pope 解释了如何构建乘加单元,这是 AI 计算的核心。然后,他将话题扩展到处理器核心的架构,强调了从寄存器文件移动数据的成本通常超过了计算本身的成本。本期节目探讨了脉动阵列(如 Nvidia 的 Tensor Cores)是如何通过创建更大、更专用的硬件单元来解决这个问题的。讨论还涵盖了时钟周期的作用、速度与面积之间的权衡、FPGA 与 ASIC 的工作原理,以及 CPU、GPU 和 TPU 之间的架构差异。主持人透露他是 MatX 的天使投资人 [00:00:13]。
AI 芯片中的基本操作是乘加(MAC),因为它是矩阵乘法嵌套循环中的基本步骤。
一个 MAC 单元在物理上由一个与门网格构成,用于生成部分积,然后由一个“全加器”树来对这些乘积求和。该电路的面积成本随相乘数字的位精度(p x q)呈二次方扩展。
电路面积随位宽的二次方扩展是低精度算术对 AI 如此有效的主要原因,因为将精度减半可以使性能翻倍以上。Nvidia 已经开始在其产品规格中反映这种超线性扩展。
在通用处理器核心(如旧的 CUDA 核心或 CPU)中,用于数据移动的电路——特别是从寄存器文件中选择数据的多路复用器(muxes)——比实际执行工作的算术逻辑单元(ALU)要大得多,成本也高得多。
脉动阵列(Nvidia 的 Tensor Cores 和 Google 的 TPU 背后的技术)通过为矩阵乘法创建一个大型专用硬件单元来解决数据移动瓶颈。这种设计通过在本地存储权重矩阵并为许多输入向量重复使用它,从而提高了计算与通信的比率。
芯片的时钟周期是一个全局同步事件。最高时钟速度由信号在任意两个寄存器之间的最长逻辑路径延迟决定。设计者可以通过插入“流水线寄存器”来缩短这些路径以提高速度,但这会增加面积成本和延迟。
芯片的时钟速度和其总吞吐量之间存在一个核心权衡。追求非常高的时钟速度需要添加许多流水线寄存器,这会消耗芯片面积,而这些面积本可以用于更多的并行计算单元,从而损害面积效率和总吞吐量。
FPGA 通过使用由可编程多路复用器网络连接的通用查找表(LUTs)和寄存器网格来提供可重构硬件。这种灵活性效率低下;实现一个简单的逻辑门需要一个复杂的 LUT 电路,这使得 FPGA 在面积和能耗上比执行相同功能的专用 ASIC 贵大约一个数量级。
CPU 具有非确定性延迟,这主要是因为硬件管理的缓存;访问内存的时间取决于数据是在快速缓存中还是在慢速主存中。像 TPU 这样的 AI 加速器通常通过使用软件管理的“暂存器”(scratchpad)内存来实现确定性延迟,这让程序员可以明确控制数据的位置。
GPU 和 TPU 具有不同的高层架构。GPU 由许多小的、复制的核心(SMs)网格组成,每个核心都是一个独立的单元。TPU 则由少数大型、粗粒度的单元组成(例如,大型矩阵单元、一个中央向量单元)。GPU 的设计更灵活,而 TPU 的设计通过更好地分摊控制逻辑成本,对于大型、结构化的计算可能更高效。
本期节目是一次从单个逻辑门一直到完整 AI 芯片架构的探索之旅,由 AI 芯片公司首席执行官 Reiner Pope 引导。其目标是理解这些复杂设备在物理层面实际上是如何工作的。
在 AI 中,尤其是在神经网络中,最基本的操作是矩阵乘法。如果你深入到矩阵乘法的代码中,你会发现一个简单的、重复的步骤:取两个数,将它们相乘,然后将结果加到一个累加的总数上。这被称为“乘加”(MAC),它是 AI 芯片的基本构建模块 [00:00:42]。
那么,如何构建一个电路来执行 MAC 操作呢?Pope 用 4 位数举了一个简单的例子。
1. 乘法: 就像小学里的长乘法一样,你会创建“部分积”。对于第一个数中的每一位和第二个数中的每一位,你将它们相乘。在电路中,这是通过一个简单的与门网格来完成的。一个与门只有在它的两个输入都为 1 时才输出 1,这正是一位乘法的工作方式 [00:05:31]。
2. 累加(加法): 现在你有一大堆部分积需要相加。这是通过一个稍微复杂一点的电路,称为“全加器”来完成的。它接收三个一位的输入,并将其和作为两位数输出(例如,1+1+0 = 2,在二进制中是 10)[00:06:30]。你使用这些全加器组成的一棵树,将这堆数字压缩成一个最终结果。
这里有一个关键的见解:这个乘法器电路的物理面积——即它所需要的门的数量——与你相乘的数字的位数呈二次方关系扩展 [00:11:30]。这并不直观。这意味着,如果你从 8 位数切换到 4 位数,你得到的不仅仅是两倍的性能;在相同的芯片空间下,你可能获得四倍的性能。这种二次方扩展是使用低精度数字成为 AI 硬件巨大胜利的最重要原因 [00:16:00]。
现在,让我们把这个 MAC 单元放到一个简单的处理器核心中,比如一个旧款 GPU 的“CUDA 核心”。MAC 单元需要从一个被称为“寄存器文件”的小型、快速的片上内存中获取其数字。在这里,我们遇到了传统计算的真正瓶颈:数据移动。仅仅是用来选择从寄存器文件中提取哪些数字的电路——一个叫做多路复用器(mux)的组件——通常比实际进行数学运算的 MAC 单元要大得多,成本也高得多 [00:21:14]。这就像拥有一个微小而高效的车间,却需要一个巨大而复杂的传送带系统来为其输送物料。
正是这个问题促使了现代 AI 加速器(如 Google 的 TPU 和 Nvidia 的 Tensor Cores)的发展。解决方案被称为“脉动阵列” [00:25:37]。你不是拥有一个小型、灵活的 MAC 单元,为每个微小的操作提供数据,而是构建一个大型、专用的 MAC 单元网格。这个网格被设计用来执行一个更大的操作,比如将整个矩阵与一个向量相乘。
关键的技巧在于,在 AI 工作负载中,模型的“权重”(其中一个矩阵)会为许多不同的输入重复使用。脉动阵列将这个大型权重矩阵存储在紧邻 MAC 单元本身的小型寄存器中 [00:29:55]。你只需缓慢地加载一次权重,然后就可以非常迅速地将许多不同的输入向量流过该阵列。这极大地改善了计算与通信的比率,因为最昂贵的数据(权重)几乎不需要移动。
所有这些复杂的活动都需要同步。这是芯片“时钟周期”的工作。它是一个全局性的心跳,告诉芯片的每个部分在完全相同的时间前进到下一个状态 [00:39:50]。这个时钟的最高速度受到信号在两个时钟节拍之间必须经过的最长、最慢的逻辑门链的限制。芯片设计者可以通过插入额外的寄存器来打断这些长路径(一种称为“流水线”的技术)来提高时钟速度,但这需要权衡。添加过多的流水线寄存器会占用宝贵的芯片面积,而这些面积本可以用于更多的计算单元,这可能会损害你的整体吞吐量(每秒完成的总工作量)[00:49:31]。
这就引出了定制芯片(ASIC)和可重构芯片(FPGA)之间的区别。 - 一个 ASIC(专用集成电路),像 GPU 或 TPU 一样,是为特定目的从头开始设计的。它极其高效,但初次设计和制造的成本高达数千万美元 [00:53:01]。 - 一个 FPGA(现场可编程门阵列)就像一块由通用逻辑块(称为查找表,或 LUTs)组成的白板,这些逻辑块通过一个可编程的电线和多路复用器网络连接起来 [00:53:54]。你可以在“现场”对其进行编程,使其表现得像任何定制电路一样。这种灵活性代价高昂:在面积和功耗方面,FPGA 的效率大约比执行相同工作的 ASIC 低 10 倍 [01:02:11]。它们对于像高频交易这样的应用很有用,这些应用需要高性能,但算法变化太频繁,以至于不值得设计新的 ASIC。
最后,本期节目比较了不同处理器的高层架构。 - CPU 具有非确定性延迟,意味着一个操作可能快也可能慢,你无法轻易预测。这主要是由于硬件管理的“缓存”——一种小型、快速的内存,它会自动存储常用数据。如果数据在缓存中,速度就快;如果不在,CPU 就必须从慢速的主存中获取 [01:04:33]。 - AI 加速器(如 TPU) 通常通过使用“暂存器”(scratchpad)内存来获得确定性的、可预测的性能。暂存器也是一种小型、快速的内存,但程序员需要负责明确地将数据移入和移出。这让你能够精确控制性能 [01:06:58]。 - 在架构上,一个 GPU 就像一个由许多小型、独立的核(称为 SM)组成的网格。这是一种平铺的、灵活的设计。相比之下,一个 TPU 是由少数几个非常大的、粗粒度的单元构成的,比如一个巨大的中央矩阵乘法器。GPU 的设计更具通用性,而 TPU 的设计对于主导现代 AI 的大规模、结构化计算可能更高效 [01:16:03]。
p x q(位宽的乘积)的规模扩展。这是一个基本概念,清楚地说明了为什么低精度算术对 AI 硬件如此有效。本页为对节目内容的忠实解读与大白话重述,由 PodLens 生成。