简介:本文从架构哲学、计算特征、内存体系、并行模型与硬件加速能力等维度,系统对比 CPU 与 GPU 的差异,解释深度学习为何天然适合 GPU 计算,并进一步延伸至 Tensor Core、CUDA 编程模型、显存管理、多卡互联等关键主题,帮助开发者理解 AI 计算平台的选型逻辑与使用边界。
要理解 GPU 在 AI 计算中的价值,最好的切入点是将它与 CPU 放在一起进行对比。这两种处理器虽然都属于通用计算芯片,但在设计目标、架构取舍和适用负载上存在根本性差异。
可以借助一个直观的类比来理解这种差异。假设需要批改一万份选择题试卷:CPU 的做法是请一位经验丰富的阅卷老师,他能够处理复杂题型、应对各种异常情况,但一次只能批改一份;GPU 的做法则是同时安排一万个临时工作人员,每个人只负责比对标准答案这一件简单任务,所有人并行工作,几乎可以在一轮内完成全部批改。
这个类比反映的是两种截然不同的设计哲学:CPU 是延迟导向的处理器,追求单个任务的快速完成;GPU 是吞吐导向的处理器,追求海量简单任务的整体完成速度。二者的胜负并不取决于谁更先进,而取决于任务本身是否能够被拆解为大量相互独立的子任务。
CPU 将大量芯片面积投入到控制逻辑和大容量缓存上。它需要处理复杂的分支预测、乱序执行、流水线冒险、中断响应等机制,以保证操作系统、数据库、网络协议栈这类串行逻辑密集的负载能够高效运行。为了降低单个线程的访问延迟,CPU 的多级缓存体系会占用相当大的芯片面积,但这也意味着真正用于算术运算的晶体管比例并不高。
GPU 则把绝大多数晶体管用于算术逻辑单元。它由数千个相对简单的计算核心组成,这些核心按照统一的控制单元调度,执行相同的指令流,但处理不同的数据。GPU 不需要复杂的乱序执行逻辑,也不依赖庞大的单核缓存来隐藏延迟,而是通过大量线程的快速切换来掩盖内存访问延迟。当某些线程等待数据时,其他线程可以立即切入执行,从而保持计算单元始终忙碌。
深度学习模型的计算核心,拆解到底层,可以归纳为两类基础操作:矩阵乘法和逐元素运算。
以全连接层为例,前向传播的核心就是计算:
Y = X @ W + b
其中 X 是输入矩阵,W 是权重矩阵,b 是偏置向量,@ 表示矩阵乘法。对于图像卷积网络,卷积运算本质上也可以展开为矩阵乘法;对于注意力机制,查询、键、值矩阵的计算同样是矩阵乘法。
矩阵乘法的特点是:大量的乘加运算之间没有数据依赖关系。例如计算矩阵 C = A @ B 时,C 中每个元素都是 A 的某一行与 B 的某一列的点积,各个点积之间完全独立,可以同时进行。这种高度规则化、数据并行度极高的运算模式,与 GPU 的架构高度匹配。
此外,激活函数如 ReLU、Sigmoid、GELU 等逐元素操作,同样可以并行地施加到张量中的每一个元素上,不涉及跨元素的数据交互,也适合 GPU 的并行执行模式。
因此,深度学习负载本质上是一个吞吐导向问题,而非延迟导向问题。它不要求单个矩阵乘法必须在极短时间内完成,而是要求在单位时间内完成尽可能多的矩阵乘法操作。这正是 GPU 的核心优势。
理解 GPU 的架构,需要从宏观到微观逐层拆解。现代 GPU 由多个层次组成,每一层都直接影响上层软件的执行方式和性能表现。
GPU 的基础执行单元通常被称为流式多处理器。每个流式多处理器内部包含多个计算核心、寄存器文件、共享内存和调度单元。不同架构的 GPU 在流式多处理器的数量、每个流式多处理器内部核心的数量以及缓存层次的设计上会有所不同,但整体思路保持一致。
在一个流式多处理器内部,线程被组织为更小的调度单位。同一调度单位内的所有线程同时执行同一条指令,但处理不同的数据。这种执行方式被称为单指令多线程。它意味着 GPU 的并行粒度比 CPU 的线程更细,但调度开销更低。
每个流式多处理器都配备有寄存器文件,用于存储每个线程的本地变量。寄存器的访问速度最快,但容量有限。当寄存器不够用时,数据会溢出到局部内存,导致性能下降。
共享内存是流式多处理器内部的一块高速缓存,可供同一线程块内的所有线程共同访问。它相当于软件控制的缓存,开发者可以将频繁复用或线程间需要交换的数据放入共享内存,以减少对全局内存的访问压力。
理解这一层级的存储结构,对于优化 GPU 内核性能至关重要。数据放置的位置不同,访问延迟可能相差数十倍甚至上百倍。
GPU 配备了独立的显存系统,其带宽远高于 CPU 的主存。高带宽是 GPU 能够高效执行大规模矩阵运算的基础。
GPU 的全局内存是容量最大的一级存储,所有线程都可以访问。现代 GPU 普遍采用高带宽内存技术,通过将内存芯片堆叠并与 GPU 核心封装在更近的距离上,可以获得数倍于传统内存的带宽。
例如,主流服务器 CPU 的内存带宽通常在每秒百 GB 量级,而高端 AI GPU 的显存带宽可以达到每秒数 TB 量级。这一差距直接决定了模型训练和推理过程中数据搬运的效率。
GPU 的缓存层次虽然不像 CPU 那样追求低延迟,但仍包含多级缓存。一级缓存通常与共享内存共享物理空间,二级缓存则服务于多个流式多处理器。缓存的主要作用不是消除延迟,而是在高带宽内存之前提供一层快速的数据复用以减轻带宽压力。
在深度学习训练中,权重的复用率极高。一次权重加载可以被大量输入数据重复使用,因此能否有效利用缓存和减少冗余的全局内存访问,对整体性能有显著影响。
现代 AI GPU 普遍集成了专门的矩阵运算硬件单元,称为 Tensor Core。这些单元专为混合精度矩阵乘法设计,能在单个时钟周期内完成多个浮点乘加运算。
Tensor Core 支持多种精度格式,包括单精度浮点、半精度浮点、张量浮点格式以及整数格式。低精度运算可以大幅提升吞吐量,同时减少显存占用,但会引入数值精度损失。因此,在训练大型模型时,通常采用混合精度策略:矩阵乘法使用低精度以加速计算,梯度累积和权重更新则使用更高精度以保持数值稳定性。
Tensor Core 的引入改变了深度学习框架的优化方式。现代框架在算子实现层面会自动将符合条件的矩阵乘法映射到 Tensor Core 路径上,以获得硬件加速。开发者通常不需要直接编写针对 Tensor Core 的底层指令,但需要了解输入数据的内存布局、对齐方式和批量大小等因素会影响 Tensor Core 是否能够被有效利用。
CUDA 是 GPU 编程的基础模型。虽然不同平台提出了各自的并行计算框架,但 CUDA 的核心理念已经成为 GPU 编程的事实参考模型。
CUDA 模型将线程组织为线程块,再将线程块组织为网格。每个线程块会分配到一个流式多处理器上执行,线程块内的若干线程则被划分为更小的调度单元。执行配置指的是开发者如何确定每个线程块中的线程数量和整个网格中的线程块数量。
合理的执行配置能够充分利用 GPU 的并行能力。如果线程块过小,则无法填满流式多处理器的调度槽位;如果线程块过大,则每个流式多处理器上能同时驻留的线程块数量会减少,降低线程切换掩盖延迟的能力。
CUDA 提供了从全局内存到共享内存再到寄存器的多级内存视图。开发者可以显式地将数据从全局内存加载到共享内存,在线程块内进行数据交换,再写回全局内存。线程块内的线程可以通过同步屏障保证数据一致性,而不同线程块之间则没有直接同步机制,必须通过全局内存和原子操作进行通信。
评估 GPU 性能不能只看单一指标。峰值算力、显存带宽、显存容量三类指标共同决定了一块 GPU 在 AI 负载中的实际表现。
| 指标 | 含义 | 对 AI 负载的影响 |
|---|---|---|
| 峰值算力 | 每秒可完成的浮点运算次数 | 决定理论最大计算速度 |
| 显存带宽 | 每秒可从显存读取的数据量 | 决定数据搬运的上限 |
| 显存容量 | GPU 可用的独立内存大小 | 限制模型参数、激活值和优化器状态的规模 |
| 互联带宽 | GPU 之间直接通信的速率 | 影响多卡训练效率 |
实际训练和推理中,模型规模、批量大小、序列长度等因素会决定瓶颈出现在算力、带宽还是容量上。对于大模型分布式训练,显存容量和互联带宽往往比单卡峰值算力更早成为限制。
在对比不同代的 AI GPU 时,应重点关注以下维度:
选型时,需要根据实际工作负载进行判断。如果主要做小型模型的训练和推理,中端 GPU 可能已经足够;如果涉及百亿参数以上模型的分布式训练,则需要优先考虑显存容量大、互联能力强的方案。
显存管理是 AI 基础设施中的核心挑战之一。模型参数、梯度、优化器状态、激活值和临时缓冲区都竞争有限的显存空间。
| 类别 | 说明 |
|---|---|
| 模型参数 | 所有层的权重和偏置 |
| 梯度 | 每个参数对应的梯度 |
| 优化器状态 | 如动量、方差等 |
| 激活值 | 前向传播中每层的输出,反向传播时需要复用 |
| 临时缓冲区 | 数据搬运、通信等产生的临时数据 |
对于大型模型,仅参数、梯度和优化器状态就可能占据数百 GB 显存。因此,工程上会采用梯度累积、激活重计算、参数分片、优化器状态分片等技术来降低显存峰值压力。
频繁的动态分配和释放会导致显存碎片,造成实际可用显存低于理论剩余值。现代深度学习框架通常会引入显存池机制,预先向 GPU 申请大块显存,再由框架内部的分配器进行二次分配,以减少碎片和分配开销。
当单卡无法容纳模型或数据规模时,就需要将计算扩展到多卡甚至多节点上。多卡互联的效率取决于通信带宽、通信延迟和计算通信重叠的程度。
常见的并行模式包括:
实际系统通常混合使用多种并行模式,以平衡计算负载与通信开销。
多卡互联的挑战在于通信时间不能有效隐藏。如果计算和通信串行执行,GPU 在通信期间处于空闲状态,造成算力浪费。高效的系统会尽量让梯度通信与下一轮的前向或反向计算重叠执行,从而降低通信对整体吞吐量的影响。
CPU 与 GPU 的差异源于两种不同的设计哲学:前者以低延迟为目标,擅长处理复杂串行逻辑;后者以高吞吐为目标,擅长处理大规模数据并行任务。深度学习计算的核心是海量矩阵乘法,这些运算具有高度的独立性和规则性,天然契合 GPU 的架构特点。
进一步深入看,AI GPU 的竞争力不仅取决于单卡峰值算力,还取决于显存容量、显存带宽、Tensor Core 的利用率、编程模型的友好程度以及多卡扩展能力。在 AI 基础设施建设和 GPU 选型过程中,应当从完整工作负载出发,综合评估算力、带宽、容量、互联和软件生态等多个维度,而不是孤立地比较单一指标。