Intel Knights Landing (KNL) 用户和管理员指南
概述
本文件描述了在配备 Intel Knights Landing 处理器的计算机上 Slurm 的独特功能。 在研究本文件中描述的 Intel KNL 系统操作的相对少数差异之前,您应该熟悉 Slurm 在 Linux 集群上的操作模式。
用户工具
对于 KNL 处理器,所需的 NUMA 和 MCDRAM 模式应通过 Slurm 的作业提交命令的 -C 或 --constraint 选项进行指定:salloc、sbatch 和 srun。当前可用的 NUMA 和 MCDRAM 模式在下表中显示。每个节点的可用和当前 NUMA 和 MCDRAM 模式分别在“可用特性”和“活动特性”字段中可见,可以使用 scontrol、sinfo 或 sview 命令查看。 请注意,节点可能需要重启以获取所需的 NUMA 和 MCDRAM 模式,并且节点只能在没有正在运行的作业时重启(即,可能有足够的资源可用于运行待处理作业,但在节点空闲并可以重启之前,待处理作业可能不会被分配资源)。还要注意,从资源分配时起,作业将被收取资源费用,这可能包括将节点重启到所需的 NUMA 和 MCDRAM 配置所需的时间。
Slurm 支持非常丰富的节点约束选项(异或、每个约束的节点计数等)。 有关约束语法的更多信息,请参见 salloc、sbatch 和 srun 命令的手册页。 作业可以指定其所需的 NUMA 和/或 MCDRAM 配置。如果未指定 NUMA 和/或 MCDRAM 配置,则将使用具有该配置的任何可能值的节点。
类型 | 名称 | 描述 |
---|---|---|
MCDRAM | cache | 将所有 MCDRAM 用作缓存 |
MCDRAM | equal | 将 MCDRAM 部分用作缓存,部分与主内存结合使用 |
MCDRAM | flat | 将 MCDRAM 与主内存结合成“平坦”的内存空间 |
NUMA | a2a | 全到全 |
NUMA | hemi | 半球 |
NUMA | snc2 | 子 NUMA 集群 2 |
NUMA | snc4 | 子 NUMA 集群 4 (注意) |
NUMA | quad | 象限 (注意) |
需要一些或全部 KNL 高带宽内存(HBM)的作业应通过 Slurm 的通用资源(GRES)选项显式请求该内存。 HBM 将始终以 Slurm GRES 名称“hbm”被识别。 下面的示例演示了 HBM 的使用。
在步骤启动时使用 Intel 的 zonesort 模块对空闲缓存页面进行排序,可以通过在 slurm.conf 文件中使用“LaunchParameters=mem_sort”选项将其配置为所有步骤的默认设置。 单个作业步骤可以使用 srun 的“--mem-bind=sort”或“--mem-bind=nosort”命令行选项启用或禁用排序。 排序仅对分配给作业步骤的 NUMA 节点执行。
注意: Slurm 对限制 HBM 的使用提供有限支持。在未来的某个时刻,作业请求的 HBM 数量将与 KNL 处理器上可用的 HBM 总量和包含内存的 NUMA 节点数量进行比较。然后,作业将绑定到特定的 NUMA 节点,以限制可用于作业的 HBM 总量,从而为在该 KNL 处理器上运行的其他作业保留剩余的 HBM。
注意: Slurm 只能支持同质节点(例如,每个 NUMA 节点的核心数相同)。 具有 68 核心 的 KNL 处理器(KNL 模型的一个子集)在 snc4 模式下将没有同质 NUMA 节点,但每个 NUMA 节点将具有 16 或 18 个核心。这将导致 Slurm 使用较低的核心计数,找到总共 256 个线程而不是 272 个线程,并将节点设置为 DOWN 状态。
计费
如果节点需要重启以满足作业的要求配置,则作业将从分配时起到作业生命周期结束时收取资源分配费用,包括启动节点所消耗的时间。 作业的时间限制将从所有节点准备好使用的时间开始计算。 例如,一个时间限制为 10 分钟的作业可能在 10:00:00 分配资源。 如果节点需要重启,它们可能在 10:20:00 之前无法使用,即在分配后 20 分钟,作业将在那时开始执行。 作业必须在 10:30:00 之前完成,以满足其时间限制(实际开始执行后 10 分钟)。 但是,作业将被收取 30 分钟的资源使用费用,其中包括启动时间。
示例用例
$ sbatch -C flat,a2a -N2 --gres=hbm:8g --exclusive my.script $ srun --constraint=hemi,cache -n36 a.out $ srun --constraint=flat --gres=hbm:2g -n36 a.out $ sinfo -o "%30N %20b %f" NODELIST ACTIVE_FEATURES AVAIL_FEATURES nid000[10-11] nid000[12-35] flat,a2a flat,a2a,snc2,hemi nid000[36-43] cache,a2a flat,equal,cache,a2a,hemi
网络拓扑
Slurm 将利用可用资源优化性能,而无需重启。如果需要节点重启,则它将根据网络带宽优化布局,使用当前处于所需配置中的节点和可以在重启后提供的节点。 这可能导致重启的节点数量超过严格所需的数量,但将改善应用程序性能。
用户可以使用 Slurm 的 --switches 选项指定希望在特定数量的叶子交换机(Dragonfly 组)上分配所有资源。 他们还可以指定愿意等待多长时间以获得这样的配置。如果在指定的时间间隔内无法提供所需的配置,则将尽可能在网络带宽方面优化分配节点。在 Dragonfly 网络上,这意味着在单个组上分配资源或尽可能均匀地分配到多个组上。例如:
srun --switches=1@10:00 N16 a.out
请注意,系统管理员可以禁用 --switches 选项的使用或限制作业可以延迟的时间,使用 SchedulerParameters max-switch-wait 选项。
启动问题
如果节点启动失败,这些节点将被排空,作业将重新排队,以便可以分配不同的节点集。最初分配给作业的节点将继续可用于该作业,因此可能只需要少量额外节点。
系统管理
在 Intel KNL 系统上使用 Slurm 需要四个重要组件。
- Slurm 需要一种机制来确定节点的当前拓扑(例如,存在多少 NUMA 以及每个 NUMA 关联的核心)。Slurm 依赖于 可移植硬件局部性(HWLOC) 来实现此功能。请在构建 Slurm 之前安装 HWLOC。
- 节点特性插件管理每个 KNL 节点的可用和活动特性信息。
- 配置文件用于定义各种超时、默认配置等。配置文件的名称和内容将取决于使用的节点特性插件。有关更多信息,请参见 knl.conf 手册页。
- 需要一种机制来以所需配置启动节点。该机制必须与现有的 Slurm 基础设施集成,以便根据用户请求重启节点(--reboot)。
此外,还有一个 DebugFlags 选项“NodeFeatures”,它将生成有关 KNL 操作的详细信息。
基于配置的插件,KNL 特定的可用和活动特性配置方式不同。
对于 knl_generic 插件,应在“slurm.conf”配置文件中定义 KNL 特定特性。当 slurmd 守护进程在每个计算节点上启动时,它将根据需要更新可用和活动特性。
非 KNL 特定的特性(例如,机架编号、“knl”等)将从节点的“Features”配置中复制到“slurm.conf”中的可用和活动特性字段,并且不会被 NodeFeatures 插件修改。
注意: 对于 Dell KNL 系统,您还必须包括 SystemType=Dell 选项以确保成功操作,并且可能需要增加 SyscfgTimeout 以允许足够的时间完成命令。某个站点的经验表明,可能需要 10 秒的超时,配置为 SyscfgTimeout=10000。
Slurm 不支持在单个插槽内存在多个 NUMA 节点的概念。如果 KNL 节点以多个 NUMA 启动,则每个 NUMA 节点将在 Slurm 中作为单独的插槽出现。 在 slurm.conf 配置文件中,将节点插槽和核心计数设置为适合在节点上使用的某些 NUMA 模式的值。当节点启动并且节点上的 slurmd 守护进程启动时,它将向 slurmctld 守护进程报告节点的实际插槽(NUMA)和核心计数,这将更新节点的 Slurm 数据结构为当前配置的值。 请注意,Slurm 当前不支持每个插槽(或 NUMA 节点)中核心数量不同的概念。我们目前正在努力解决这些问题。
操作模式
- 节点的配置“特性”被复制到可用和活动特性字段。
- 节点特性插件确定节点当前的 MCDRAM 和 NUMA 值以及可用的值,并将这些值分别添加到节点的活动和可用特性字段。请注意,这些值可能在节点启动并且计算节点上的 slurmd 守护进程将该信息发送到 slurmctld 守护进程之前不可用。
- 如果可能,作业将被分配到已经处于请求的 MCDRAM 和 NUMA 模式的节点。如果在请求的配置下可用资源不足,则将选择其他节点并在节点上没有其他作业活动时重启为所需配置。在节点空闲之前,无法更改其配置。请注意,节点重启时间大约为 20 分钟。
通用集群配置
所有其他集群应将 NodeFeaturesPlugins 配置为“knl_generic”。 该插件直接在计算节点上执行所有操作,使用 Intel 的 syscfg 程序获取和修改节点的 MCDRAM 和 NUMA 模式,并使用 Linux reboot 程序重启计算节点,以使 MCDRAM 和/或 NUMA 模式的修改生效。 确保在 slurm.conf 文件中定义了 RebootProgram。 该插件当前不允许在 slurm.conf 中指定 ResumeProgram、SuspendProgram、SuspendTime 等,但该限制可能在未来被移除(ResumeProgram 当前没有在重启之前更改节点的 MCDRAM 和/或 NUMA 模式的方法)。
注意: syscfg 程序报告下次启动节点时要使用的 MCDRAM 和 NUMA 模式。如果使用 syscfg 程序修改节点的 MCDRAM 或 NUMA 模式,但未重启,则 Slurm 将根据不正确的状态信息做出调度决策。如果您希望在 Slurm 之外更改节点状态信息,请使用以下程序:
- 排空相关节点
- 更改它们的 MCDRAM 和/或 NUMA 模式
- 重启节点,然后
- 将它们恢复到 Slurm 中服务
示例 knl_generic.conf 文件
# 示例 knl_generic.conf SyscfgPath=/usr/bin/syscfg DefaultNUMA=a2a # NUMA=all2all AllowNUMA=a2a,snc2,hemi DefaultMCDRAM=cache # MCDRAM=cache
示例 slurm.conf 文件
# 示例 slurm.conf NodeFeaturesPlugins=knl_generic DebugFlags=NodeFeatures GresTypes=hbm RebootProgram=/sbin/reboot ... Nodename=default Sockets=1 CoresPerSocket=68 ThreadsPerCore=4 RealMemory=128000 Feature=knl NodeName=nid[00000-00127] State=UNKNOWN
最后修改于 2024 年 3 月 13 日