[英]Running slurm script with multiple nodes, launch job steps with 1 task
我正在嘗試使用批處理腳本啟動大量作業步驟。 不同的步驟可以是完全不同的程序,並且每個步驟只需要一個CPU。 首先,我嘗試使用--multi-prog
參數進行srun
。 不幸的是,當以這種方式使用分配給我的作業的所有CPU時,性能會大幅降低。 運行時間幾乎增加到序列化值。 通過訂閱我可以改善這一點。 我在網上找不到關於這個問題的任何內容,所以我認為它是我正在使用的集群的配置問題。
所以我試着走另一條路。 我實現了以下腳本(通過sbatch my_script.slurm
啟動):
#!/bin/bash
#SBATCH -o $HOME/slurm/slurm_out/%j.%N.out
#SBATCH --error=$HOME/slurm/slurm_out/%j.%N.err_out
#SBATCH --get-user-env
#SBATCH -J test
#SBATCH -D $HOME/slurm
#SBATCH --export=NONE
#SBATCH --ntasks=48
NR_PROCS=$(($SLURM_NTASKS))
for PROC in $(seq 0 $(($NR_PROCS-1)));
do
#My call looks like this:
#srun --exclusive -n1 bash $PROJECT/call_shells/call_"$PROC".sh &
srun --exclusive -n1 hostname &
pids[${PROC}]=$! #Save PID of this background process
done
for pid in ${pids[*]};
do
wait ${pid} #Wait on all PIDs, this returns 0 if ANY process fails
done
我知道,在我的案例中並不真正需要 - --exclusive
論證。 調用的shell腳本包含不同的二進制文件及其參數。 我的腳本的剩余部分依賴於所有進程已完成因此wait
的事實。 我更改了調用行,使其成為一個最小的工作示例。
起初,這似乎是解決方案。 不幸的是,當增加我的作業分配中使用的節點數量時(例如,通過將--ntasks
增加到大於我的集群中每個節點的CPU數量的數量),腳本將不再按預期工作,返回
srun: Warning: can't run 1 processes on 2 nodes, setting nnodes to 1
並繼續只使用一個節點(在我的情況下是48個CPU,它們像以前一樣快速完成作業步驟,其他節點上的所有進程隨后被殺死)。
這似乎是預期的行為,但我無法理解它。 為什么給定分配中的每個作業步驟都需要包含與分配中包含的節點數相等的最小任務數。 我通常根本不關心我的分配中使用的節點數量。
如何實現我的批處理腳本,以便可以在多個節點上可靠地使用它?
找到了! slurm的命名法和許多命令行選項使我感到困惑。 解決方案由
#!/bin/bash
#SBATCH -o $HOME/slurm/slurm_out/%j.%N.out
#SBATCH --error=$HOME/slurm/slurm_out/%j.%N.err_out
#SBATCH --get-user-env
#SBATCH -J test
#SBATCH -D $HOME/slurm
#SBATCH --export=NONE
#SBATCH --ntasks=48
NR_PROCS=$(($SLURM_NTASKS))
for PROC in $(seq 0 $(($NR_PROCS-1)));
do
#My call looks like this:
#srun --exclusive -N1 -n1 bash $PROJECT/call_shells/call_"$PROC".sh &
srun --exclusive -N1 -n1 hostname &
pids[${PROC}]=$! #Save PID of this background process
done
for pid in ${pids[*]};
do
wait ${pid} #Wait on all PIDs, this returns 0 if ANY process fails
done
這指定僅在包含單個任務的一個節點上運行作業。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.