确定性计算
简介
应用开发过程中,由于CANN版本不同或NPU型号不同等原因,不能保证同一个算子多次运行后的结果完全一致,并且即使使用相同的随机种子,多次NPU执行的结果也可能不完全保持一致。
但是,针对某一些算子或者接口,在满足相同的运行环境(平台、设备和CANN版本以及其他可能导致随机性的参数)条件下,可以通过配置计算过程采用确定性算法,来使得多次运行的结果完全一致。
确定性算法:给定相同的输入(包括运行环境)并在相同的软件和硬件上运行时,多次运行始终产生相同输出的算法。
使用方法
目前部分算子接口可通过《应用开发指南 (C&C++)》中“aclrtCtxSetSysParamOpt”开启确定性计算:
aclrtCtxSetSysParamOpt(ACL_OPT_DETERMINISTIC, 1)
确定性计算API清单
- 以下不确定API,可通过配置开启确定性计算
aclnnAdaptiveAvgPool2dBackward
aclnnAdaptiveAvgPool3dBackward
aclnnAdaptiveMaxPool2dBackward
aclnnAdaptiveMaxPool3dBackward
aclnnAddmm
aclnnAddmv
aclnnAvgPool2dBackward
aclnnAvgPool3dBackward
aclnnBatchNorm
aclnnBatchNormBackward
aclnnBatchNormElemt
aclnnChamferDistanceBackward
aclnnCtcLoss
aclnnCtcLossBackward
aclnnEmbeddingDenseBackward
aclnnFFN
aclnnFFNV2
aclnnFFNV3
aclnnFlashAttentionScoreGrad
aclnnFlashAttentionScoreGradV2
aclnnFlashAttentionUnpaddingScoreGrad
aclnnFlashAttentionUnpaddingScoreGradV2
aclnnGemm
aclnnGroupNormBackward
aclnnGroupNormSwishGrad
aclnnIndexAdd
aclnnIndexPutImpl
aclnnInplaceAddmm
aclnnInplacePut
aclnnLinalgVectorNorm
aclnnMatmul
aclnnMatmulAllReduce
aclnnMatmulAllReduceV2
aclnnMatmulReduceScatter
aclnnMaxPool2dWithIndicesBackward
aclnnMaxPool2dWithMaskBackward
aclnnMm
aclnnMultilabelMarginLoss
aclnnMultiScaleDeformableAttentionGrad
aclnnMv
aclnnNLLLoss
aclnnNLLLoss2d
aclnnNorm
aclnnQuantMatmulAllReduce
aclnnQuantMatmulAllReduceV2
aclnnQuantMatmulAllReduceV3
aclnnRmsNormGrad
aclnnScaledMaskedSoftmaxBackward
aclnnTrace
aclnnUpsampleBicubic2dBackward
aclnnUpsampleNearest3dBackward
aclnnUpsampleNearestExact1dBackward
aclnnUpsampleNearestExact2dBackward
aclnnUpsampleNearestExact3dBackward
aclnnWeightQuantMatmulAllReduce
- 以下不确定API,无法通过配置开启确定性计算
aclnnDeepNormGrad
aclnnGridSampler2DBackward
aclnnGridSampler3DBackward
aclnnGroupedMatmulFinalizeRouting
aclnnGroupedMatmulFinalizeRoutingV2
aclnnGroupedMatmulFinalizeRoutingWeightNz
aclnnObfuscationSetup
aclnnRoiAlignV2Backward