服务器上运行代码会出现这样的问题,比如需要跑大模型这样几个小时或者几天的任务。肯定不可能人一直守着电脑,因为一旦电脑关闭或者网络中中断,服务器和电脑就会断开,一旦连接断开,任务就会中断,导致之前的任务就前功尽弃。所以就提出了nohup的用法,能够使任务直接在服务器上运行,即使任务调也无所谓。文本介绍了相关用法和介绍。
nohup用法介绍
用法很简单,照着去套模版就行
nohup commandtorun > output.log 2>&1 &
commandtorun:换成大家的具体命令
output.log:如果后台跑命令了是看不到任务日志的,这时候就需要把任务日志放到一个文件里,因为这样的话可以随时看任务日志,任务日志查询方法推荐使用tail -fn 50 output.log(实时动态查询日志的最后50行),后面会有例子去介绍。
照着模版就行了,其余的想知道什么意思直接百度吧,讲的更具体。
注意!!!
(1)commandtorun是自己的命令,我一般用的是python运行脚本,这里最好用全路径,不然可能会问题报错,都是之前踩的坑。举例讲解。
比如在路径/root/scratch/MusePose/下要运行脚本extract_dwpose_from_vid.py,使用方法为
# 表明用当前环境下的python执行当前脚本的当前路径下的/data/Batch4_all_video文件
python extract_dwpose_from_vid.py --video_root ./data/Batch4_all_video
但是使用nohup时最好就要说明白,用的是那个环境下的python,执行的是哪个环境下的脚本,以及是哪个路径下的文件。就用如下的方法,所以显得很长,但逻辑简单。
# python虚拟环境/root/miniconda3/envs/AA/bin/python
# 执行脚本 /root/scratch/MusePose/extract_dwpose_from_vid.py
# 执行文件 --video_root /root/scratch/Moore-AnimateAnyone/data/Batch4_all_video
# 日志存放位置 /root/scratch/Moore-AnimateAnyone/nohup_0818_Batch4.out
nohup /root/miniconda3/envs/AA/bin/python /root/scratch/MusePose/extract_dwpose_from_vid.py --video_root /root/scratch/Moore-AnimateAnyone/data/Batch4_all_video > /root/scratch/Moore-AnimateAnyone/nohup_0818_Batch4.out 2>&1 &
接下来直接上项目实例
一、准备实例的数据(和文章主体无关)
将h100服务器数据传到229下
h100的数据内容:
/root/scratch/Moore-AnimateAnyone/data/Batch4_all_video
/root/scratch/Moore-AnimateAnyone/data/Batch5_all_video
/root/scratch/Moore-AnimateAnyone/data/Batch6_all_video
需要传送至229的服务器位置路径:
/root/scratch/Moore-AnimateAnyone/data
二、使用nohup挂载任务
# 在终端分别写入三行命令
(1)
nohup /root/miniconda3/envs/AA/bin/python /root/scratch/MusePose/extract_dwpose_from_vid.py --video_root /root/scratch/Moore-AnimateAnyone/data/Batch4_all_video > /root/scratch/Moore-AnimateAnyone/nohup_0818_Batch4.out 2>&1 &
(2)
nohup /root/miniconda3/envs/AA/bin/python /root/scratch/MusePose/extract_dwpose_from_vid.py --video_root /root/scratch/Moore-AnimateAnyone/data/Batch5_all_video > /root/scratch/Moore-AnimateAnyone/nohup_0818_Batch5.out 2>&1 &
(3)
nohup /root/miniconda3/envs/AA/bin/python /root/scratch/MusePose/extract_dwpose_from_vid.py --video_root /root/scratch/Moore-AnimateAnyone/data/Batch6_all_video > /root/scratch/Moore-AnimateAnyone/nohup_0818_Batch6.out 2>&1 &
三、探查任务日志,查看数据运行情况
tail -fn 50 /root/scratch/Moore-AnimateAnyone/nohup_0818_train_result.out
# 返回结果
nohup: ignoring input
avaliable gpu ids: [0]
Num videos: 3 batch_size = 3
Loads checkpoint by local backend from path: ./pretrained_weights/dwpose/yolox_l_8x8_300e_coco.pth
Loads checkpoint by local backend from path: ./pretrained_weights/dwpose/dw-ll_ucoco_384.pth
Process 0/3 video
_Igl9_b2_gQ_segment_02.mp4 /root/scratch/Moore-AnimateAnyone/data/test/_Igl9_b2_gQ_segment_02.mp4 /root/scratch/Moore-AnimateAnyone/data/test
Process 1/3 video
_J3LCIS3Vz4_segment_00.mp4 /root/scratch/Moore-AnimateAnyone/data/test/_J3LCIS3Vz4_segment_00.mp4 /root/scratch/Moore-AnimateAnyone/data/test
Process 2/3 video
_J3LCIS3Vz4_segment_02.mp4 /root/scratch/Moore-AnimateAnyone/data/test/_J3LCIS3Vz4_segment_02.mp4 /root/scratch/Moore-AnimateAnyone/data/test
# 关闭日志
ctrl + c
四、提前终止后台的任务
# 查看和python相关的后台任务
ps aux | grep python
# 返回结果
root 866 0.0 0.0 30280 19452 ? Ss Aug05 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root 992 0.0 0.0 107064 21448 ? Ssl Aug05 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root 994452 0.0 0.0 4964 4224 ? S 01:59 0:00 /root/.vscode-server/extensions/ms-python.python-2024.12.3-linux-x64/python-env-tools/bin/pet server
root 996587 0.4 1.9 13849324 1879700 ? Sl 01:59 3:37 /root/.vscode-server/cli/servers/Stable-f1e16e1e6214d7c44d078b1f0607b2388f29d729/server/node /root/.vscode-server/extensions/ms-python.vscode-pylance-2024.8.1/dist/server.bundle.js --cancellationReceive=file:84bafefecf4e3c4e0f96a43440c7bf22651052b803 --experimentalserver --node-ipc --clientProcessId=994387
root 1093736 654 9.4 25272748 9344280 pts/6 Sl 17:03 21:02 /root/miniconda3/envs/AA/bin/python /root/scratch/MusePose/extract_dwpose_from_vid.py --video_root /root/scratch/Moore-AnimateAnyone/data/train_result
root 1094280 0.0 0.0 4040 2184 pts/6 S+ 17:07 0:00 grep --color=auto python
# 发现pid 1093736是刚才执行的任务,结束掉
kill -9 1093736
# 如果不放心可以再使用ps aux | grep python探查下任务,会发现就没有这个任务了