环境信息
硬件环境(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当前不支持权重精度低于梯度的精度,导致报错。