解决报错Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

在迁移学习BERT模型时,作者遇到了CPU与GPU冲突的问题。通过检查模型和输入是否都在GPU上,发现只将自定义的模型层移动到了GPU,而预训练模型仍在CPU。将预训练模型加载到GPU上后,问题得到解决,模型开始正常训练。
摘要由CSDN通过智能技术生成

问题:如题所示,在迁移学习bert模型时遇到上述问题。

查阅大量原因,发现均不符合我的问题,最基础的问题就是并未将所有tensor和model放入gpu中,导致cpu与gpu冲突,此时只需将model和所有输入均使用命令:next(model.parameters()).device查看model是否在GPU上,然后利用命令:xxx.device查看输出是否也在同一cuda上,xxx是输入的变量名称。
若冲突,则使用以下方法:

1.定义device,使用to(device):

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = model.to(device)
data = data.to(device)

2.使用cuda()方法:

model = model.cuda()
data = data.cuda()

然而,当我将定义的model和data均转换为cuda上运行,仍然报错,问题未解决。

峰回路转

突然发现,因为迁移学习我只加了fc层,bert做特征抽取,并未更新参数,此时我只将定义的model放入gpu上,加载的预训练模型并未放入cuda中
pretrained = BertModel.from_pretrained('bert-base-chinese').to(device)
将预训练模型加载至gpu上,问题解决,模型开始训练!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值