调度配置指南
概述
Slurm 旨在快速简单地进行调度尝试,处理作业提交、完成和配置更改等事件。 在这些事件触发的调度过程中,将考虑default_queue_depth(默认值为 100)个作业。
在较少的时间间隔内,由sched_interval定义,主调度循环将运行,考虑所有作业,同时遵守partition_job_depth限制。
在这两种情况下,作业按严格的优先级顺序进行评估,一旦任何作业或作业数组任务在某个分区中处于待处理状态,该分区中的其他作业将不会被调度,以避免占用更高优先级待处理作业的资源。
更全面的调度尝试通常由回填调度插件完成,该插件考虑作业运行时间和所需资源,以确定低优先级作业是否会实际占用高优先级作业所需的资源。这使得回填调度器能够为待处理作业分配更具体的原因,或启动之前处于待处理状态的作业。
调度配置
SchedulerType 配置参数指定要使用的调度插件。 选项有 sched/backfill,执行回填调度,以及 sched/builtin,尝试在每个分区/队列中按严格优先级顺序调度作业。
还有一个 SchedulerParameters 配置参数,可以指定范围广泛的参数,如下所述。 这一组参数适用于所有调度配置。 有关更多详细信息,请参见slurm.conf(5)手册页。
- default_queue_depth=# - 指定在可能导致作业被调度的每个事件中考虑的作业数量。 默认值为 100 个作业。由于这一过程发生频繁,因此通常较小的数字是最佳选择。
- defer - 在提交时不尝试单独调度作业。 对于高吞吐量计算非常有用。
- max_switch_wait=# - 指定作业等待所需叶子交换机的最大时间。默认值为 300 秒。
- partition_job_depth=# - 指定在任何单个分区中测试的作业数量,默认值为 0(无限制)。
- sched_interval=# - 指定主调度循环执行并测试所有待处理作业的频率(以秒为单位),并遵守partition_job_depth限制。默认值为 60 秒。
回填调度
回填调度插件默认加载。 没有回填调度时,每个分区严格按优先级顺序调度,这通常导致系统利用率和响应能力显著低于可能的水平。 回填调度将启动低优先级作业,只要这样做不会延迟任何高优先级作业的预期开始时间。 由于待处理作业的预期开始时间取决于正在运行作业的预期完成时间,因此合理准确的时间限制对回填调度的良好运行至关重要。
Slurm 的回填调度器考虑每个正在运行的作业。 然后按优先级顺序考虑待处理作业,确定每个作业的何时何地开始,同时考虑作业抢占、组调度、通用资源(GRES)要求、内存要求等。 如果考虑中的作业可以立即启动而不影响任何高优先级作业的预期开始时间,则立即启动。 否则,在作业的预期执行时间内,将保留作业所需的资源。 回填插件将为待处理作业设置预期开始时间,将这些保留节点置于'计划'状态。作业的预期开始时间可以通过squeue --start命令查看。 出于性能原因,回填调度器为作业保留整个节点,即使作业不需要整个节点。
调度逻辑构建了一个作业-分区对的排序列表。提交到多个分区的作业将在列表中拥有与请求的分区数量相同的条目。默认情况下,回填调度器可能会评估单个作业的所有作业-分区对,可能为每个对保留资源,但仅在提供最早开始时间的预留中启动作业。
单个作业为多个分区保留资源可能会妨碍其他作业(或hetjob组件)从已经为不提供最早开始时间的分区保留资源。 请求多个分区的单个作业也可能阻止其在低优先级分区中更早启动,如果这些分区重叠节点,而高优先级分区中的回填预留阻止了也在低优先级分区中的节点。
在没有合理的作业时间限制估计的情况下,回填调度是困难的,但一些配置参数可以提供帮助。
- DefaultTime - 默认作业时间限制(按分区指定值)
- MaxTime - 最大作业时间限制(按分区指定值)
- OverTimeLimit - 作业在被终止之前可以超过其时间限制的数量。系统范围的配置参数。
回填调度是一个耗时的操作。 每两秒释放一次锁,以便处理其他选项,例如处理新的作业提交请求。 回填调度可以选择在锁释放后继续执行,并忽略新提交的作业(SchedulerParameters=bf_continue)。 这样做将允许考虑更多作业,但可能导致新提交作业的调度延迟。 以下是与回填调度相关的SchedulerParameters配置参数的部分列表。 有关更多详细信息和完整的与回填相关的 SchedulerParameters 列表,请参见slurm.conf(5)手册页。
- bf_continue - 如果设置,则在定期释放其他操作的锁后继续回填调度。
- bf_interval=# - 回填调度尝试之间的间隔。默认值为 30 秒。
- bf_max_job_part=# - 每个回填周期每个分区启动的最大作业数量。默认值为 0(无限制)。
- bf_max_job_start=# - 每个回填周期启动的最大作业数量。默认值为 0(无限制)。
- bf_max_job_test=# - 每个回填周期考虑的最大作业数量。默认值为 100 个作业。
- bf_max_job_user=# - 每个回填周期每个用户启动的最大作业数量。默认值为 0(无限制)。
- bf_max_time=# - 回填调度器可以花费的最大时间(以秒为单位)(包括锁释放时的睡眠时间),在此之后停止。默认值为bf_interval的值,默认为 30 秒。
- bf_one_resv_per_job - 不允许每个作业添加超过一个回填预留。此选项使得提交到多个分区的作业在第一个作业-分区对预留回填后停止保留资源。来自同一作业的后续对仅在现在启动时进行测试。这允许其他作业能够预定其他对的资源,代价是不能保证多分区作业将在提供最早开始时间的分区中启动(除非它可以立即启动)。此选项默认禁用。
- bf_resolution=# - 回填调度的时间分辨率。默认值为 60 秒。 如果作业时间限制不精确和/或希望小延迟启动待处理作业以实现更高的系统利用率,则较大的值是合适的。
- bf_window=# - 在确定作业何时何地可以启动时,向未来查看的时间(以分钟为单位)。 较高的值会导致更多的开销和更少的响应能力。 通常建议的值至少与最高允许的时间限制一样长,以防止作业饿死。 为了限制回填调度器管理的数据量,如果增加 bf_window 的值,则通常建议也增加bf_resolution。 默认值为 1440 分钟(一天)。
- bf_yield_interval=# - 回填调度器将定期放弃锁,以便进行其他待处理操作。这指定了以微秒为单位的释放锁的时间。默认值为 2,000,000 微秒(2 秒)。较小的值可能在与 bf_continue 选项结合使用时对高吞吐量计算有帮助。
- bf_yield_sleep=# - 回填调度器将定期放弃锁,以便进行其他待处理操作。这指定了以微秒为单位的释放锁的时间长度。默认值为 500,000 微秒(0.5 秒)。
最后修改于 2024 年 6 月 4 日