我试图使用
向LSF中使用最少的机器提交作业bsub -R "order[ut]"
它按预期工作,但所有作业(背靠背提交)最终都在同一主机(最少使用的主机)中,从而大量加载机器,最终导致作业性能不佳。有没有办法将连续提交的作业分散到最少使用的机器上?或者找出机器上使用了多少个插槽的方法?
答案 0 :(得分:0)
很难根据你的描述肯定地说,但我的猜测是你所看到的是由LSF的调度周期的性质引起的影响。以下是关于订单字符串的LSF文档的摘录:
http://www-01.ibm.com/support/knowledgecenter/SSETD4_9.1.3/lsf_admin/order_string.dita
假设主机h1存在于群集中并且具有110个消耗品单元 资源'res'而主机h2有20个这个资源('res'可以是 例如,新的批量内置资源槽。假设这两个 作业正在等待并由调度程序在相同的调度中考虑 循环,job1将首先安排:
Job1:bsub -R“maxmem> 1000”-R“order [res] rusage [res = 100]” - q q1 睡10000(
)Job2:bsub -R“mem< 1000”-R“order [res] rusage [res = 10]”-q q2 sleep 10000
在调度周期的早期,候选主机列表由构建 获取群集中的所有主机或任何主机中列出的主机 询问主机列表(-m)并按顺序部分对它们进行排序 资源需求字符串。假设有序的候选主机列表 在订购后,工作看起来像这样:
Job1:{h1,h7,h4,h10}
Job2:{h1,h2}
这意味着h1最终成为候选主机的最高“res”主机 两份工作清单。在以后的调度中,每个作业都会逐个进行 分配要运行的主机和来自这些主机的资源。
假设Job1计划登陆主机h1,因此将会 分配100'res'。然后当考虑Job2时,它也可能是 计划登陆主机h1,因为它的候选主机列表仍然存在 看起来一样。也就是说,它没有考虑到100'res' 在同一个调度周期内分配给Job1。
简而言之,您要同时提交一堆作业,并要求资源“ut”对候选主机进行排序,但在一个调度周期内,主机不会重新排序,因为作业已安排到它们。如果您将作业提交的时间隔开,使得每个作业都在不同的周期中进行安排,您会看到作业被分派到不同的主机。
现在,该文档的页面还继续描述如何强制LSF在每个作业的循环内重新排序主机,这可以通过简单地添加'!'来完成。在订单字符串中:
bsub -R "order[!ut]"
我警告你,如果你的集群中有很多工作,这可能会大大减慢调度速度。
此外,我不是100%确定这是否适用于资源'ut'(因为它的值不会随着作业的安排而改变),你可能想尝试内置资源'slots'我相信最新版本中添加了:
bsub -R "order[!slots]"
修改强>
我的几位同事想出了另一种方法来解决这种行为而不使用'!' order
字符串中的表示法,即将JOB_ACCEPT_INTERVAL
中的lsb.params
参数设置为1。
这样做会强制分配给每个特定主机的每分钟1个作业,这将为ut
资源提供时间来刷新和平衡主机间的工作量。