torch.npu.enable_deterministic_with_backward
功能描述
开启“确定性”功能。确定性算法是指在模型的前向传播过程中,每次输入相同,输出也相同。确定性算法可以避免模型在每次前向传播时产生的小随机误差累积,在需要重复测试或比较模型性能时非常有用。
接口原型
torch.npu.enable_deterministic_with_backward(tensor) -> Tensor
参数说明
tensor:该接口为透明传输接口,不做数据处理,类型支持和数据格式为PyTorch在各芯片上可支持的数据类型和数据格式,无接口级别的约束。
输出说明
一个Tensor类型的输出,代表enable_deterministic_with_backward的计算结果。
约束说明
- 入参tensor需要是训练网络中可以传递下去和整网的output有关联的tensor变量,否则无法进行反向设置确定性能力。
- 不支持图模式。
支持的PyTorch版本
- PyTorch 2.3
- PyTorch 2.2
- PyTorch 2.1
支持的型号
- Atlas A2训练系列产品/Atlas 800I A2推理产品
调用示例
def test_enable_to_disable_deterministic_algorithms(self):
target_dtype = torch.float32
class DeterministicModel(torch.nn.Module):
def __init__(self):
super().__init__()
def forward(self, x, y):
x = x + 1
x = torch.npu.enable_deterministic_with_backward(x)
add4 = x + y
add1 = sum(add4)
add1 = torch.npu.disable_deterministic_with_backward(add1)
add6 = add1 + add1
return add6
device = torch.device("npu:0")
model = DeterministicModel()
npu_mode = model.to(device)
ins1 = torch.ones((2, 2), requires_grad=True).to(target_dtype).npu()
ins2 = torch.ones((2, 2), requires_grad=True).to(target_dtype).npu()
output_data = npu_mode(ins1, ins2)
self.assertEqual(False, torch.are_deterministic_algorithms_enabled())
loss_fn = nn.MSELoss()
target_data = torch.randn((1, 2), requires_grad=True).to(target_dtype).npu()
loss = loss_fn(output_data, target_data)
loss.backward()
self.assertEqual(False, torch.are_deterministic_algorithms_enabled())
父主题: torch_npu