在使用PyTorch框架进行训练时,若需要输出结果排除随机性,则需要设置确定性计算开关。在开启确定性计算时,当使用相同的输入在相同的硬件和软件上执行相同的操作,输出的结果每次都是相同的。
确定性计算的用法和效果具体可参考相应官方文档torch.use_deterministic_algorithms,本小节仅介绍开启确定性计算的方法。
开启确定性开关可能会导致性能下降。
torch.use_deterministic_algorithms(True)
torch.are_deterministic_algorithms_enabled()
print(torch.are_deterministic_algorithms_enabled())
执行训练时,打印此接口的返回值为True表示当前已开启确定性计算开关,返回False则表示未开启。
昇腾支持的确定性计算API列表请参见表1。
API名称 |
---|
torch.nn.functional.batch_norm |
torch.nn.functional.binary_cross_entropy |
torch.nn.functional.ctc_loss |
torch.cumsum |
torch.dot |
torch.matmul |
torch.nn.functional.embedding |
torch.nn.functional.nll_loss |
torch.nn.functional.prelu |
torch.mean |
torch.nn.functional.adaptive_avg_pool2d |
torch.nn.functional.avg_pool2d |
torch.nn.functional.binary_cross_entropy_with_logits |
torch.nn.functional.mse_loss |
torch.addbmm |
torch.Tensor.addbmm_ |
torch.addmv |
torch.Tensor.addmv_ |
torch.nn.functional.l1_loss |
torch.nn.functional.smooth_l1_loss |
torch.addmm |
torch.Tensor.addmm |
torch.mm |
torch.bmm |
torch.nn.functional.layer_norm |
Tensor.put_ |
torch.Tensor.index_put |
torch.Tensor.index_put_ |
torch_npu.npu_convolution_transpose |
torch_npu.npu_convolution |
torch_npu.npu_linear |
torch_npu.npu_deformable_conv2d |
torch.ops.aten.convolution_backward |
torch.nn.NLLLoss2d |
torch_npu.npu_ps_roi_pooling |
torch.nn.functional.fold |
torch.nn.functional.unfold |
torch.nn.functional.kl_div |
torch.nn.functional.multilabel_margin_loss |
torch.std_mean |
torch.std |
torch.var_mean |
torch.var |
torch.sum |
torch.nn.functional.interpolate |
torch.nn.functional.soft_margin_loss |
torch.trace |
torch.mv |
torch_npu.npu_group_norm_swish |