仕事
このコマンドを使用して、リモート・システムで開始されたM個のジョブ/コマンドのリストから、srun
すべてのM個のジョブが開始されるまで、常にN個のジョブが実行されているか要求されていることを確認します(N <= M)。
やる気
(他の提案につながる可能性があるため含まれています)私は現在、2段階のプロセスで実行されている一連のシミュレーションを実行する必要があります。両方のステップは、MSTR_FILE
シミュレーションに関する基本情報を含めることに基づいています。
- ステップ1:次の内容に基づいて
MSTR_FILE
シミュレーションに必要なディレクトリとファイルを作成します。 - ステップ2:これで、コンテンツに基づいて
MSTR_FILE
ファイル内の各項目の操作を開始します。
2番目のステップの基本ループは次のとおりです。
for d in $(cat $MSTR_FILE | cut -d " " -f 1);do
cd $d
srun -p My_Queue $(cat sim_command_file)&
cd ..
done
これはうまくいきますが、私のシミュレーション設定(MSTR_FILE
)は50〜100個、多分それよりも多くの項目で終わります。これらのループはリスト全体を繰り返し、リスト自体が終了するまでリソースを取得します。共有リソース環境では、これは実際には理想的ではありません。 :)
私の仕事ソリューションの一部
wait
デフォルトでは、一定数の操作が完了するまでスクリプトを変更しました。スクリプトの関連部分は次のとおりです。
N=10
swp_list=($(cat $MSTR_FILE | cut -d " " -f 1))
cnt=0
list_size=$(#{swp_list[@]})
while [ $cnt -lt $list_size ];do
for i in $(seq 0 $N);do
ix=$(($cnt+$i))
if [ $ix -lt $list_size ];then
d=${swp_list[ix]}
cd $d
srun -p My_Queue $(cat sim_command_file)&
cd ..
fi
done
wait
((cnt+=$N))
done
私がテストしたところ、N
タスクは一度に実行されるため、このアプローチはうまく機能しているようです。しかし、ここには深刻な欠点もあります。要求されたすべてのジョブがN
同時に開始されないことがあります。これらのタスクの一部は、ノードが割り当てられるまで長い時間を待ちます。そうでない場合でも、一部のシミュレーションタスクは他のシミュレーションタスクよりも時間がかかる場合があり、さらに時間がかかる場合があります。
部分的に動作する私の解決策は何も解決しません。ただN
パケットのすべての操作が完了するのを待ちます。しかし、時間が無駄にならないように、queue
常に次の作業でいっぱいになっているものがあればいいです。MSTR_FILE