《GPU数据中心AI算力集群全景通识》

3、AI计算范式:深度学习训练/推理的计算模式、矩阵运算与并行化

深度学习模型的本质,是一系列嵌套的线性变换与非线性激活函数的复合。无论是训练还是推理,其底层计算都可以归结为大规模的张量运算,尤其是矩阵乘法(GEMM)与卷积(可转化为矩阵乘法)。理解这一计算范式,是理解GPU为何成为AI算力核心的前提。

3.1 训练与推理的计算模式差异

训练与推理虽然共享相同的算子集合,但在计算特征、精度要求、并行策略上存在显著差异。下表从多个维度对比了两者的核心区别:

维度 训练(Training) 推理(Inference)
计算方向 前向传播 + 反向传播(梯度计算) 仅前向传播
数据流 需要保存中间激活值用于梯度回传 逐层计算,中间结果可即时丢弃
精度需求 通常需要 FP32 或混合精度(FP16/BF16 + FP32 累加) 可接受 INT8/INT4 量化,精度损失可控
批量大小 大 Batch(如 256~8192),追求吞吐 小 Batch(通常 1~32),追求低延迟
计算瓶颈 计算密集 + 显存带宽密集(梯度更新) 延迟敏感,受限于单层计算时间与访存延迟
并行策略 数据并行、张量并行、流水线并行组合 多实例并行(多路复用),批处理合并

训练过程的核心循环可以概括为:前向传播 → 损失计算 → 反向传播 → 参数更新。其中反向传播需要利用链式法则,从输出层向输入层逐层计算梯度,这要求在前向传播时缓存每一层的激活值。因此,训练的内存占用远高于推理,且计算量约为推理的 3 倍(前向 1 次 + 反向 2 次矩阵乘法)。

3.2 矩阵运算:AI 计算的原子操作

深度学习中最核心的运算是矩阵乘法 C = A × B。以全连接层为例,输入特征 X(形状 [M, K])与权重矩阵 W(形状 [K, N])相乘,得到输出 Y(形状 [M, N])。卷积层则通过 im2col 或隐式 GEMM 技术,将卷积操作转化为矩阵乘法以利用 GPU 的 Tensor Core。

一个典型的矩阵乘法计算单元(以 FP16 输入、FP32 累加为例)在 GPU 上的执行流程如下:

// 伪代码:GPU 上的 GEMM 分块计算
// 将大矩阵划分为 tile(如 128x128),每个 tile 由多个线程块协作完成
for (int block_row = 0; block_row < M / TILE_M; block_row++) {
    for (int block_col = 0; block_col < N / TILE_N; block_col++) {
        // 每个线程块加载 A 和 B 的 tile 到共享内存
        load_tile_to_smem(A_tile, B_tile);
        // 在共享内存中执行小矩阵乘法,利用 Tensor Core 的 MMA 指令
        for (int k = 0; k < K / TILE_K; k++) {
            mma_sync(C_tile, A_tile, B_tile, C_tile); // 一次执行 16x16x16 的矩阵乘累加
        }
        // 将结果写回全局内存
        store_tile_to_gmem(C_tile);
    }
}

GPU 的 Tensor Core 专门为这类运算设计,单条 HMMA(Half-precision Matrix Multiply-Accumulate)指令可在单周期内完成 4x4x4 或更大规模的矩阵乘累加。NVIDIA A100 的 Tensor Core FP16 算力达到 312 TFLOPS,而 FP32 CUDA 核心算力仅 19.5 TFLOPS,差距约 16 倍。因此,能否将算子高效映射为矩阵乘法,直接决定了 GPU 利用率的上限。

3.3 并行化策略:从数据到模型的多维度拆分

当单个 GPU 无法容纳模型或训练速度不满足需求时,需要将计算任务拆分到多个 GPU 上并行执行。并行化策略主要分为以下三类:

3.3.1 数据并行(Data Parallelism)

每个 GPU 持有完整的模型副本,但处理不同的数据分片。训练时各 GPU 独立计算梯度,通过 AllReduce 通信操作同步梯度并更新参数。这是最常用的并行方式,适用于模型能放入单卡显存、但训练数据量巨大的场景。其通信开销与模型参数量成正比,大模型下通信可能成为瓶颈。

