我可以创建一个反映数组任务ID的作业名称吗?

问题描述 投票:0回答:1

我在大学使用高性能研究云,它利用 Slurm 工作负载管理器(我对这种类型的计算非常不熟悉)。我已经弄清楚如何使用数组运行批处理作业,但我想知道是否有办法让作业名称反映数组任务 ID。

作为参考,我们之前使用过 MOAB,我之前的提交文件如下所示(并且会使用循环索引正确命名作业)

for i in {1..50}
do  
#submit a job and pass the jobid $i
qsub -v INPUT=$i -N jobname_${i} pbs_script.pbs
done

到目前为止我在 Slurm 中的尝试看起来像这样



#SBATCH --job-name=test$SLURM_ARRAY_TASK_ID
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --array=1-100

cd $SLURM_SUBMIT_DIR

module load r/4.3.1 

Rscript test.R

这段代码可以工作,我可以很好地运行我的 R 脚本的 100 个不同作业,但作业名称并不反映任务 ID(它们都只是字面意思是“test$SLURM_ARRAY_TASK_ID”)。我没有在网上找到任何类型的解决方案(如果是)基本上,当我提交这个作业并且它变成 100 个作业时,我希望队列中的每个作业名称都能准确反映其任务 ID 号,即 test1、test2 等...

提前谢谢您!

slurm
1个回答
0
投票

不幸的是,这是不可能的,因为提交数组作业时只创建了一个作业记录。

根据 Slurm 文档:

当一个作业数组提交到 Slurm 时,只有一条作业记录 创建的。仅当以下状态时才会创建额外的作业记录 作业数组中的任务发生变化,通常是在分配任务时 使用 scontrol 命令修改资源或其状态。经过 默认情况下,squeue 命令将报告所有关联的任务 一行上只有一条作业记录,并使用正则表达式 指示“array_task_id”值,如下所示。

尽管如此,当提交作业数组时,您可以使用 squeue 命令查看各个作业步骤状态。例如,

$ sbatch --array=1-4 -J array ./sleepme 86400
Submitted batch job 21845

$ squeue
 JOBID   PARTITION     NAME     USER  ST  TIME NODES NODELIST
 21845_1    canopo    array    david  R  0:13  1     dario
 21845_2    canopo    array    david  R  0:13  1     dario
 21845_3    canopo    array    david  R  0:13  1     dario
 21845_4    canopo    array    david  R  0:13  1     dario

如果您查看

JOBID
,它将显示阵列 ID 以及作业 ID(格式:JOBID_TASKID)。

但是,如果您想查看不同的作业名称,则需要在循环中以作业名称作为参数调用

job script
。例如,考虑伪代码:

for index in 1 2 3 4 5 .. N
do
   sbatch -J test_$index job_script.sh #will set test_1 as first jobname
done
© www.soinside.com 2019 - 2024. All rights reserved.