使用MindIE进行推理时,如何保证每次推理结果的一致性
问题描述
使用MindIE进行推理,相同输入,组batch顺序不同时,模型推理输出结果不同。
原因分析
由于MatMul算子在不同行上的累加顺序不完全相同,且浮点精度没有加法交换律的特性,导致不同行上即使输入完全相同,计算结果也会存在一定的误差。
解决方案
确定性计算,是指在输入数据集等输入条件不变时,多次运行推理应用,输出结果每次保持一致。可以通过设置环境变量export ATB_MATMUL_SHUFFLE_K_ENABLE=0将加速库MatMul的shuffle k功能关闭,关闭之后可以保证所有行上算子累加顺序一致,但MatMul性能会下降10%左右 。
通信算子:
export LCCL_DETERMINISTIC=1 export HCCL_DETERMINISTIC=true #开启归约类通信算子的确定性计算 export ATB_LLM_LCOC_ENABLE=0
MatMul:
export ATB_MATMUL_SHUFFLE_K_ENABLE=0
父主题: FAQ