第二章:大模型基础与算子解析

各位同学,今天我们来聊聊Transformer。说实话,这个架构现在已经是AI芯片的“灵魂”了。我刚开始接触大模型时,也被它的复杂度吓了一跳。但拆开来看,核心就那么几个算子。

2.1 Transformer架构拆解

Transformer最早是Google在2017年提出的。它的设计思路很巧妙——完全抛弃了循环和卷积,全靠注意力机制。我当年第一次看到论文时,心里想的是:“这玩意儿真能跑起来?”

整个架构分两大部分:

  • Encoder(编码器):把输入序列变成特征表示
  • Decoder(解码器):根据特征生成输出序列

每个Encoder/Decoder层里,核心组件就三个:

  1. 多头注意力(Multi-Head Attention)
  2. 前馈网络(Feed-Forward Network)
  3. 层归一化(Layer Normalization)

嗯,这里要注意:每个组件外面都包了一层残差连接。为什么?因为网络太深了,不加残差根本训不动。我在项目中遇到过,有次为了省资源把残差去掉了,结果模型收敛速度直接掉了30%。

核心观点:Transformer的本质就是“注意力+前馈”的堆叠。你想想看,GPT、BERT、LLaMA,哪个不是这个套路?

Transformer 核心架构 Encoder × N 输入嵌入 位置编码 多头注意力 Multi-Head Attention 残差 + LayerNorm 前馈网络 Feed-Forward 残差 + LayerNorm Decoder × N 输出嵌入 位置编码 Masked 多头注意力 (带掩码) 残差 + LayerNorm 交叉注意力 (连接Encoder) 残差 + LayerNorm Encoder输出

2.2 Attention机制深度解析

Attention说白了就是“找重点”。给定一个查询Q,一组键K和值V,计算Q和每个K的相似度,然后用这个相似度去加权求和V。

公式长这样:

Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V

这里有个细节:为什么要除以√d_k?因为Q和K的点积结果会随着维度增大而变大,softmax的梯度会变得很小。我刚开始做FPGA实现时,忽略了这一步的数值范围,结果仿真时发现softmax输出全是0或1——嗯,这就是所谓的“梯度消失”。

实战技巧:在FPGA上实现Attention时,建议把Q×K^T的结果先做一次截位,再送softmax。我曾经因为数值溢出,排查了整整两天。

2.3 常见算子计算特征

大模型里最常用的算子就三个:MatMul、Softmax、LayerNorm。咱们一个一个说。

2.3.1 MatMul(矩阵乘法)

这是计算量最大的算子。一个Transformer层里,Q、K、V的投影需要MatMul,Attention输出需要MatMul,前馈网络的两个全连接层也是MatMul。说白了,整个模型80%的计算量都在这里。

计算特征:

  • 计算密集型:计算/访存比高
  • 可并行度高:每个输出元素独立
  • 数据复用:权重矩阵被多次读取

在FPGA上,我习惯用脉动阵列(Systolic Array)来做MatMul。为什么?因为数据流规整,容易达到高吞吐。我记得第一次在Xilinx VU9P上实现时,用32×32的脉动阵列,跑到了800MHz——当然,那是理想情况。

2.3.2 Softmax

Softmax看起来简单,但实现起来坑不少。公式是:

softmax(x_i) = exp(x_i) / Σ exp(x_j)

计算特征:

  • 指数运算:硬件实现成本高
  • 需要全局归约:先求最大值,再求和
  • 数值稳定性:容易溢出

避坑指南:我曾经在实现Softmax时,直接用了CORDIC算法算指数。结果精度不够,模型推理结果完全不对。后来改用查找表+线性插值,精度和资源都满意了。

2.3.3 LayerNorm(层归一化)

LayerNorm的作用是稳定训练。它对每个样本的所有特征做归一化:

y = (x - μ) / √(σ² + ε) × γ + β

计算特征:

  • 需要计算均值和方差:两次全局归约
  • 除法运算:硬件实现成本高
  • 逐元素操作:适合SIMD架构

在FPGA上实现LayerNorm时,我建议把均值和方差的计算流水化。先算一次求和得均值,再算一次平方差求和得方差。嗯,这里要注意:ε是个很小的数,防止除零,一般取1e-5。

2.4 算子计算量对比

咱们用一张表来看看各算子的计算量占比(以GPT-3 175B为例):

算子 计算量占比 访存量占比 硬件瓶颈
MatMul ~85% ~60% 计算单元
Softmax ~5% ~15% 指数运算
LayerNorm ~3% ~10% 除法/开方
其他(GELU等) ~7% ~15% 非线性函数

看到没?MatMul占了绝对大头。所以做硬件加速时,优先优化MatMul。但Softmax和LayerNorm也不能忽视——它们虽然计算量小,但访存模式不规则,容易成为瓶颈。

总结一下:Transformer的核心就是Attention + FFN,而Attention的核心就是MatMul + Softmax。你想想看,把这些算子吃透了,大模型加速就成功了一半。

好了,这一章就到这里。下一章我们会深入MatMul的FPGA实现,从脉动阵列到数据流优化,一步步带你跑起来。

专注资料整理