我有两个使用GPU和训练ML模型的脚本。我想在入睡前启动它们,以便它们在晚上工作,并希望在早晨看到一些结果。
但是由于GPU内存有限,我想以串行方式而不是并行方式运行它们。
我可以这样做python train_v1.py && python train_v2.py
; 但是,假设我开始训练train_v1
。同时,由于培训需要很长时间,因此我开始并完成了第二个脚本的实现train_v2.py
,我想在python train_v1.py
完成后自动运行它。
我该如何实现?谢谢你。
这是一种不涉及循环和检查其他进程是否仍然存在的方法,或者不train_v1.py
以通常的方式进行调用:
$ python train_v1.py
^Z
[1]+ Stopped python train_v1.py
$ % && python train_v2.py
该^Z
是我按下Ctrl+ Z,而正在运行的进程睡眠train_v1.py
通过发送一个SIGTSTP
信号。然后,我告诉shell使用唤醒它%
,并使用它作为命令,并&& python train_v2.py
在末尾添加。这使得它的行为就像您python train_v1.py && python train_v2.py
从一开始就做的一样。
相反%
,您也可以使用fg
。这是同一件事。如果您想了解有关Shell的这些类型的更多信息,可以在bash的联机帮助页的“ JOB CONTROL”部分中对其进行阅读。
正如jamesdlin在评论中指出的那样,如果您尝试继续添加模式train_v3.py
(例如在v2开始之前),则会发现您无法执行以下操作:
$ % && python train_v2.py
^Z
[1]+ Stopped python train_v1.py
只有train_v1.py
被停止,因为train_v2.py
还没有开始,你不能停止/暂停/睡眠的东西,甚至还没有开始。
$ % && python train_v3.py
将导致与
python train_v1.py && python train_v3.py
因为它%
对应于上一个暂停的进程。与其尝试添加v3
类似内容,不如使用历史记录:
$ !! && python train_v3.py
% && python train_v2.py && python train_v3.py
可以像上面那样进行历史扩展,或者使用键盘绑定(如up)调用最后一个命令,然后在末尾添加v3。
$ % && python train_v2.py && python train_v3.py
可以重复进行此操作以将更多内容添加到管道中。
$ !! && python train_v3.py
% && python train_v2.py && python train_v3.py
^Z
[1]+ Stopped python train_v1.py
$ !! && python train_v4.py
% && python train_v2.py && python train_v3.py && python train_v4.py
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句