bert pytorch实现时踩的坑

1.BrokenPipeError: [Errno 32] Broken pipe

DataLoader是单线程,好像是个bug?
解决方法:修改num_workers=0,或者不设定num_workers的值,默认就会为0

if __name__ == "__main__":
    train_dataloader = DataLoader(
        dataset=dataset,
        batch_size=32,
        shuffle=True,
        #num_workers=8
    )

2.bert内存溢出

解决方法:减小batch的值

3.AssertionError: Torch not compiled with CUDA enabled

根本原因是torch和cuda不匹配

解决方法1.
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)
代码其余地方出现.cuda()的地方改成.to(device)就可以在无gpu的环境中运行了。

#这个方法是改成在CPU下运行,跳过了这个问题

解决方法2:
在cmd输入python切换到python模式后,输入
import torch
print(torch.__version__)
print(torch.cuda.is_available())
》》True     #代表可以使用GPU
》》False    #不能使用
在CMD和pycharm都试一下,我就是CMD可以用,但是pycharm老是报错,最后发现是pycharm里环境配错了。

4.(unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escap

转义字符问题

解决方法:path=r' 路径 '

5.RuntimeError: Error(s) in loading state_dict for BertClassifier

查看了别人的解决方法说是模型不匹配
可能下载错了pytorch_model.bin
更换了一个确实可以使用了

这里附上一个别人的项目代码:Chinese Word Segmentation项目里提供了pytorch版本的model.bin网盘资源,救人于水火!

x=x.to(device)

这行代码的意思是将tensor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上进行,后续产生的衍生变量也在GPU上(CPU同理)
不仅模型和数据,产生的中间变量也得device到GPU上

你可能感兴趣的:(python)