模型训练中开启了梯度累加功能,但累加效率较慢,梯度累加中的Add算子占比较高。
MindSpeed将matmul操作和add操作合并成一个融合算子。该融合算子的详细接口与使用说明请参见融合算子API清单中的npu_matmul_add_fp32接口。
LLaMA及GPT大模型均可使用。
融合算子使能要求安装ATB(Ascend Transformer Boost),请参考软件安装完成安装。
去掉--no-gradient-accumulation-fusion即可调用Matmul_Add融合算子。
小算子matmul操作结束后,会先将得到的结果进行降精度(由fp32到bf16)再升精度(由bf16到fp32)最后进行add操作,这种先降再升的操作会损失一部分精度,而融合算子会跳过这一操作直接进行累加,故精度上存在差异。
具体变化过程如下:
在内存没有完全使用或占满的情况下,开启Matmul_Add融合算子,模型训练的性能将得到提升,在LLaMA2-7B模型下,性能增益约2%。