2. AI计算基础

理解AI加速器为何与通用CPU走上不同演进路线,必须回到神经网络的计算本质。神经网络并非神秘的黑盒,它的训练与推理过程可以被拆解为一系列高度规律、可量化的数学运算。这些运算的数据规模、访存模式、并行维度与精度需求,共同决定了TPU、NPU、DPU等加速器的架构选择。本节从计算特征出发,逐层剖析矩阵乘法、卷积、激活函数与典型算子,建立“算法—算子—硬件”之间的映射直觉。

一、神经网络的计算特征:为什么它适合专用加速

神经网络的核心计算具有四个鲜明特征,这些特征正是加速器设计的出发点。

  • 计算密集与访存密集并存:全连接层和卷积层包含大量乘加运算(MAC),属于计算密集型;而激活、归一化、池化等逐元素操作计算量小,却需要频繁读写张量,属于访存密集型。
  • 高度并行:同一层内成千上万个神经元的计算彼此独立,天然适合SIMD、SIMT或脉动阵列等并行结构。
  • 数据复用性强:卷积核在输入特征图上滑动时,权重被反复使用;输入像素也被多个输出通道复用。这种复用是降低访存带宽压力的关键。
  • 精度容忍度高:推理阶段对数值误差不敏感,INT8、FP16甚至INT4即可满足多数场景,为低比特加速提供了空间。
加速器的本质,是把“通用但低效”的指令流执行,转化为“专用且高吞吐”的数据流执行。理解算子的数据流,比记住算子的公式更重要。

二、矩阵乘法:AI计算的骨架

无论是全连接层 Y = XW + b,还是卷积展开后的隐式矩阵乘,抑或Transformer中的注意力计算,矩阵乘法(GEMM)都是绝对主力。设矩阵 A 为 M×K,矩阵 B 为 K×N,则输出 C 为 M×N,每个元素需要 K 次乘加。

for i in range(M):
    for j in range(N):
        acc = 0
        for k in range(K):
            acc += A[i][k] * B[k][j]
        C[i][j] = acc

这段三重循环揭示了优化的三个方向:并行化(i、j维度可并行)、分块(将大矩阵切成适合片上缓存的tile)、数据复用(A的行与B的列在计算C的一个元素时被复用)。TPU的脉动阵列正是把“乘加”固化为硬件单元,让数据像流水一样在阵列中流动,权重驻留、激活流动,从而以极低能耗完成大规模GEMM。

三、卷积:局部连接与权值共享

卷积层通过滑动窗口提取空间特征。以二维卷积为例,输入特征图 H×W×C_in,卷积核 K×K×C_in×C_out,输出为 H'×W'×C_out。每个输出像素是输入局部区域与卷积核的点积。

卷积的高效实现通常转化为矩阵乘法,即im2col + GEMM:把每个滑动窗口展平成一行,形成 (H'×W') × (K×K×C_in) 的矩阵,再与展平的卷积核矩阵相乘。这种转换牺牲了部分内存,却换来了高度规整的GEMM计算,便于硬件加速。另一种思路是Winograd算法,通过变换减少乘法次数,适合3×3小卷积核。

深度可分离卷积将标准卷积拆分为逐通道卷积和逐点卷积,计算量可降至原来的1/8到1/9,是移动端NPU重点优化的算子。

四、激活函数与典型算子

激活函数为网络引入非线性。常见的有ReLU、Leaky ReLU、Sigmoid、Tanh、GELU、Swish等。其中ReLU因计算简单、梯度稳定,成为加速器最友好的选择;GELU和Swish精度更好,但涉及指数或除法,硬件实现成本更高。

除卷积和全连接外,典型算子还包括:

算子类别代表算子计算特征硬件关注点
池化Max Pooling、Average Pooling逐窗口归约,访存密集片上缓存、行缓冲
归一化BatchNorm、LayerNorm统计量计算+逐元素缩放归约单元、精度
注意力QK^T、Softmax、AV矩阵乘+逐元素+归约大矩阵分块、Softmax流水
逐元素Add、Mul、ReLU无数据复用,带宽受限向量单元、融合执行

五、案例:一次推理的算子流

以ResNet-50的一层残差块为例,其计算流为:Conv3×3 → BatchNorm → ReLU → Conv3×3 → BatchNorm → Add → ReLU。在硬件上,卷积由矩阵乘单元承担,BatchNorm和ReLU由向量单元承担,Add需要读取残差分支。若每个算子单独执行,中间结果反复写回DRAM,带宽成为瓶颈。因此现代NPU普遍支持算子融合,把Conv+BN+ReLU合并为一个内核,中间结果保留在片上,显著降低访存。

神经网络典型算子数据流与硬件映射 输入特征图 H×W×C_in 卷积 / GEMM im2col + 脉动阵列 BatchNorm 归约 + 缩放 ReLU 逐元素激活 算子融合区域(片上缓存,避免中间结果写回DRAM) Conv + BN + ReLU 合并为单一内核,中间张量驻留SRAM 访存次数从 3 次降为 1 次,带宽压力显著下降 矩阵乘单元 脉动阵列 / Tensor Core 承担 Conv、FC、QK^T 向量单元 ReLU、Add、BN、Softmax 逐元素与归约操作 片上缓存 SRAM 权重驻留、激活复用 降低DRAM带宽需求

六、常见误区与复盘

误区一:只关注峰值算力,忽视访存带宽。很多算子(如逐元素、池化)的瓶颈在带宽而非算力,加速器若缓存设计不足,峰值TOPS无法兑现。

误区二:认为所有算子都能高效映射到矩阵乘单元。Softmax、LayerNorm等含归约和超越函数的算子,需要向量单元配合,否则会成为流水线气泡。

误区三:忽略算子融合的收益。不融合时,中间张量反复进出DRAM,能耗和延迟可能数倍于计算本身。

复盘来看,AI加速器的设计必须围绕“算子画像”展开:先统计目标网络中各类算子的占比、形状、精度与访存需求,再决定矩阵乘单元规模、向量单元能力、缓存层级与融合策略。只有把算法特征翻译成硬件参数,TPU/NPU/DPU才能在真实负载中发挥出应有的效率。