确定性计算
简介
由于CANN版本不同或NPU型号不同等原因,应用开发过程中可能无法保证同一个算子在多次运行后的结果完全一致,即便采用了相同的随机种子,多次NPU执行结果也可能不一致。 然而,对于某些算子或接口,在相同运行环境(平台、设备、CANN版本以及其他可能导致随机性的参数)条件下,可以通过配置确定性算法,使多次运行结果保持一致。
说明:
- 确定性算法:给定相同的输入(包括运行环境)并在相同的软件和硬件上运行时,多次运行始终产生相同输出的算法。
- 性能说明:同一个算子采用确定性计算通常比非确定性慢,因此模型的单次运行性能可能会下降。但在实验、调试和回归测试等需要保证多次运行结果相同来定位问题和实验算法的场景,确定性计算可以提升效率。
- 线程说明:同一线程中只能设置一次确定性状态,多次设置以最后一次有效设置为准,后续设置不生效。有效设置是指设置确定性状态后,真正执行了一次算子的任务下发。如果仅设置,没有算子下发,只能是确定性变量开启但未下发给算子,因此不执行算子。 解决方案:暂不推荐一个线程多次设置确定性。该问题在二进制开启和关闭情况下均存在,在后续版本中会解决该问题。
使用方法
目前部分算子aclnn接口可通过aclrtCtxSetSysParamOpt
开启确定性计算,配置方法如下:
[object Object]
ACL_OPT_DETERMINISTIC
表示是否开启确定性计算,配置1表示开启,接口详细介绍参见中“运行时管理 > Context管理 > aclrtCtxSetSysParamOpt”。
不确定API列表
注意:当前版本仅针对如下产品提供了不确定API列表,其他产品对应的不确定API列表后续版本会提供。
- [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]