Mixtral 8*7B 大模型精度问题总结

环境信息

硬件环境(Ascend/GPU/CPU): Ascend 910
MindSpore版本: 2.3
执行模式(PyNative/ Graph):Graph
Python版本: 不限
操作系统平台: linux

精度问题与分析

1、正向rotary embedding精度不一致

使用tensordump进行网络正向对比,发现rotary embedding处精度不一致,对比源码后发现rotary embedding的base参数不一致,修改后精度一致。

2、正向MOE部分精度不一致

对比moe层,发现torch的q、k、v等tensor的排布和ms的不同,无法对比,只能对比整体的输入和输出,发现误差放大到十分位。对比脚本,发现torch moe中容量为全容量设置与mindspore不一致,修改ms为专家全容量后,前向最终loss误差为万分位。

3、adam优化器精度不一致

正向对比完成后,对比反向精度,发现反向loss误差在百分位,torch的fuseAdam优化器与ms的FP32AdamW实现不同引入误差。分析fuseAdam源码,使用ms的Adam可与torch对齐。ms使用Adam优化器与权重FP32初始化已与torch对齐,整体误差千分位。权重fp16/bf16初始化,和torch还是无法对齐,存在误差,同时ms当前不支持权重精度低于梯度的精度,导致报错。