昇腾社区首页
中文
注册
开发者
下载

使用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