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

确定性计算

简介

应用开发过程中,由于CANN版本不同或NPU型号不同等原因,不能保证同一个算子多次运行后的结果完全一致,并且即使使用相同的随机种子,多次NPU执行的结果也可能不完全保持一致。

但是,针对某一些算子或者接口,在满足相同的运行环境(平台、设备和CANN版本以及其他可能导致随机性的参数)条件下,可以通过配置计算过程采用确定性算法,来使得多次运行的结果完全一致。

确定性算法:给定相同的输入(包括运行环境)并在相同的软件和硬件上运行时,多次运行始终产生相同输出的算法。

  • 注意:同一个算子,采用确定性计算通常比非确定性慢,因此模型的单次运行性能可能会下降。但在实验、调试和回归测试等需要保证多次运行结果相同来定位问题和实验算法的场景,确定性计算可以提升效率。
  • 当前同一线程中只能设置一次确定性状态,多次设置以最后一次有效设置为准,后续设置不生效。

    有效设置:在设置确定性状态后,真正执行了一次算子的任务下发,如果仅设置,没有算子下发,只能是确定性变量开启,并未下发给算子,因为不执行算子,不知道哪个算子需要执行确定性。

    解决方案:
    1. 暂不推荐一个线程多次设置确定性。
    2. 该问题在二进制开启和关闭情况下均存在,在后续版本中会解决该问题。

使用方法

目前部分算子接口可通过应用开发指南 (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