3.3.2 张量并行(Tensor Parallelism)

将单个算子的矩阵乘法按行或列拆分到多个 GPU。例如,将权重矩阵 W 按列拆分为 [W1, W2],分别放在两个 GPU 上,输入 X 同时广播给两个 GPU,各自计算 X×W1 和 X×W2,最后拼接结果。这种方式减少了单卡显存压力,但每个算子都需要一次 AllGather 通信,通信频率高。

3.3.3 流水线并行(Pipeline Parallelism)

将模型按层切分为多个阶段,每个 GPU 负责其中一段。数据以 micro-batch 形式依次流过各阶段,形成流水线。这种方式通信量小(仅阶段间传递激活值和梯度),但存在流水线气泡(bubble)导致利用率下降。GPT-3 等超大模型通常采用 数据并行 + 张量并行 + 流水线并行 的 3D 并行策略。

以下是一个 3D 并行配置的示意:

// 假设 64 个 GPU,模型参数量 175B
// 维度1:张量并行度 = 8(每 8 个 GPU 组成一个张量并行组)
// 维度2:流水线并行度 = 4(共 4 个流水线阶段)
// 维度3:数据并行度 = 2(64 / (8*4) = 2 个数据并行副本)
// 实际部署时,通信拓扑按此层次组织,减少跨节点通信

3.4 典型场景:大语言模型训练的并行化实践

以 GPT-3 175B 参数模型为例,其训练过程展示了上述并行策略的综合应用。模型参数量 1750 亿,若使用 FP16 存储,仅参数就需要 350GB 显存,远超单卡 A100 的 80GB。实际部署采用如下方案:

  • 张量并行:将 Transformer 层的注意力权重和 FFN 权重按列/行拆分到 8 张卡,单层参数分散存储。
  • 流水线并行:将 96 层 Transformer 分为 12 个阶段,每个阶段 8 层,由一组 GPU 负责。
  • 数据并行:复制多份完整模型流水线,每份处理不同的数据批次,通过梯度累积同步更新。
  • 混合精度:前向和反向使用 BF16 计算,优化器状态使用 FP32 保存,减少显存占用同时保持训练稳定性。

实际训练时,每个 GPU 的显存分配大致为:参数副本(约 2.5GB)+ 梯度(2.5GB)+ 优化器状态(Adam 需要 4 倍参数量的 FP32 状态,约 10GB)+ 激活值(动态变化,通过激活重计算技术控制在 20GB 以内)。

3.5 常见误区与复盘

误区一:认为 TFLOPS 越高,实际训练速度越快。 峰值算力只是理论上限,实际性能取决于算子是否能有效利用 Tensor Core。例如,小 Batch 推理时矩阵维度小,无法填满 Tensor Core 的流水线,实际利用率可能不足 10%。

误区二:忽略通信开销的并行化设计。 在 100Gbps 网络下,AllReduce 通信 1GB 数据需要约 80ms。如果模型每步训练计算时间仅 200ms,通信占比接近 30%,严重拖慢训练速度。应优先减少通信频率(如梯度累积)或使用更高效的通信拓扑。

复盘建议: 在评估 GPU 集群性能时,不要只看单卡算力,应使用实际模型进行端到端 benchmark,并关注 MFU(Model FLOPs Utilization,模型算力利用率)。MFU = 实际达到的 FLOPs / 理论峰值 FLOPs。业界优秀水平通常在 40%~55% 之间,低于 30% 说明并行策略或算子实现存在明显优化空间。

此外,推理场景的并行化与训练有本质不同。推理更关注延迟而非吞吐,因此通常采用 动态批处理(Dynamic Batching) 将多个请求合并为一个 batch 执行,或使用 模型分片(Model Sharding) 将大模型分布到多卡并行推理。对于延迟极度敏感的场景(如自动驾驶实时感知),甚至会牺牲精度使用 INT8 量化,以换取更低的计算延迟。

理解训练与推理的计算模式差异、矩阵运算的底层机制以及多维并行化策略,是设计高效 AI 算力集群的基础。下一层级的 GPU 架构设计、网络拓扑选择以及集群调度策略,都建立在这些计算特征之上。