4. 物理代理模型算子级优化
物理代理模型(如神经算子、图神经网络代理、卷积代理)在推理阶段的计算开销,绝大部分集中在少数几类算子上:稠密矩阵乘、稀疏矩阵乘、卷积、注意力以及物理场插值。算子级优化不是简单地“换更快的库”,而是要在理解每个算子的数据形状、访存模式与数值敏感度的基础上,做融合、向量化与低精度近似三类改造,并保证物理约束不被破坏。本节围绕这四类算子展开,给出可落地的判断依据与实现方式。
先定位瓶颈:算子画像与访存强度
优化前应先给算子“画像”。对每个算子记录三项:输入输出张量形状、浮点运算量 FLOPs、以及算术强度(FLOPs / 访存字节数)。算术强度低的算子(如逐元素插值、归一化)是访存受限,优化重点是减少内存往返与合并访存;算术强度高的算子(如大矩阵乘、卷积)是计算受限,优化重点是提高张量核心利用率与降低精度。以一次代理模型推理为例,假设某层稠密矩阵乘为 [4096, 512] × [512, 512],FLOPs 约 2.1 GFLOP,若权重与激活均为 FP32,访存约 10 MB,算术强度约 200 FLOP/Byte,属于典型计算受限,适合低精度与分块;而物理场插值若为 [1e6] 个采样点的双线性插值,FLOPs 仅约 1e7,访存却达数十 MB,属于访存受限,应优先做向量化与融合,而不是降精度。
融合:把“写回再读”变成“算完即用”
代理模型中常见的低效模式是“矩阵乘 → 加偏置 → 激活 → 归一化”被拆成四个 kernel,每个 kernel 都把整个张量写回显存再读入。以 [4096, 512] 的中间张量 FP16 为例,单次写回加读取约 8 MB,四个 kernel 累计多出数十 MB 访存。融合的做法是在矩阵乘的分块循环内,把偏置、激活、归一化直接作用在寄存器中的累加结果上,只写回最终张量。实现上可借助算子融合编译器(如 TVM、Triton)写一个融合 kernel:外层按输出块 BLOCK_M×BLOCK_N 循环,内层沿 K 维累加,累加完成后立即执行 y = act(acc * scale + bias) 并写回。判断融合是否值得,看被融合算子是否为逐元素且形状一致;若中间张量还要被其他分支复用,则不宜融合,否则会重复计算。
向量化:让访存与计算都“成批”
向量化的核心是让每次内存访问搬运连续多个元素,并让计算单元一次处理多个数据。对物理场插值这类访存受限算子,收益最明显。以双线性插值为例,采样点坐标 (x, y) 为 [N] 的浮点数组,朴素实现逐点计算四个角点索引并 gather,访存极不连续。向量化版本先一次性计算 i0 = floor(x)、fx = x - i0 等数组,再以 8 或 16 个采样点为一组,用宽加载读取相邻角点,最后用 FMA 合并权重。关键细节有三:坐标数组按 32 字节对齐;索引计算用整数向量指令;对边界点单独做掩码处理,避免越界。若插值网格本身是规则结构,还可把“坐标变换 + 插值”融合为一个 kernel,省去中间坐标数组的写回。
低精度近似:先看物理量,再定精度
低精度不是无条件可用的。代理模型的输出往往对应压力、温度、速度等物理量,量化误差会被后续物理约束放大。稳妥的做法是分层定精度:矩阵乘与卷积的权重和激活用 FP16 或 BF16,累加仍用 FP32,避免长 K 维累加的舍入误差;注意力中的 QKV 可用 FP16,但 softmax 的指数运算建议在 FP32 下完成再转回;插值系数与坐标必须保留 FP32,因为坐标的微小误差会直接改变采样位置。INT8 只建议用于对精度不敏感的中间特征,且需做逐通道量化。上线前必须做误差校验:在验证集上比较 FP32 与低精度输出的相对误差,并检查关键物理量(如质量守恒、边界条件满足度)是否仍在容差内。例如某代理模型在 FP16 下最大相对误差 3e-3、质量守恒偏差 0.2%,可接受;若某层改用 INT8 后边界处温度偏差升至 2%,则应回退该层。
稀疏矩阵乘与注意力的专项处理
物理代理模型中稀疏性常来自图结构或离散算子。稀疏矩阵乘的瓶颈在索引访存而非浮点运算,优化时优先选用块稀疏(如 16×16 块)而非纯 CSR,因为块稀疏能把不规则 gather 变成规则块加载,显著提升带宽利用率;若稀疏度低于 50%,往往不如直接稠密计算加掩码。注意力方面,长序列下标准实现会物化 [L, L] 的注意力矩阵,显存与带宽开销巨大。采用分块在线 softmax(FlashAttention 思路):按行块加载 Q,沿列块迭代 K、V,维护运行最大值与归一化因子,逐块累加输出,全程不写回完整注意力矩阵。对代理模型中常见的局部注意力,还可直接限制感受野,把计算量从 O(L²) 降到 O(L·w)。
综合来看,算子级优化的落点是三件事:用融合消除中间张量的往返、用向量化匹配硬件的宽访存、用受控的低精度换取吞吐。三者都服务于同一个前提——代理模型的物理可信度不能因提速而下降,因此每一次精度调整都必须配套误差与守恒量的校验。