中断网络训练后,如何根据保存的权重文件继续训练及仍保持模型训练方法

本篇文章主要围绕解决深度神经网络模型在进行大型网络模型训练的时候,训练中断应该如何基于之前训练的模型继续训练,还有深度学习模型训练如何在中断服务器ssh连接之后,仍然能够继续保持训练。

问题一:ssh中断服务器连接,模型停止训练

针对如何解决远程服务器中断ssh连接停止模型训练问题,这里我们可以直接使用screen命令去解决。

方式1:

1.创建screen
screen -S [窗口名称]

新建窗口后可以在窗口里运行代码,即便断开连接也可以继续运行。

如果没有screen则需要安装,以下是安装命令:

sudo apt install screen
2.查看screen列表

如果忘了输入的窗口名是什么,输入以下命令可以查看存在的窗口有哪些。

screen -ls
3.进入screen窗口

输入以下命令可以重新进入运行窗口。

screen -r [窗口名称]
4.断开screen连接

但只能有一台机器进入窗口,如果有一台机器正查看screen窗口内容,其他机器将进入失败。必须将连接断开才能进入。

screen -d [窗口名称]
5.删除screen
screen -S [窗口名称] -X quit

方式2:

使用nohup命令

方法一中的screen命令并不是每个服务器都能使用的,如果你使用的服务器没有安装screen,而你又没有权限安装,那么可以使用nohup命令。

1.运行代码

首先进入到运行代码的目录中(python代码为例)

nohup python -u [python文件名] &

例如:

nohup python -u train.py &

一定要加上-u,不然在输出文件中看不到python的运行输出。

2.查看运行状态

步骤1执行之后代码就已经运行了,这时候就可以关上电脑走人了。如果想查看模型训练到哪里了则:

首先要重新进入到代码存放目录,输入以下命令(默认的输出文件是nohup.out)

tail -f nohup.out

这样就能实时查看代码的运行状态了。

问题二:关于中断训练后,如何根据保存的权重文件继续训练。

在进行网络训练时,特别是那些结构复杂、规模庞大的模型,通常需要较长时间才能获得令人满意的成果。如果从头开始训练,这个过程会更加漫长。在训练过程中,可能会遇到一些不可预见的意外,导致训练中断。因此,掌握如何利用已保存的权重文件,在训练中断后继续进行训练,是一项非常关键的技能。

1. 保存模型:
2. 加载模型

使用 torch.load函数 进行加载

model.load_state_dict(torch.load('权重文件所在的路径', map_location='要存放的设备'))
3. 保存权重文件

一般地,权重文件中需要保存:网络模型权重、优化器权重、以及epoch,便于继续训练

我一般会设置条件保存权重文件,权重文件相对占用的空间比较大,可以设置 每间隔几个epoch 保存一次。

if epoch % 5 == 0:
    checkpoint = {
         "model":model.state_dict(),
         "optimizer":optimizer.state_dict(),
         "epoch":epoch
      }         # 要保存的权重文件内容
 
    # 创建保存权重文件所在的文件夹
    if not os.path.isdir('./checkpoint'):
           os.makedirs("./checkpoint")
    # 使用 torch.save() 函数保存权重文件到指定的路径下
    torch.save(checkpoint, './checkpoint/ckpt_%d.pth' % int(epoch))
    # 或者写成:torch.save(checkpoint, './checkpoint/ckpt_{}.pth '.format(int(epoch)))
    # torch.save(checkpoint, f'./checkpoint/ckpt_{int(epoch)}.pth')

这样就可以在checkpoint文件夹下看到每间隔5个epoch保存的权重文件

4. 在断点处继续训练

注意 start_epoch 的设定,以保证再次训练时,epoch的次数匹配

start_epoch = 0      # strat_epoch的值一般默认为0,表示从头开始进行训练
# Resume = False     # 用于指示是否继续训练   取值为逻辑值: False:初次训练; True:继续训练
Resume = True
# 判断是否继续训练 
if Resume:
    path_checkpoint = "./checkpoint/ckpt_5.pth"  # 断点权重文件的所在路径
    checkpoint = torch.load(path_checkpoint)  # 加载保存的断点文件
 
    model.load_state_dict(checkpoint['model'])  # 加载模型可学习参数
 
    optimizer.load_state_dict(checkpoint['optimizer'])  # 加载优化器参数
    start_epoch = checkpoint['epoch']                   # 设置继续上次训练的epoch     

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stuomasi_xiaoxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值