如何为用户保留作业,以便在 slurm 中不达到总 cpu 数?

How to hold jobs for a user so that a total cpu number isn't reached in slurm?

提问人:Jason M Gray 提问时间:11/9/2023 最后编辑:Jason M Gray 更新时间:11/9/2023 访问量:38

问:

我正在提交一堆数组作业 4 组,每组 5 个,每个 8 个 cpu,所以 4x5x8=160 个 cpus。我想将运行量保持在 100>2x5x8+1x2x8 cpus 总量以下,因为我需要让其他人运行东西。我的整个研究小组允许 300 个 cpus,但我想保持在 100 以下,这样我就不会超出我的份额。如果队列中的作业在运行后将超过我的 100 个总 CPU(自施加)最大值,如何阻止它们自动运行?

我的提交脚本如下,使用不同的输入参数运行了 4 次:

#!/bin/bash

#SBATCH --time=13-00:00:00
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem-per-cpu=6000MB
#SBATCH --array=1-5

echo -e "Pwmm\tPwmw\tPmwm\tPmww\n$1\t$2\t$3\t$4" > "params_$SLURM_ARRAY_JOB_ID.txt";

mkdir Games-Surfing-Pwvw_1.0-Pwvv_-1.0-Pmvm_1.0-Pmvv_-1.0-Pvwv_0.9-Pvww_-0.9-Pvmv_0.9-Pvmm_-0.9-Pwmw_$2-Pwmm_$1-Pmwm_$3-Pmww_$4-T_20000000-K_100-M_200-Zone_175; 

/home/jmg367/JULIA/julia-1.8.0/bin/julia -t $SLURM_NTASKS $PWD/surf_probs_re_gill_games.jl $SLURM_NNODES $SLURM_NTASKS $SLURM_ARRAY_TASK_ID $SLURM_ARRAY_JOB_ID;
bash 集群计算 slurm sbatch

评论

0赞 Poshi 11/9/2023
您正在尝试完成 SLURM 的工作。SLURM 是必须以公平的方式(或以管理员决定的任何方式)从不同用户那里分配作业的 SLURM。让它完成它的工作。你应该告诉SLURM哪些是你的需求(工作),让SLURM在它认为合适的时候运行它们。
0赞 Jason M Gray 11/9/2023
我的研究小组里还有其他人,我们只有一定数量的 cpu 可供我们使用。我想确保我拿的份额不超过相等的份额。我还想运行一些东西,如果我过去了,就不必取消作业,同时也不必不断检查一些作业是否完成,这样我就可以运行更多,如果它低于我的相等份额。这有意义吗?
0赞 Poshi 11/9/2023
同样,这正是像 SLURM 这样的资源管理器的工作。您的管理员应为每个组/成员配置共享,SLURM 将负责确定用户作业的优先级,以便最后使用的资源共享尽可能接近定义的共享。如果您更喜欢自己完成这项工作,那么最好摆脱 SLURM 并直接启动作业,同时根据需要管理资源。
0赞 Poshi 11/9/2023
有几种方法可以完成您所要求的,其中没有一种方法涉及用户调整系统。适当的优先级、公平份额、公平树、QoS......甚至只是适当的分区。请咨询您的 SLURM 管理员。

答:

1赞 damienfrancois 11/9/2023 #1

一种可能性是提交两个依赖于其他两个 () 的作业数组,以便一次只运行两个作业数组。这样一次最多可以有 2 个 5 个 8=80CPU。--dependency=afterany:...

job_array_id1=$(sbatch submit.sh A B C D)
job_array_id2=$(sbatch submit.sh E F G H)
sbatch --depdendency=afterany:$job_array_id1 submit.sh I J K L
sbatch --depdendency=afterany:$job_array_id2 submit.sh M N O P

评论

0赞 Jason M Gray 11/9/2023
这看起来像我想做的。我想知道它是否可以进一步细化:细化到数组中的任务级别。比如:'''--dependency=afterany:$job_array_id1[1-3] submit.sh I J K L''''
0赞 Jason M Gray 11/9/2023
OOOH,所以看起来使用 aftercorr 与 afterany 相同,但在任务 id 级别。