这篇“pytorch模型保存与加载问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pytorch模型保存与加载问题怎么解决”文章吧。
torch.save(model,path) torch.load(path)
torch.save(model.state_dict(),path) model_state_dic=torch.load(path) model.load_state_dic(model_state_dic)
模型保存的时候会把模型结构定义文件路径记录下来,加载的时候就会根据路径解析它然后装载参数;当把模型定义文件路径修改以后,使用torch.load(path)就会报错。把model文件夹修改为models后,再加载就会报错。
importtorch frommodel.TextRNNimportTextRNN load_model=torch.load('experiment_model_save/textRNN.bin') print('load_model',load_model)
这种保存完整模型结构和参数的方式,一定不要改动模型定义文件路径。在多卡机器上有多张显卡0号开始,现在模型在n>=1上的显卡训练保存后,拷贝在单卡机器上加载
importtorch frommodel.TextRNNimportTextRNN load_model=torch.load('experiment_model_save/textRNN_cuda_1.bin') print('load_model',load_model)
会出现cuda device不匹配的问题——你保存的模代码段 小部件型是使用的cuda1,那么采用torch.load()打开的时候,会默认的去寻找cuda1,然后把模型加载到该设备上。这个时候可以直接使用map_location来解决,把模型加载到CPU上即可。
load_model=torch.load('experiment_model_save/textRNN_cuda_1.bin',map_location=torch.device('cpu'))
当用多GPU同时训练模型之后,不管是采用模型结构和参数一起保存还是单独保存模型参数,然后在单卡下加载都会出现问题a、模型结构和参数一起保然后在加载
torch.distributed.init_process_group(backend='nccl')
模型训练的时候采用上述多进程的方式,所以你在加载的时候也要声明,不然就会报错。b、单独保存模型参数
model=Transformer(num_encoder_layers=6,num_decoder_layers=6) state_dict=torch.load(免费云主机域名'train_model/clip/experiment.pt') model.load_state_dict(state_dict)
同样会出现问题,不过这里出现的问题是参数字典的key和模型定义的key不一样原因是多GPU训练下,使用分布式训练的时候会给模型进行一个包装,代码如下:
model=torch.load('train_model/clip/Vtransformers_bert_6_layers_encoder_clip.bin') print(model) model.cuda(args.local_rank) 。。。。。。 model=nn.parallel.DistributedDataParallel(model,device_ids=[args.local_rank],find_unused_parameters=True) print('model',model)
包装前的模型结构:包装后的模型在外层多了DistributedDataParallel以及module,所以才会导致在单卡环境下加载模型权重的时候出现权重的keys不一致。
ifgpu_count>1: torch.save(model.module.state_dict(),save_path) else: torch.save(model.state_dict(),save_path) model=Transformer(num_encoder_layers=6,num_decoder_layers=6) state_dict=torch.load(save_path) model.load_state_dict(state_dict)
这样就是比较好的范式,加载不会出错。以上就是关于“pytorch模型保存与加载问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注百云主机行业资讯频道。
相关推荐: WPF怎么在VisualTree上增加Visual
这篇“WPF怎么在VisualTree上增加Visual”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“WPF怎么在VisualTree上增加Vi…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。