问题:如题所示,在迁移学习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上,问题解决,模型开始训练!