**Tensor Core(张量核心)**是 NVIDIA 自 Volta 架构(Tesla V100)以来引入 GPU 的专用硬件单元。它们被设计用来高效地执行大规模的矩阵乘法和累加运算,这是现代深度神经网络(DNN)训练和推理中最主要的计算任务。
1. Tensor Core 的定义与功能
1.1 核心功能:混合精度矩阵运算
Tensor Core 的核心功能是执行一个标准的四维张量操作,称为矩阵乘法累加(Matrix Multiply-and-Accumulate),其操作形式为:
D=A×B+CD = A \times B + CD=A×B+C
其中A,B,C,DA, B, C, DA,B,C,D都是矩阵(或张量)。Tensor Core 最显著的特点是支持混合精度计算(Mixed-Precision Computing):
输入:矩阵AAA和BBB通常是低精度格式,如FP16(半精度浮点数)或INT8(8位整数)。
乘法:执行A×BA \times BA×B乘法操作。
累加:结果CCC以更高精度(如FP32或FP64)累加到输出DDD中。
这种混合精度的方法在保持最终计算精度的同时,极大地提高了计算速度和内存效率。
1.2 关键架构特性
并行性:每个 Tensor Core 都包含一个固定的乘法累加单元阵列,可以同时处理多个元素。
尺寸:第一代 Tensor Core(Volta)执行的是4×4×44 \times 4 \times 44×4×4的矩阵运算,而后续架构(如 Ampere)已经扩展到更大的8×8×48 \times 8 \times 48×8×4或16×8×1616 \times 8 \times 1616×8×16运算。
数量:现代 GPU(如 H100)的每个 SM(流多处理器)内部包含大量的 Tensor Core,使得一个 GPU 芯片内拥有数千个 Tensor Core。
2. 为什么 Tensor Core 对 AI 如此重要?
Tensor Core 的设计完美匹配了深度学习的工作负载,是驱动现代 AI 发展的关键硬件加速器。
2.1 深度学习计算的本质
深度学习模型(无论是训练还是推理)的绝大部分计算时间都花费在两种核心操作上:
矩阵乘法 (GEMM, General Matrix Multiply):用于全连接层、注意力机制(Attention Mechanisms)等。
卷积 (Convolution):用于卷积神经网络(CNN)中。卷积运算可以通过 im2col 等技术,最终被转换为大规模的矩阵乘法。
这些操作具有天然的并行性,且其计算强度(计算量与内存访问量的比值)非常高。Tensor Core 正是为了以最高效率执行这些矩阵乘法而生。
2.2 性能的巨大提升
相比传统的 CUDA 核心(FP32/FP64 单元),Tensor Core 可以在相同的时间内完成多得多的计算量:
更高吞吐量:Tensor Core 在执行矩阵乘法时的 FLOPS(每秒浮点运算次数)远超 CUDA 核心。例如,在 FP16 精度下,GPU 的峰值性能几乎完全由 Tensor Core 决定。
数据效率:使用 FP16/BF16 等低精度格式可以减少模型对显存的需求和数据传输量,从而有效利用 GPU 的高带宽内存(HBM)。
| 精度格式 | 典型应用 | Tensor Core 优势 |
|---|---|---|
| FP32 | 传统科学计算,某些 AI 训练的稳定阶段。 | 确保精度,但在 Tensor Core 上速度低于低精度。 |
| FP16/BF16 | AI 训练(前向/反向传播),实现混合精度。 | 性能核心。显著提高吞吐量,减少内存占用和带宽需求。 |
| INT8 | AI 推理(部署)。 | 提供最高的推理性能,但需要量化操作。 |
2.3 启用混合精度训练(Mixed-Precision Training)
Tensor Core 极大地推动了混合精度训练的普及。通过使用 FP16 进行乘法运算(由 Tensor Core 执行)和 FP32 进行累加和梯度更新(保持稳定性),开发者可以获得接近 FP32 的精度,但训练速度提高数倍。
3. Tensor Core 的演进
NVIDIA 在不同代 GPU 架构中不断增强 Tensor Core 的功能和灵活性:
| 架构代次 | 典型 GPU | 引入的 Tensor Core 特性 | 核心突破 |
|---|---|---|---|
| Volta(V100) | Tesla V100 | 第一代,支持 FP16/FP32 混合精度。 | 首次将 Tensor Core 引入通用计算。 |
| Turing(T4) | GeForce RTX 20 系列 | 支持 INT8 和 INT4 精度。 | 增强了 AI 推理能力。 |
| Ampere(A100) | A100 | 第三代,新增 BF16 格式,支持 TensorFloat-32 (TF32)。 | TF32允许使用 FP32 代码获得接近 FP16 的速度,且无需修改代码。 |
| Hopper(H100) | H100 | 第四代,新增 FP8 精度,Transformer Engine。 | 进一步针对大规模 Transformer 模型进行了优化。 |
TensorFloat-32 (TF32)
在 Ampere 架构中引入的TF32格式是 Tensor Core 的一项重要创新。它拥有 FP32 的范围(指数位)和 FP16 的精度(尾数位)。
- 优点:开发者无需修改现有的 FP32 代码,Tensor Core 就能在硬件级别自动加速,从而在不损失太多精度的前提下,提供了显著的性能提升。
4. CUDA 与 Tensor Core 的关系
CUDA C++ 开发者通常不需要直接编写 Tensor Core 指令。这些指令通过以下方式被抽象和利用:
cuDNN/cuBLAS/cuTENSOR:NVIDIA 的高性能库(尤其是 cuDNN)内部包含了大量利用 Tensor Core 的优化 Kernel。当深度学习框架调用 cuDNN 时,cuDNN 会自动选择使用 Tensor Core。
WMMA (Warp Matrix Multiply-Accumulate):CUDA C++ 为高级开发者提供了 WMMA API,允许他们直接在 Kernel 内部编写代码来利用 Tensor Core 的功能,从而实现对复杂算法(如稀疏矩阵乘法)的深度定制优化。
总结:
Tensor Core 是 NVIDIA GPU 架构从通用并行处理器向 AI 和 HPC 专用加速器转变的关键硬件。它通过高效的矩阵乘法和对混合精度的支持,极大地提高了深度学习训练和推理的速度和效率,是驱动 AI 爆炸性增长的底层计算力。