文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

pytorch模型保存与加载问题怎么解决

2023-07-04 12:53

关注

这篇“pytorch模型保存与加载问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pytorch模型保存与加载问题怎么解决”文章吧。

一、torch中模型保存和加载的方式

1、模型参数和模型结构保存和加载

torch.save(model,path)torch.load(path)

2、只保存模型的参数和加载——这种方式比较安全,但是比较稍微麻烦一点点

torch.save(model.state_dict(),path)model_state_dic = torch.load(path)model.load_state_dic(model_state_dic)

二、torch中模型保存和加载出现的问题

1、单卡模型下保存模型结构和参数后加载出现的问题

模型保存的时候会把模型结构定义文件路径记录下来,加载的时候就会根据路径解析它然后装载参数;当把模型定义文件路径修改以后,使用torch.load(path)就会报错。

pytorch模型保存与加载问题怎么解决

pytorch模型保存与加载问题怎么解决

pytorch模型保存与加载问题怎么解决

把model文件夹修改为models后,再加载就会报错。

import torchfrom model.TextRNN import TextRNN load_model = torch.load('experiment_model_save/textRNN.bin')print('load_model',load_model)

这种保存完整模型结构和参数的方式,一定不要改动模型定义文件路径

2、多卡机器单卡训练模型保存后在单卡机器上加载会报错

在多卡机器上有多张显卡0号开始,现在模型在n>=1上的显卡训练保存后,拷贝在单卡机器上加载

import torchfrom model.TextRNN import TextRNN load_model = torch.load('experiment_model_save/textRNN_cuda_1.bin')print('load_model',load_model)

pytorch模型保存与加载问题怎么解决

会出现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'))

3、多卡训练模型保存模型结构和参数后加载出现的问题

当用多GPU同时训练模型之后,不管是采用模型结构和参数一起保存还是单独保存模型参数,然后在单卡下加载都会出现问题

a、模型结构和参数一起保然后在加载

pytorch模型保存与加载问题怎么解决

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不一样

pytorch模型保存与加载问题怎么解决

原因是多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)

包装前的模型结构:

pytorch模型保存与加载问题怎么解决

包装后的模型

pytorch模型保存与加载问题怎么解决

在外层多了DistributedDataParallel以及module,所以才会导致在单卡环境下加载模型权重的时候出现权重的keys不一致。

三、正确的保存模型和加载的方法

    if gpu_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模型保存与加载问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