批处理内置资源
slots
关键字允许您优先调度在空闲slots最少的主机上运行作业。这个特性对于希望将连续作业打包到空闲slots最少的主机上的人非常有用,确保将有更多的主机可用于运行并行作业。slots
(未使用的slots)支持在资源需求字符串的 select[]
和 order[]
部分中使用。
slots
slots
是根据 bhosts
为主机定义的未使用作业插槽的数量,其计算公式为:
slots (Unused slots) = MAX – NJOBS
其中 NJOBS = RUN + SSUSP + USUSP + RSV
maxslots
maxslots
是根据 bhosts
为主机定义的可以使用的插槽的最大数量。
maxslots (max slot) = MAX
其中 MAX 是 bhosts
显示的“MAX”列的值。
maxslots
支持在资源需求字符串的 select[]
、order[]
和 same[]
部分中使用。
您可以在排序字符串中指定 slots
。以下示例展示了基于 slots
的逆序排序,假设主机 A 和主机 B 各自有 20 个总插槽。目前集群中没有作业运行。然后,
作业 1:
bsub -n 10 sleep 10000 # 在主机 A 上运行
作业 2:
bsub -n 1 sleep 10000 # 可能在主机 B 上运行
作业 3:
bsub -n 20 sleep 10000 # 将处于等待状态
如果作业 2 在主机 B 上运行,我们可能会遇到一种情况,即大型并行作业作业 3 永远没有机会运行,因为两个主机都没有 20 个可用的插槽。本质上,作业 2 阻碍了作业 3 的运行。然而,使用 order[-slots]
:
作业 1:
bsub -n 10 -R "order[-slots]" sleep 10000 # 在主机 A 上运行
作业 2:
bsub -n 1 -R "order[-slots]" sleep 10000 # 将在主机 A 上运行
作业 3:
bsub -n 20 -R "order[-slots]" sleep 10000 # 将在主机 B 上运行
通过基于逆序 slots
的排序,作业 2 将在主机 A 上运行,因为此时主机 A 有最少的可用插槽(10 个可用,而主机 B 有 20 个可用)。这允许作业 3 在主机 B 上运行。
您也可以在排序字符串中指定 maxslots
。以下示例展示了基于 maxslots
的逆序排序,假设主机 A 总共有 20 个插槽,但主机 B 只有 10 个插槽,并且目前集群中没有作业运行。然后,
作业 1:
bsub -n 10 sleep 10000 # 可能在主机 A 上运行
作业 2:
bsub -n 20 sleep 10000 # 将处于等待状态
作业 1 运行后,主机 A 和主机 B 都有 10 个可用插槽。因此,作业 2 将处于等待状态(无论是否使用 order[-slots]
)。然而,使用 order[-maxslots]
:
作业 1:
bsub -n 10 -R "order[-maxslots]" sleep 10000 # 将在主机 B 上运行
作业 2:
bsub -n 20 -R "order[-maxslots]" sleep 10000 # 将在主机 A 上运行
通过基于逆序 maxslots
的排序,作业 1 将在主机 B 上运行,因为它的总插槽少于主机 A。这样可以为像作业 2 这样的更大并行作业节省主机 A。
您可以通过使用 order[-slots:maxslots]
来实现逆序 slots
和 maxslots
排序的组合效果。
上海诺熵科技有限公司提供高性能计算/AI,大数据集群整体解决方案。
网址:www.neuentro.com
微信公众号:爱算数