本自动迁移样例使用APEX混合精度模块开启混合精度。
import torch ...... import torch_npu from apex import amp from torch_npu.contrib import transfer_to_npu
...... criterion = nn.CrossEntropyLoss().to(device) optimizer = torch.optim.SGD(model.parameters(), args.lr, momentum=args.momentum, weight_decay=args.weight_decay) model, optimizer = amp.initialize(model, optimizer, combine_grad=True)
原代码如下:
...... # compute gradient and do SGD step optimizer.zero_grad() loss.backward() optimizer.step()
修改后代码如下:
...... # compute gradient and do SGD step optimizer.zero_grad() with amp.scale_loss(loss, optimizer) as scaled_loss: scaled_loss.backward() optimizer.step()