分层资源 (HRES) 调度

概述

分层资源 (HRES) 在 Slurm 25.05 中以 测试版 状态添加。在测试版期间,配置文件格式和此功能的其他方面可能会在未来版本中发生重大变化,并需要进行重大更改以避免错误。在使用此功能的站点应特别关注在 升级 时在 RELEASE_NOTES 和 CHANGELOG 中提到的更改。

分层资源允许将类似于 许可证 的资源定义为独立的分层拓扑的一部分,并与特定节点关联。作业可以请求该资源的任意整数数量。可以在配置中定义多个资源(在 resources.yaml 文件中),并将使用独立定义的层次结构。

尽管这些分层拓扑与 网络拓扑 有一些相似之处,但每个的定义是完全独立的。

规划模式

提供两种资源规划模式。在这两种情况下,都可以定义一个资源计数为零或无限(count: -1)的层,其影响取决于使用的模式。

模式 1

模式 1 中,仅在与作业分配重叠的一个层上需要足够的资源。在许多情况下,只需要一个级别。然而,如果希望在资源使用的地方有一些额外的灵活性,可以定义多个级别,如下面的示例所述。

具有 计数的资源层将对调度没有影响。由于该层永远不会满足请求,因此它永远不会改变计算出的可运行给定作业的节点列表。这在语义上等同于删除该层定义。

具有 无限 计数的资源层将始终允许新的作业分配成功。除非由于其他要求而被阻止,否则作业将能够立即执行。

例如,考虑下面示例中定义的 自然 资源。在请求该资源并分配 node[01-04] 的作业将从可用的 100 个中提取,适用于 node[01-16]。在更高层次上指定 50 的计数(node[01-32]),它们可以在每组 16 中分配的资源之外进行分配。也就是说,每组 16 将各自可用 100,而在任何一个组中将额外可用 50,总共可用 250 个该资源。

模式 2

模式 2 中,所有与作业分配重叠的所有层的所有级别必须提供足够的资源。请注意,如果更高层级未提供足够的资源,则可能会出现调度停滞。

具有 计数的资源层将对调度产生重大影响。该层下的所有节点将永远无法满足分配约束。这可以用于标记该资源在集群的特定部分不可用,例如,进行硬件维护,而不改变各个下层资源的计数。

具有 无限 计数的资源层将对调度没有影响。由于该层将始终满足请求,因此它将永远不会限制执行,并且在语义上等同于删除该层定义。

例如,考虑下面示例中定义的 平面 资源。请求该资源并分配 node[01-04] 的作业将从包括这些节点的所有级别提取。因此,它将从 node[01-08] 上的 12 个可用资源中提取,从 node[01-16] 上的 16 个可用资源中提取,以及从 node[01-32] 上的 24 个可用资源中提取。由于最高层仅包含 24,因此这是可以分配的最大数量,即使在下层有更大的总数可用。这个示例允许一组固定的资源在使用地点上有一定的灵活性。

限制

  • 资源计数不能动态更改;所有更改必须通过 resources.yaml 进行,并通过重启或重新配置应用
  • 不支持动态节点
  • 此实现处于 测试版 状态(请参见 概述
  • 通过分层资源配置定义的资源名称不得与任何集群许可证冲突

示例

resources.yaml 中定义资源层次结构后(请参见下面的示例),您可以通过多种方式与这些资源进行交互,使用与许可证相同的语法:

  • 查看 HRES
    scontrol show license
  • 保留 HRES
    scontrol create reservation account=root licenses=natural(node[01-016]):30,flat(node[09-12]):4,flat(node[29-32]):2
    请注意,必须为每个保留的 HRES 指定层,由该层中可用的节点列表标识
  • 在作业中请求 HRES
    sbatch --license=flat:2,natural:1 my_script.sh

resources.yaml

---
- resource: flat
  mode: MODE_2
  layers:
    - nodes:			# 最高层
        - "node[01-32]"
      count: 24
    - nodes:			# 中间层
        - "node[01-16]"
      count: 16
    - nodes:
        - "node[17-32]"
      count: 16
    - nodes:			# 最低层
        - "node[01-08]"
      count: 12
    - nodes:
        - "node[09-16]"
      count: 12
    - nodes:
        - "node[17-24]"
      count: 12
    - nodes:
        - "node[25-32]"
      count: 12
- resource: natural
  mode: MODE_1
  layers:
    - nodes:			# 最高层
        - "node[01-32]"
      count: 50
    - nodes:			# 最低层
        - "node[01-16]"
      count: 100
    - nodes:
        - "node[17-32]"
      count: 100

最后修改于 2025 年 5 月 26 日