限制已分配的主机数
使用 lsb.queues 中的 HOSTLIMIT_PER_JOB 参数来限制作业可以使用的主机数。 例如,如果用户使用 bsub -n 1,4096 -R "span[ptile=1]"提交并行作业,那么此作业将从集群请求 4096 个主机。 如果指定每个作业 20 个主机的限制,那么提交请求 4096 个主机的作业的用户将只允许使用 20 个主机。
语法
HOSTLIMIT_PER_JOB = 整数
指定作业可以使用的最大主机数。 如果为并行作业请求的主机数超过此限制,那么该并行作业将处于 pend 状态。
HOSTLIMIT_PER_JOB 如何影响并行作业的提交
- span[ptile=value] 资源需求
- 如果使用 span[ptile=processors_per_host] 资源需求提交并行作业,那么将知道所请求的确切主机数 (通过将处理器数除以每个主机的处理器数)。 如果请求的主机数超过 HOSTLIMIT_PER_JOB 值,那么将拒绝该作业。 指定 span[ptile=processors_per_host] 资源需求 (例如 bmod) 的其他命令也受此每个作业的主机限制。
- 复合所需资源
- 如果复合资源需求的任何部分不具有 ptile 规范,那么在计算所请求的主机数时,该部分将被视为至少具有一个所请求的主机 (在相乘之前)。例如:
- 2 *{span[ptile=1]}+ 3 *{-} 被视为至少请求了三台主机,因为最后一部分至少使用三台主机。
- 2 *{-}+ 3 *{-}+ 4 *{-} 被视为至少请求了三个主机。
- 所需替代资源
- 所有资源需求集的最小计算主机数用于与具有每个作业主机限制的请求主机数进行比较。 包含复合资源需求的任何资源需求集都将计算为复合资源需求 (即,如果复合资源需求的任何部分不具有 ptile 规范,那么在计算所请求的主机数时,该部分被视为至少具有一个请求的主机,然后再乘以)。
如果在提交阶段中并行作业中请求的主机数未知,那么每个作业的主机限制不适用,并且接受作业提交。
在资源分配期间验证每个作业的主机限制。 如果超过了每个作业的主机限制,并且无法满足请求的最小主机数,那么并行作业将暂挂。
此参数不会阻止并行作业恢复,即使作业的主机分配超过此参数中指定的每个作业的主机限制也是如此。
如果在某个范围的插槽数 (bsub -n "min, max") 下提交并行作业,那么每个作业的主机限制将应用于请求的最小插槽数。 即,如果在每个作业主机限制下满足请求的最小槽数,那么将接受作业提交。
例如, hostA 有两个可用插槽, hostB 和 hostC 有四个可用插槽, hostD 有八个可用插槽, HOSTLIMIT_PER_JOB=2。 如果您提交的作业需要 10 个插槽,但没有ptile说明,调度程序会认为选择hostA, hostB,和hostC就能满足要求,但由于这需要三台主机,因此作业将被挂起。 这是错误的调度失败,因为选择 hostA 和 hostD 将满足此需求。
为避免在指定 HOSTLIMIT_PER_JOB 时发生错误调度失败,请提交具有 ptile 资源需求的作业或将 order[slots] 添加至资源需求。