如何监视正在运行的屏幕会话并在上一个会话结束后开始新的会话?

要运行我的神经网络训练,我使用以下脚本开始不同的训练配置:

NNtrain.sh

#!/bin/bash
echo "Start 1st screen"
screen -dmS NN48001 bash -c '../NNrun.sh NN48001 hyperparam_48_001.json 0 0.5'
echo "Start 2nd screen"
screen -dmS NN480001 bash -c '../NNrun.sh NN480001 hyperparam_48_0001.json 0 0.5'
echo "Start 3rd screen"
screen -dmS NN4800001 bash -c '../NNrun.sh NN4800001 hyperparam_48_00001.json 1 0.5'
echo "Start 4th screen"
screen -dmS NN48000001 bash -c '../NNrun.sh NN48000001 hyperparam_48_000001.json 2 0.5'

NNrun.sh

#!/bin/bash
if [ -f "/opt/anaconda/etc/profile.d/conda.sh" ]; then
    . "/opt/anaconda/etc/profile.d/conda.sh"
    CONDA_CHANGEPS1=false conda activate PyTorchNN
    echo "activated conda env"
fi
echo $1
python main_broad_FEA.py --hyperparam-json $2 --GPU $3 --varstop $4

现在,我的计算机中装有3个GPU,并希望对更多的网络进行批量培训,即在上一个网络结束后开始下一个培训。因此,我想监视哪些屏幕会话已关闭(即返回),然后使用刚刚运行的屏幕会话使用的GPU来启动新的屏幕会话。

如何检查是否返回了哪个屏幕会话,以及哪个屏幕会话返回,以便可以使用bash脚本启动下一个屏幕会话?

(注意:如果在bash脚本中执行此操作不必要地更加复杂,请随时提出一个合适的替代方法。)

CHEN123NBA 回答:如何监视正在运行的屏幕会话并在上一个会话结束后开始新的会话?

当我在上面提出我的问题时,我使问题变得过于复杂。

我最后使用的解决方案是在我的NNrun.sh脚本的末尾添加touch "$3.GPUFREE"。 NNrun.sh脚本终止时,这将创建一个空文件“ .GPUFREE”。最后,我可以运行一个循环,检查是否从NNtrain.sh中创建了“ .GPUFREE”文件,从而知道释放了哪个GPU,并准备接受其他作业。

,
data[data == 'Sí'] <- 'Yes'
本文链接:https://www.f2er.com/3113887.html

大家都在问