模型的保存加载、模型微调、GPU使用及Pytorch常见报错

序列化与反序列化

序列化就是说内存中的某一个对象保存到硬盘当中,以二进制序列的形式存储下来,这就是一个序列化的过程。 而反序列化,就是将硬盘中存储的二进制的数,反序列化到内存当中,得到一个相应的对象,这样就可以再次使用这个模型了。

序列化和反序列化的目的就是将我们的模型长久的保存。

Pytorch中序列化和反序列化的方法:
torch.save(obj, f): obj表示对象, 也就是我们保存的数据,可以是模型,张量, dict等等, f表示输出的路径
torch.load(f, map_location): f表示文件的路径, map_location指定存放位置, CPU或者GPU, 这个参数挺重要,在使用GPU训练的时候再具体说。

第一种方法比较懒,保存整个的模型架构, 比较费时占内存, 第二种方法是只保留模型上的可学习参数, 等建立一个新的网络结构,然后放上这些参数即可,所以推荐使用第二种。 下面通过代码看看具体怎么使用:

只保留模型参数的话应该怎么再次使用

模型断点续训练

断点续训练技术就是当我们的模型训练的时间非常长,而训练到了中途出现了一些意外情况,比如断电了,当再次来电的时候,我们肯定是希望模型在中途的那个地方继续往下训练,这就需要我们在模型的训练过程中保存一些断点,这样发生意外之后,我们的模型可以从断点处继续训练而不是从头开始。 所以模型训练过程中设置checkpoint也是非常重要的。

那么就有一个问题了, 这个checkpoint里面需要保留哪些参数呢? 我们可以再次回忆模型训练的五个步骤: 数据 -> 模型 -> 损失函数 -> 优化器 -> 迭代训练。 在这五个步骤中,我们知道数据,损失函数这些是没法变得, 而在迭代训练过程中,我们模型里面的可学习参数, 优化器里的一些缓存是会变的, 所以我们需要保留这些东西。所以我们的checkpoint里面需要保存模型的数据,优化器的数据,还有迭代到了第几次。

下面通过人民币二分类的实验,模拟一个训练过程中的意外中断和恢复,看看怎么使用这个断点续训练:

发生了一个意外中断,但是我们设置了断点并且进行保存,那么我们下面就进行恢复, 从断点处进行训练,也就是上面的第6个epoch开始,我们看看怎么恢复断点训练:

所以在模型的训练过程当中, 以一定的间隔去保存我们的模型,保存断点,在断点里面不仅要保存模型的参数,还要保存优化器的参数。这样才可以在意外中断之后恢复训练。

GPU的使用

系统学习Pytorch笔记十: 模型的保存加载、模型微调、GPU使用及Pytorch常见报错

相关推荐
To_OC4 小时前
搞懂 Token 和 Embedding 后,我终于明白大模型是怎么 "读" 文字的
人工智能·llm·agent
兵慌码乱4 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot5 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
冬奇Lab6 小时前
每日一个开源项目(第139篇):Voicebox - 本地运行的开源 ElevenLabs 替代品
人工智能·开源·资讯
冬奇Lab6 小时前
Skill 系列(03):Skill 设计范式——5 个模式让输出从混沌到可预测
人工智能·开源·agent
IT_陈寒8 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
大模型真好玩10 小时前
什么是Loop Engineering?最通俗易懂的Loop Engineering核心概念
人工智能·agent·deepseek
叁两10 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js
顾林海10 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程