当前位置:   article > 正文

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

cpu and cuda:0!

问题:如题所示,在迁移学习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)
  • 1
  • 2
  • 3

2.使用cuda()方法:

model = model.cuda()
data = data.cuda()
  • 1
  • 2

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

峰回路转

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/149507
推荐阅读
相关标签
  

闽ICP备14008679号