slurm 似乎启动了比请求更多的任务
slurm seems to be launching more tasks than requested
我无法理解 SLURM 从 sbatch
脚本启动作业的方式。似乎 SLURM 忽略了 --ntasks
参数并立即启动我的批处理文件中的所有 srun
任务。这是一个示例,对 Whosebug 上的 this answer 中的代码进行了轻微修改:
$ salloc --ntasks=1 --ntasks-per-core=1
salloc: Granted job allocation 1172
$ srun -n 1 sleep 10 & time srun -n 1 echo ok
[1] 5023
srun: cluster configuration lacks support for cpu binding
srun: cluster configuration lacks support for cpu binding
ok
real 0m0.052s
user 0m0.004s
sys 0m0.012s
所以在我的设置中 srun echo
命令立即 运行,而我希望它在 srun sleep 10
命令完成后变为 运行。
我正在使用 SLURM 2.6.5 在我的 8 核个人工作站上安排和提交作业,并且我自己安装了它 - 所以完全有可能配置很糟糕。以下是 slurm.conf 文件中的一些相关部分:
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_CPU
# COMPUTE NODES
NodeName=Tom NodeAddr=localhost CPUs=7 RealMemory=28100 State=UNKNOWN
PartitionName=Tom Nodes=Tom Default=YES MaxTime=INFINITE State=UP
这是 printenv | grep SLURM
在 运行ning salloc --ntasks=1
之后的输出
SLURM_NODELIST=Tom
SLURM_NODE_ALIASES=(null)
SLURM_MEM_PER_CPU=4100
SLURM_NNODES=1
SLURM_JOBID=1185
SLURM_NTASKS=1
SLURM_TASKS_PER_NODE=1
SLURM_JOB_ID=1185
SLURM_SUBMIT_DIR=/home/tom/
SLURM_NPROCS=1
SLURM_JOB_NODELIST=Tom
SLURM_JOB_CPUS_PER_NODE=1
SLURM_SUBMIT_HOST=Tom
SLURM_JOB_NUM_NODES=1
如有任何意见或建议,我将不胜感激。如果需要更多信息,请告诉我。
感谢阅读,
汤姆
玩多了更新
我已经取得了一些进步,但我仍然没有得到我想要的行为。
如果我使用 --exclusive
我可以获得 echo
步骤来等待 sleep
步骤:
salloc --ntasks=1
salloc: Granted job allocation 2387
srun -n 1 --exclusive sleep 10 & time srun -n 1 --exclusive echo ok
[1] 16602
ok
[1]+ Done srun -n 1 --exclusive sleep 10
real 0m10.094s
user 0m0.017s
sys 0m0.037s
和
salloc --ntasks=2
salloc: Granted job allocation 2388
srun -n 1 --exclusive sleep 10 & time srun -n 1 --exclusive echo ok
[1] 16683
ok
real 0m0.067s
user 0m0.005s
sys 0m0.020s
但是我仍然不知道如何正确地执行此操作,如果我运行宁一个多步作业,其中每个步骤都需要多个处理器,例如
salloc --ntasks=6
salloc: Granted job allocation 2389
srun -n 2 --exclusive stress -c 2 &
srun -n 2 --exclusive stress -c 2 &
srun -n 2 --exclusive stress -c 2 &
将给我 12 个 stress
进程,
salloc --ntasks=6
salloc: Granted job allocation 2390
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
那么如果我想让我的sbatch
脚本占用6个处理器,一次启动三个步骤,每个步骤2个处理器,我该怎么办?使用 srun --exclusive -n 1 -c 2 stress -c 2
是否正确?
我认为缺少的部分是 --exclusive
和 --cpus-per-task
参数。我得到了我正在寻找的行为
salloc --ntasks=6
salloc: Granted job allocation 2457
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
这将启动 6 个 stress
进程;第 4 个 stress
命令在最后等待轮到它。
这可能是显而易见的,但需要一段时间才能弄清楚!
我无法理解 SLURM 从 sbatch
脚本启动作业的方式。似乎 SLURM 忽略了 --ntasks
参数并立即启动我的批处理文件中的所有 srun
任务。这是一个示例,对 Whosebug 上的 this answer 中的代码进行了轻微修改:
$ salloc --ntasks=1 --ntasks-per-core=1
salloc: Granted job allocation 1172
$ srun -n 1 sleep 10 & time srun -n 1 echo ok
[1] 5023
srun: cluster configuration lacks support for cpu binding
srun: cluster configuration lacks support for cpu binding
ok
real 0m0.052s
user 0m0.004s
sys 0m0.012s
所以在我的设置中 srun echo
命令立即 运行,而我希望它在 srun sleep 10
命令完成后变为 运行。
我正在使用 SLURM 2.6.5 在我的 8 核个人工作站上安排和提交作业,并且我自己安装了它 - 所以完全有可能配置很糟糕。以下是 slurm.conf 文件中的一些相关部分:
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_CPU
# COMPUTE NODES
NodeName=Tom NodeAddr=localhost CPUs=7 RealMemory=28100 State=UNKNOWN
PartitionName=Tom Nodes=Tom Default=YES MaxTime=INFINITE State=UP
这是 printenv | grep SLURM
在 运行ning salloc --ntasks=1
SLURM_NODELIST=Tom
SLURM_NODE_ALIASES=(null)
SLURM_MEM_PER_CPU=4100
SLURM_NNODES=1
SLURM_JOBID=1185
SLURM_NTASKS=1
SLURM_TASKS_PER_NODE=1
SLURM_JOB_ID=1185
SLURM_SUBMIT_DIR=/home/tom/
SLURM_NPROCS=1
SLURM_JOB_NODELIST=Tom
SLURM_JOB_CPUS_PER_NODE=1
SLURM_SUBMIT_HOST=Tom
SLURM_JOB_NUM_NODES=1
如有任何意见或建议,我将不胜感激。如果需要更多信息,请告诉我。
感谢阅读,
汤姆
玩多了更新
我已经取得了一些进步,但我仍然没有得到我想要的行为。
如果我使用 --exclusive
我可以获得 echo
步骤来等待 sleep
步骤:
salloc --ntasks=1
salloc: Granted job allocation 2387
srun -n 1 --exclusive sleep 10 & time srun -n 1 --exclusive echo ok
[1] 16602
ok
[1]+ Done srun -n 1 --exclusive sleep 10
real 0m10.094s
user 0m0.017s
sys 0m0.037s
和
salloc --ntasks=2
salloc: Granted job allocation 2388
srun -n 1 --exclusive sleep 10 & time srun -n 1 --exclusive echo ok
[1] 16683
ok
real 0m0.067s
user 0m0.005s
sys 0m0.020s
但是我仍然不知道如何正确地执行此操作,如果我运行宁一个多步作业,其中每个步骤都需要多个处理器,例如
salloc --ntasks=6
salloc: Granted job allocation 2389
srun -n 2 --exclusive stress -c 2 &
srun -n 2 --exclusive stress -c 2 &
srun -n 2 --exclusive stress -c 2 &
将给我 12 个 stress
进程,
salloc --ntasks=6
salloc: Granted job allocation 2390
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
srun -n 1 --exclusive stress -c 2 &
那么如果我想让我的sbatch
脚本占用6个处理器,一次启动三个步骤,每个步骤2个处理器,我该怎么办?使用 srun --exclusive -n 1 -c 2 stress -c 2
是否正确?
我认为缺少的部分是 --exclusive
和 --cpus-per-task
参数。我得到了我正在寻找的行为
salloc --ntasks=6
salloc: Granted job allocation 2457
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 &
这将启动 6 个 stress
进程;第 4 个 stress
命令在最后等待轮到它。
这可能是显而易见的,但需要一段时间才能弄清楚!