057、NPU的注意力机制(Attention):Transformer的硬件挑战
NPU的注意力机制(Attention):Transformer的硬件挑战去年冬天调一块自研NPU的Transformer推理时,遇到一个诡异现象:同样的模型在GPU上跑得好好的,搬到NPU上,前向计算到第12层Encoder时,输出突然变成NaN。查了两天,最后定位到是Softmax的指数累加器溢出了——NPU的定点累加器只有32位宽,而注意力分数矩阵里某个位置的QKT值因为输入噪声飙到了200多,e200直接撑爆了累加器。这个坑让我意识到,Transformer的注意力机制在NPU上远不是“算个矩阵乘再Softmax”那么简单。今天聊聊这些硬件层面的真实挑战。注意力计算的“三座大山”先看标准公式:Attention(Q,K,V) = softmax(QKT/√d)V。拆开看,核心计算分三步:QKT矩阵乘、Scale+Softmax、与V的矩阵乘。每一步在NPU上都有坑。**QKT矩阵乘**:这是最直观的计算密集型操作。假设序列长度L=1024,头维度d=64,单头QKT就是1024x1024的矩阵乘。8头并行就是8个这样的矩阵乘。NPU的MAC阵列通常设计成固定尺寸(比如16x16),处理这种变长矩阵乘时,数据搬运和MAC利用率是第一个瓶颈。我见过一个方案把QK^T拆成tile计算,但tile边界处理不好会导致大量padding浪费——有次实测padding占了30%的算力。Scale+Softmax:这才是真正的硬件杀手。Scale简单,乘个1/