Matmul_Add融合优化
背景与挑战
模型训练中开启了梯度累加功能,但累加效率较慢,梯度累加中的Add算子占比较高。
解决方案
MindSpeed将matmul操作和add操作合并成一个融合算子。该融合算子的详细接口与使用说明请参见融合算子API清单中的npu_matmul_add_fp32接口。
使用场景
LLaMA及GPT大模型均可使用。
使用方法
融合算子使能要求安装ATB(Ascend Transformer Boost),请参考软件安装完成安装。
去掉--no-gradient-accumulation-fusion即可调用Matmul_Add融合算子。

- npu_matmul_add_fp32暂不支持MFU(Model FLOPS Utilization,模型算力利用率)统计。
- 融合算子与小算子之间存在一定的精度差异。
小算子matmul操作结束后,会先将得到的结果进行降精度(由fp32到bf16)再升精度(由bf16到fp32)最后进行add操作,这种先降再升的操作会损失一部分精度,而融合算子会跳过这一操作直接进行累加,故精度上存在差异。
具体变化过程如下:
- 小算子dtype变化过程:bf16*bf16=fp32->bf16->fp32+fp32=fp32
- 融合算子dtype变化过程:bf16*bf16=fp32+fp32=fp32
使用效果
在内存没有完全使用或占满的情况下,开启Matmul_Add融合算子,模型训练的性能将得到提升,在LLaMA2-7B模型下,性能增益约2%。
父主题: 计算性能优化