通过适配apex使模型迁移后的代码可以在GPU上正常使用的经验方法

在做模型迁移时,会遇到源代码中使用的混合精度模块(pytorch版本1.6)与当前使用的pytorch版本(pytorch版本1.5)不匹配,造成程序无法正常运行。此时,需要将源码中使用的混合精度模块#import torch.cuda.amp as amp模块替换为from apex import amp 并将相应的源代码进行修改后即可正常使用,(参照:https://nvidia.github.io/apex/amp.html)例子如下如下:

# Declare model and optimizer as usual, with default (FP32) precision
model = torch.nn.Linear(D_in, D_out).cuda()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
# Allow Amp to perform casts as required by the opt_level
model, optimizer = amp.initialize(model, optimizer, opt_level="O1")...
# loss.backward() becomes:
with amp.scale_loss(loss, optimizer) as scaled_loss:    
    scaled_loss.backward()

举个真实代码部分修改的例子:

  # Perform the forward pass and compute the loss

       #with amp.autocast(enabled=cfg.TRAIN.MIXED_PRECISION):

            #preds = model(inputs)

            #loss = loss_fun(preds, labels_one_hot)

        preds = model(inputs)

        loss = loss_fun(preds, labels_one_hot)

        # Perform the backward pass and update the parameters

        optimizer.zero_grad()

        #scaler.scale(loss).backward()

        with amp.scale_loss(loss, optimizer) as scaled_loss:

              scaled_loss.backward()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值