在服务器上通过运行模型的时候,时常会遇到两种问题:
- 模型太大需要的运行时间久,而电脑又不可以一直保持在开机状态,就算保持在开机状态也保不准哪一下会关掉导致重跑
- 在服务器上不间断训练时,发现自己的参数设置有误,需要将之前的训练断开,而不知道如何停止目前的训练
问题一的解决方法
解决这个问题的方法是可以通过nohup命令让模型继续在后台跑,自己电脑可以正常使用,只需要过段时间登上服务器查看nohup.out输出的结果。同时也可以用screen命令使服务器不间断的训练模型
nohup的使用可以参考这位博主的
screen命令可以参考这位博主的
对于screen命令本人不太熟悉,个人推荐使用nohup命令,在恢复训练时可以设置参数来保存模型权重文件,在恢复训练时使用之前的模型权重继续训练就好了
问题二的解决方法
linux可以使用kill命令来停止一个进程,但是对于kill命令的了解甚少,很容易出现杀错进程导致服务器崩溃的时候,可以参考kill命令的官方文档来了解kill的使用方法kill官方文档
也可以参考他人的文章Linux中的Kill命令
这里进行一下翻译,可能有翻译有误的地方,欢迎指出
KILL(1P) POSIX程序员手册 KILL(1P)
PROLOG
本手册页面是《POSIX程序员手册》的一部分。 该接口的
该接口的Linux实现可能有所不同(请查阅
关于Linux行为的细节,请查阅相应的Linux手册页)。
或者该接口可能没有在Linux上实现。
名称
kill - 终止进程或发出信号
例子
kill -s signal_name pid…
kill -l [exit_status]
kill [-signal_name] pid...
kill [-signal_number] pid...
描述
kill工具将向每个pid操作数指定的一个或多个进程发送一个信号。
发送一个信号,该信号由每个pid操作数指定。
对于每个pid操作数,kill工具应执行以下操作
相当于POSIX.1-2017中系统接口卷中定义的kill()函数。
接口卷中定义的kill()函数,该函数被调用时的参数如下
参数。
* pid操作数的值应被用作pid
参数。
* sig参数是由-s选项指定的值。
sig参数是由-s选项、-signal_number选项或-signal_name选项指定的值,或者由
SIGTERM,如果没有指定这些选项。
选项
kill工具应符合《POSIX.1-2017》中的基础定义卷。
POSIX.1-2017的基础定义卷,第12.2节,实用程序语法指南,除了
在最后两种 SYNOPSIS 形式中,-signal_number 和
-signal_name选项通常多于一个字符。
应支持以下选项。
-l (字母ell.) 写出信号_name的所有值
的所有值,如果没有给出操作数
给出。如果给了一个exit_status操作数,并且它是一个
的值(见第2.5.2节,特殊参数)。
2.5.2节,特殊参数和等待),对应于一个被信号终止的进程。
进程被一个信号所终止,那么与该信号对应的
与终止进程的信号相对应的signal_name
应被写入该进程。如果一个exit_status操作数
并且它是一个信号号的无符号十进制整数值,则应写出与终止进程的信号相对应的signal_name。
的无符号十进制整数值,则应写出signal_name(不含SIG前缀的符号性常数名称),它是一个信号号。
不含SIG前缀的常量名称,定义在POSIX.NET的基础定义卷中。
基础定义卷中定义的不含SIG前缀的符号常量名)对应于该信号。
应被写入该信号。否则,其结果
是未指定的。
-s signal_name
指定要发送的信号,使用<signal.h>头中定义的一个符号性
头中定义的符号名称之一。信号名称的值
signal_name的值应被识别为与大小写无关的
的值应以不分大小写的方式被识别,不含SIG前缀。此外,还应识别
符号名称0应被识别,代表
信号值为零。相应的信号应被
发送,而不是SIGTERM。
-signal_name
相当于-s signal_name。
-signal_number
指定一个非负的十进制整数,signal_number。
代表要代替SIGTERM的信号。
作为有效调用kill()时的sig参数。
整数值与sig
值的对应关系在下面的列表中显示。
除了下面列出的之外,指定任何signal_number的效果都是未定义的。
以外的任何signal_number的效果都是未定义的。
0 0
1 SIGHUP
2 SIGINT
3 SIGQUIT
6 SIGABRT
9 SIGKILL
14 SIGALRM
15 SIGTERM
如果第一个参数是一个负整数,它将被解释为
将被解释为-signal_number选项,而不是指定进程组的负pid操作数。
负pid操作数,指定一个进程组。
操作数
应支持以下操作数。
pid 以下之一。
1. 一个十进制的整数,指定一个要发出信号的进程或进程组。 进程或进程组
pid操作数的正值、负值和零值所选择的进程。
pid操作数的正值和负值所选择的进程应与
kill()函数的描述。如果指定了进程编号为0。
当前进程组中的所有进程将被
信号。关于pid为负数的影响。
见POSIX.1-2017的系统接口卷中定义的kill()函数。
接口卷中定义。如果第一个pid
操作数为负数,应在其前面加上"--"
以防止它被解释为一个选项。
2. 一个工作控制的工作ID(见POSIX.1-2017的基础定义卷)。
见POSIX.1-2017的基础定义卷,第3.204节,工作控制
作业ID),它标识了一个背景进程组
要发出信号。作业控制作业ID的符号
只适用于在当前 shell 执行环境中对 kill 的调用。
当前 shell 执行环境中的 kill 的调用;见第
2.12, Shell执行环境。
exit_status
一个十进制的整数,指定一个信号编号或被信号终止的进程的
被信号终止的进程的退出状态。
STDIN
不使用。
输入文件
没有。
环境变量顶部
以下环境变量将影响到以下程序的杀死。
LANG 为国际化的变量提供一个默认值
变量的默认值。(见POSIX.1-2017的基础
参见POSIX.1-2017的基础定义卷,第8.2节。
国际化变量的优先级
国际化变量的优先级,请参阅POSIX.1-2017的基础定义卷,第8.2节,国际化变量,用于确定
的优先级)。
LC_ALL 如果设置为一个非空的字符串值,将覆盖所有其他国际化变量的值。
覆盖所有其他国际化变量的值。
LC_CTYPE 确定对文本数据的字节序列进行解释的区域划分。
确定将文本数据的字节序列解释为字符的地域性(例如,单字节与
例如,单字节而不是多字节的
字节)。
LC_MESSAGES
决定应使用哪种地区设置来影响
诊断信息的格式和内容写到
标准错误。
NLSPATH 确定消息目录的位置,用于
处理LC_MESSAGES的消息目录。
非同步事件
默认情况下。
STDOUT
当没有指定-l选项时,标准输出将不被使用。
不会被使用。
当-l选项被指定时,每个信号的符号名称
应以下列格式写入。
"%s%c", <signal_name>, <separator>.
其中<signal_name>是大写的,没有SIG前缀。
而<分隔符>应是<换行符>或<空格>。
对于最后写入的信号,<separator>应是<newline>。
当-l选项和exit_status操作数都被指定时。
相应信号的符号名称应以下列格式写入
以下格式写入。
"%s/n", <signal_name>.
STDERR
标准错误应仅用于诊断信息。
OUTPUT FILES
无。
扩展描述
无。
退出状态
应返回以下退出值。
0 为每个pid找到至少一个匹配的进程
操作数至少找到一个匹配的进程,并且指定的信号被成功地
至少为一个匹配进程成功处理了指定的信号。
>0 发生了一个错误。
错误的后果
Default
The following sections are informative.
应用范围
进程号可以通过使用ps找到。
工作控制的工作 ID 符号不需要像预期的那样工作
当 kill 在它自己的实用程序执行环境中运行时,不需要像预期的那样工作。
环境中运行时,不需要像预期的那样工作。在以下任一例子中。
nohup kill %1 &
system("kill %1")。
kill 在不同的环境中运行并且不分享shell对工作编号的理解。
例子
任何一个命令。
kill -9 100 -165
kill -s kill 100 -165
kill -s KILL 100 -165
向进程ID为100的进程发送SIGKILL信号
和所有进程组ID为165的进程发送SIGKILL信号,前提是
进程有权限向指定的进程发送该信号。
的进程,并且它们存在。
POSIX.1-2017的系统接口卷和本卷的
POSIX.1-2017的系统接口卷和本卷不要求为任何
signal_names。 即使是-signal_number选项也为信号提供了象征性的
(尽管是数字)的信号名称。如果一个进程被一个信号终止了
的时候,它的退出状态会显示杀死它的信号。
但具体的数值并没有被指定。kill -l选项。
但是,可以用kill -l选项将十进制的信号号码和退出状态值映射到信号名称中。
状态值映射到一个信号的名称中。下面的例子
报告了一个被终止的作业的状态。
工作
stat=$?
如果 [ $stat -eq 0 ]
则
echo 工作成功完成。
elif [ $stat -gt 128 ]
则
echo 工作被信号SIG$(kill -l $stat)终止。
否则
echo 工作因错误代码$stat而终止。
fi
要向一个进程组(例如123)发送默认信号,一个应用程序应该使用类似以下的命令
应用程序应该使用类似于以下的命令。
kill -TERM -123
kill --123
理由是
-l选项起源于C语言的shell,并且在KornShell中也有实现。
在KornShell中实现。C shell的输出可以包括
因为在某些终端屏幕上,信号名称并不总是适合于
因为在某些终端屏幕上,信号名称并不总是适合在一行中出现。KornShell的输出
也包括实现定义的信号编号,并且被标准开发者认为太难了。
标准的开发者认为这对脚本来说太难了,无法方便地解析。
脚本方便地进行解析。指定的输出格式是
的目的不仅是为了适应历史上的C shell输出。
而且还允许在适合的系统上采用完全垂直或完全水平的
列表,这样做是合适的。
早期的建议是将SIGNULL这个名字作为一个信号名称,用来表示
信号0(由POSIX.1-2017的系统接口卷使用,用于
用于测试一个进程的存在而不向其发送信号)。
由于signal_name 0可以在这种情况下毫不含糊地使用。
SIGNULL已被删除。
早期的建议还要求符号性的signal_name在有无SIG前缀的情况下都要被识别。
无论是否有SIG前缀都能被识别。历史版本的
的历史版本没有为-l选项写入SIG前缀,也没有为
也不承认信号名的SIG前缀。 由于
应用的可移植性和易用性都不会因为要求这个扩展而得到改善,所以不再需要。
的可移植性和易用性,所以不再需要这个扩展。
为了避免初始负数参数的歧义
指定一个信号号或一个进程组。
POSIX.1-2008规定,在支持XSI选项的实现中,它总是被认为是前者。
支持XSI选项的实现,总是认为是前者。它还要求
符合要求的应用程序总是使用"--"选项
结束语,除非还指定了一个
选项被指定。
添加-s选项是为了回应国际上对以下问题的关注
提供某种形式的杀戮,以符合《实用语法指南》。
准则。
当kill在自己的系统中运行时,作业控制的作业ID符号不需要像预期的那样工作。
当kill在它自己的实用程序执行环境中运行时,作业控制的作业ID符号不需要像预期的那样工作。
环境中运行时,不需要使用作业控制作业ID符号。在以下任一例子中。
nohup kill %1 &
system("kill %1")。
中,kill 在不同的环境中运行,并且不
理解shell是如何管理其工作编号的。
未来的方向
没有。
参见
第2章,外壳命令语言,ps(1p),wait(1p)
POSIX.1-2017的基础定义卷,第3.204节,Job
控制作业ID,第8章,环境变量,第12.2节。
实用程序语法指南, signal.h(0p)
POSIX.1-2017的系统接口卷, kill(3p)
版权
本文部分内容是以电子版形式转载和复制的
本文部分内容以电子形式转载自IEEE Std 1003.1-2017, Standard for Information
技术标准–便携式操作系统接口(POSIX),The
Open Group Base Specifications Issue 7, 2018 Edition, Copyright
© 2018年由美国电气和电子工程师协会和开放集团版权所有。
工程师协会和开放集团版权所有。 如果此版本与
本版本与原始的IEEE和The Open Group标准之间存在差异。
如果本版本与原始的IEEE和开放集团标准之间有任何差异,原始的IEEE和开放集团标准是裁判文件。
标准是裁判文件。原始标准可在以下网址获得
在线获取:http://www.opengroup.org/unix/online.html 。
本页中出现的任何印刷或格式上的错误
很可能是在将源文件转换为手册格式的过程中出现的。
源文件转换为手册格式时出现的。要报告这些错误,请参见
https://www.kernel.org/doc/man-pages/reporting_bugs.html 。