【发布时间】:2015-03-24 20:51:53
【问题描述】:
我试图将作业提交到 LSF 中使用最少的机器,使用
bsub -R "order[ut]"
它按预期工作,但所有作业(背靠背提交)最终都在同一个主机(使用最少的主机)中,因此机器负载很重,最终导致作业性能不佳。有没有办法将连续提交的作业分散到使用最少的机器上?或者一种计算机器上使用了多少个插槽的方法?
【问题讨论】:
我试图将作业提交到 LSF 中使用最少的机器,使用
bsub -R "order[ut]"
它按预期工作,但所有作业(背靠背提交)最终都在同一个主机(使用最少的主机)中,因此机器负载很重,最终导致作业性能不佳。有没有办法将连续提交的作业分散到使用最少的机器上?或者一种计算机器上使用了多少个插槽的方法?
【问题讨论】:
根据您的描述很难确定,但我猜您看到的是 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
在调度周期的早期,候选主机列表由 获取集群中的所有主机或任何列出的主机 询问主机列表 (-m) 并按顺序部分对它们进行排序 资源需求字符串。假设有序候选主机列表 订购后的工作如下所示:
工作1:{h1, h7, h4, h10}
工作 2:{h1, h2}
这意味着 h1 最终成为候选主机的最高“分辨率”主机 两个工作的列表。仅在以后的调度中,每个作业将 分配要在其上运行的主机和来自这些主机的资源。
假设 Job1 计划登陆主机 h1,因此将 分配了 100 个“资源”。那么当考虑 Job2 时,它也可能是 计划登陆主机 h1,因为它的候选主机列表仍在 看起来一样。也就是说,它没有考虑到 100 'res' 在同一调度周期内分配给 Job1。
简而言之,您一次提交一堆作业并要求候选主机按资源“ut”排序,但在单个调度周期内,主机不会因为作业被调度给它们而重新排序。如果您将作业提交间隔开,以便将它们分别安排在不同的周期中,您会看到作业被分派到不同的主机。
现在,该文档的页面还继续描述如何强制 LSF 为每个作业在周期内重新排序主机,只需添加一个“!”即可。在订单字符串中:
bsub -R "order[!ut]"
我会警告您,如果您的集群中有很多作业,这可能会显着减慢调度速度。
此外,我不能 100% 确定这是否适用于资源“ut”(因为它的值不会随着作业的安排而改变),您可能想尝试内置资源“槽”我相信是在最近的版本中添加的:
bsub -R "order[!slots]"
编辑
我的几个同事想出了另一种方法来避免这种行为,而无需使用“!” order 字符串中的符号,也就是将lsb.params 中的JOB_ACCEPT_INTERVAL 参数设置为1。
这将执行每分钟向任何特定主机分派 1 个作业的限制,这将使 ut 资源有时间刷新和平衡主机之间的工作负载。
【讨论】: