启用没有时间限制的 Univa Grid Engine 资源预留
Enabling Univa Grid Engine Resource Reservation without a time limit on jobs
我的组织有一个服务器集群 运行ning Univa Grid Engine 8.4.1,用户提交各种作业,一些使用单个 CPU 内核,一些使用 OpenMPI 来利用多个核心,都具有变化和不可预测的 运行 次。
我们已经启用了一个票务系统,这样一个用户就不能霸占整个队列,但是如果网格和队列充满了单CPU个作业,就没有多CPU工作可以永远开始(他们只是坐在队列的顶部等待所需数量的 cpu 插槽空闲,这通常不会发生)。我们正在寻求配置资源预留,这样,如果 MPI 作业是队列中的下一个作业,网格将在插槽空闲时保持打开状态,直到有足够的空间来提交 MPI 作业,而不是用单个 CPU 队列中更靠后的作业。
我读过(例如 here)网格根据作业 运行 剩余的时间来决定 "reserve" 哪些插槽那些插槽。我们遇到的问题是我们的作业有 运行 次未知。有些需要几秒钟,有些需要几周,虽然我们粗略地知道一项工作需要多长时间,但我们永远无法确定。因此,我们不想通过 -l h_rt 和 -l s_rt 以硬时间限制和软时间限制启动 运行ning qsub,否则我们的工作可能会过早终止。资源预留似乎正在使用 default_duration,我们将其设置为无穷大,因为没有更好的数字可供使用,并且平等对待所有作业。它的拣选槽由已经 运行 几天的长达一个月的作业填充,而不是由仅 运行 宁了几秒钟的几分钟作业填充的槽。
有没有办法告诉调度程序在多个 CPU MPI 作业可用时为它们保留槽,而不是基于一些感知的 运行 预 select 槽]-他们的工作时间?
不幸的是,我不知道有什么方法可以满足您的要求 - 我认为预订是在提交作业时创建的,而不是随着空位的增加而逐渐创建的。如果您还没有看过资源预留功能的设计文档,it's worth a look 了解该功能。
相反,我将建议一些策略来自信地设置作业 运行 次。 none 的作业有 运行 次时的主要问题是 Grid Engine 无法在将来无限地保留 space,所以即使你设置一些非常粗糙的 运行次(在真实 运行 时间的一个数量级内),您可能会得到一些积极的结果。
- 如果您以前 运行 做过类似的工作,一个简单的经验法则是 将最大 运行 时间设置为典型时间的 150%或作业的最大 运行 时间,基于历史趋势。使用
qacct
或解析accounting
文件获取硬数据。当然,将该百分比调整为适合您的风险阈值的值。
- 另一个经验法则是设置最大 运行 时间不是基于工作的真实 运行 时间,而是基于 "after this date, the results won't be useful"[ 的感觉=30=] 或 "if it takes this long, something's definitely wrong"。如果您需要在周五之前得到答复,那么将 运行 期限设置为三个月是没有意义的。同样,如果您 运行ning md5sum 处理通常为 MB 大小的文件,那么设置 1 天的 运行 时间限制是没有意义的;这些工作应该只需要几秒钟或几分钟,如果真的需要很长时间,那就是有问题了。
- 如果您真的必须允许真正的无限长作业,那么一种选择是将集群划分为无限队列和有限队列。指定有限 运行time 的作业将能够使用两个队列,而无限作业将有更少的可用资源;这将激励用户更加努力地选择 运行 次,而不是强迫他们这样做。
最后,确保提交的多槽作业带有 -R y
qsub 标志以启用资源预留系统。这可以放在系统默认 sge_request
文件中,但通常不推荐这样做,因为它会降低调度性能:
Since reservation scheduling performance consumption is known to grow with the number of pending jobs, use of -R y option is recommended only for those jobs actually queuing for bottleneck resources.
我的组织有一个服务器集群 运行ning Univa Grid Engine 8.4.1,用户提交各种作业,一些使用单个 CPU 内核,一些使用 OpenMPI 来利用多个核心,都具有变化和不可预测的 运行 次。
我们已经启用了一个票务系统,这样一个用户就不能霸占整个队列,但是如果网格和队列充满了单CPU个作业,就没有多CPU工作可以永远开始(他们只是坐在队列的顶部等待所需数量的 cpu 插槽空闲,这通常不会发生)。我们正在寻求配置资源预留,这样,如果 MPI 作业是队列中的下一个作业,网格将在插槽空闲时保持打开状态,直到有足够的空间来提交 MPI 作业,而不是用单个 CPU 队列中更靠后的作业。
我读过(例如 here)网格根据作业 运行 剩余的时间来决定 "reserve" 哪些插槽那些插槽。我们遇到的问题是我们的作业有 运行 次未知。有些需要几秒钟,有些需要几周,虽然我们粗略地知道一项工作需要多长时间,但我们永远无法确定。因此,我们不想通过 -l h_rt 和 -l s_rt 以硬时间限制和软时间限制启动 运行ning qsub,否则我们的工作可能会过早终止。资源预留似乎正在使用 default_duration,我们将其设置为无穷大,因为没有更好的数字可供使用,并且平等对待所有作业。它的拣选槽由已经 运行 几天的长达一个月的作业填充,而不是由仅 运行 宁了几秒钟的几分钟作业填充的槽。
有没有办法告诉调度程序在多个 CPU MPI 作业可用时为它们保留槽,而不是基于一些感知的 运行 预 select 槽]-他们的工作时间?
不幸的是,我不知道有什么方法可以满足您的要求 - 我认为预订是在提交作业时创建的,而不是随着空位的增加而逐渐创建的。如果您还没有看过资源预留功能的设计文档,it's worth a look 了解该功能。
相反,我将建议一些策略来自信地设置作业 运行 次。 none 的作业有 运行 次时的主要问题是 Grid Engine 无法在将来无限地保留 space,所以即使你设置一些非常粗糙的 运行次(在真实 运行 时间的一个数量级内),您可能会得到一些积极的结果。
- 如果您以前 运行 做过类似的工作,一个简单的经验法则是 将最大 运行 时间设置为典型时间的 150%或作业的最大 运行 时间,基于历史趋势。使用
qacct
或解析accounting
文件获取硬数据。当然,将该百分比调整为适合您的风险阈值的值。 - 另一个经验法则是设置最大 运行 时间不是基于工作的真实 运行 时间,而是基于 "after this date, the results won't be useful"[ 的感觉=30=] 或 "if it takes this long, something's definitely wrong"。如果您需要在周五之前得到答复,那么将 运行 期限设置为三个月是没有意义的。同样,如果您 运行ning md5sum 处理通常为 MB 大小的文件,那么设置 1 天的 运行 时间限制是没有意义的;这些工作应该只需要几秒钟或几分钟,如果真的需要很长时间,那就是有问题了。
- 如果您真的必须允许真正的无限长作业,那么一种选择是将集群划分为无限队列和有限队列。指定有限 运行time 的作业将能够使用两个队列,而无限作业将有更少的可用资源;这将激励用户更加努力地选择 运行 次,而不是强迫他们这样做。
最后,确保提交的多槽作业带有 -R y
qsub 标志以启用资源预留系统。这可以放在系统默认 sge_request
文件中,但通常不推荐这样做,因为它会降低调度性能:
Since reservation scheduling performance consumption is known to grow with the number of pending jobs, use of -R y option is recommended only for those jobs actually queuing for bottleneck resources.