关于使用torch.load()出现invalid argument错误的解决办法

在使用pytorch和torchtext做NLP相关工作时,发现使用

vectors = torchtext.vocab.Vectors(name='D:/data/glove.840B.300d.txt',cache='cache/')

来构建向量表时,glove.6B.200d可以顺利完成,且第二次运行也可以顺利读取cache,但是使用glove.840B.300第一次能够顺利运行,第二次读取cache会出现invalid argument错误。查询pytorch的issue发现,在windows上,pytorch会在读取2个G以上的模型文件(.pt)时报这个错误。解决办法如下:
在torch.serialization这个python文件下的如下代码块:

    offset = f.tell() if f_should_read_directly else None
    for key in deserialized_storage_keys:
        assert key in deserialized_objects
        deserialized_objects[key]._set_from_file(f, offset, f_should_read_directly)
        if offset is not None:
            offset = f.tell()

前添加一句

    f_should_read_directly = False

即可顺利读取。特别地,经过测试,pytorch在linux系统上是不会报这个错的,可能是与windows的适配问题。

你可能感兴趣的:(NLP,issue,NLP,Pytorch,Python,自然语言处理)