使程序在Linux服务器后台运行

本文介绍了如何使用nohup命令运行脚本并管理其输出,以及在遇到GPU性能瓶颈时如何通过调整DataLoader的num_workers和torch.set_num_threads来优化多线程处理。还提到在Docker中考虑shm设置的重要性。
摘要由CSDN通过智能技术生成

使用命令:nohup bash scripts/train.sh > myout.txt 2>&1 &

效果如下:其中962278是进程PID,注意代码运行的PID与此不同,所以想中断程序运行需要查看当前用户所有进程PID来找。上述命令的意思nohup是将程序挂起,myout.txt是程序输出。
在这里插入图片描述

运行中断方法

首先查看当前用户的所有进程,使用命令 ps ux(ps aux是查看所有用户进程)。效果如下:
注意:
可以看出962278并不是代码运行进程(是使用.sh脚本来运行python的进程),实际跑代码PID是962280
但是如果想程序停止必须先杀死962278因为脚本不停,代码就算杀死了,还会继续重新运行(实验过确实如此)。
下图中982280下面还有16个进程(982280是主进程,下面16个线程),是因为代码里numworks=16,这里杀死982280后都会一起杀死了。

在这里插入图片描述
使用命令kill -9 PID来杀死进程,注意:先杀死脚本进程,再杀主要程序进程,下面16个线程自动杀死。效果:

在这里插入图片描述
在这里插入图片描述
补充:
在train.py代码中设置torch.set_num_threads(1)不影响numwork的数量,也就是还是16个线程处理。
torch.set_num_threads(1)和numworks关系可以参考:

DataLoader 的 num_workers 指定使用多少个并行工作器来加载数据并运行所有转换。如果您正在加载大图像或进行昂贵的转换,那么您可能会遇到 GPU 处理数据速度很快而 DataLoader 太慢而无法持续为 GPU 提供数据的情况。在这种情况下,设置更多的 worker 会有所帮助。我通常会增加这个数字,直到我的 epoch 步长足够快为止。另外,附带提示:如果您使用的是 docker,通常您希望将 shm 设置为 GB 中 1 到 2 倍的工作人员数量,以用于像 ImageNet 这样的大型数据集。

torch.set_num_threads 指定用于并行化 CPU 绑定(bind)张量操作的线程数。如果您在大多数张量操作中使用 GPU,那么此设置并不重要。但是,如果你有张量,你保留在 cpu 上并且你正在对它们进行大量操作,那么你可能会从设置中受益。不幸的是,Pytorch 文档没有指定哪些操作将从中受益,因此请查看您的 CPU 利用率并调整此数字,直到您可以将其最大化。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值