View a markdown version of this page

在中配置硬件拓扑 AWS 个 - AWS 个

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在中配置硬件拓扑 AWS 个

当Slurm知道计算节点的内部硬件布局时,它可以做出更好的放置决策:内核如何分组成套接字和 Non-Uniform 内存访问(NUMA)域,L3缓存如何映射到内核,以及每个 GPU 连接到哪些内核。本主题介绍了 Slurm 如何对该布局进行建模,以及 AWS PCS 如何在每个支持的 Slurm 版本上对其进行配置。

CPU 拓扑

计算节点的内核不可互换。它们分为物理包(套接字)和 NUMA 域,每个组共享内存控制器和 L3 缓存等资源。放置在同一个组中的两个任务可以更快地进行通信并共享缓存;跨组的任务对共享资源的竞争较少。

Slurm 使用Sockets、CoresPerSocket和ThreadsPerCore设置描述了每个节点的这种分组。slurm.confSlurm 视作套接字的内容可通过每Parameters节点设置进行配置:

  • numa_node_as_socket— 每个 NUMA 域都是一个套接字。

  • l3cache_as_socket— 每个 L3 缓存域都是一个套接字。这在插槽级别过于粗糙的某些处理器上很有用,而且 L3 缓存可以提供更好的任务分配。

配置 CPU 拓扑后,套接字感知调度选项将按预期运行:作业选项(例如--ntasks-per-socket和--sockets-per-node)以及使用集群级别设置的CR_Socket或CR_Socket_Memory值进行基于套接字的分配。SelectTypeParameters有关 Slurm 如何分配套接字、内核和线程的更多信息,请参阅 Slurm 文档中的 Multi-core/Multi-thread架构支持。

AWS PCS 不会在 25.11 之前的 Slurm 版本上配置 CPU 拓扑,因此这些版本上的节点会公布每个插槽一个内核,这些选项没有效果。

GPU 亲和力

节点中的每个 GPU 都离一个 NUMA 域最近,因此该节点的内核子集是其本地的。在其 GPU 本地内核上运行的任务传输数据的路径要比在另一个插槽上的任务更短。Slurm 记录了每台设备的这种 GPU-to-core 亲和力(gres.conf记录的Cores属性)以及 GPU-to-GPU 互连布局()。Links

在 AWS PCS 计算节点上,无法提前静态配置此信息,因为设备枚举取决于单个实例,并且设备仅在节点启动时才可见。Slurm AutoDetect 的机制解决了这个问题:当节点启动时,slurmd查询 NVIDIA 管理库 (NVML),并在注册时向控制器报告检测到的关联性。

注意

当一个节点关机时,Slurm 不知道它的 GPU-to-CPU 亲和力。关联性只有在节点启动和注册时才可用,因此关机节点的调度决策是在没有关联的情况下做出的。

自动检测到的 GPU 关联性以套接字表示,因此需要正确的 CPU 拓扑。如果节点注册的 GPU 关联性不符合该节点配置的套接字边界,则 Slurm 会将该节点设置为INVALID_REG并将其耗尽。有关更多信息,请参阅 对中的无效节点注册 (INVALID_REG) 进行故障排除 AWS 个。

借助 GPU 关联性,Slurm 可以将任务放置在分配的 GPU 的本地核心上。通用资源 (GRES) 关联性是按套接字粒度处理的。职位安排取决于工作选项;使用检测到的亲和力的组合包括 with --ntasks-per-socket 和 --gpus-per-task --gpus with。--ntasks-per-gpu

Slurm 版本的拓扑行为

AWS PCS 为你配置什么,以及你可以自己配置什么,取决于集群的 Slurm 版本。

来自 Slurm 25.11

通过自定义设置实现 CPU 拓扑

您可以使用Sockets和计算节点组的自Parameters定义 Slurm 设置自己配置 CPU 拓扑。有关更多信息,请参阅 的自定义 Slurm 设置 AWS PCS 计算节点组。

  • 设置Sockets为你希望 Slurm 视为套接字的域名数量。 AWS PCS 会为您计算和设置匹配CoresPerSocket项。该值必须平均分配节点的核心数。

  • 设置Parameters为numa_node_as_socket或l3cache_as_socket以声明域名。

使用l3cache_as_socket,Sockets是必填项: AWS PCS 无法确定实例类型的三级缓存布局,因此您需要提供 L3 缓存域的数量。这适用于每个 Slurm 版本,包括 26.05 及更高版本。

例— L3 缓存域作为套接字在 hpc7a.96xlarge 计算节点组(24 个 L3 缓存域,每个 8 个内核)
aws pcs update-compute-node-group \ --cluster-identifier my-cluster \ --compute-node-group-identifier my-cng-1 \ --slurm-configuration \ 'slurmCustomSettings=[{parameterName=Sockets,parameterValue=24},{parameterName=Parameters,parameterValue=l3cache_as_socket}]'
注意

AWS PCS 验证的是Sockets值的结构,而不是其对硬件的正确性。与节点的实际布局不匹配的值会导致位置不理想,或者导致 GPU 自动检测处于活动状态。INVALID_REG

带有 AutoDetect (可选)的 GPU 拓扑

在 Slurm 25.11 上,默认情况下,GPU 自动检测处于关闭状态。您可以通过AutoDetect向中计算节点组的 GPU 记录中添加来选择加入gresCustomSettings。有关更多信息,请参阅 在中配置自定义 GRES 设置 AWS 个。

AutoDetect 需要配置节点的 CPU 拓扑。在 25.11 上,这意味着按照上一节所述设置Sockets计算节点组。没有它,节点注册的 GPU 关联性不符合默认的每插槽一核布局,Slurm 将其设置为。INVALID_REG

来自 Slurm 26.05

默认 CPU 拓扑

从 Slurm 26.05 开始, AWS PCS 默认配置 NUMA-based CPU 拓扑。 AWS PCS 根据计算节点组的实例类型确定 NUMA 域的数量,并在每个节点Parameters=numa_node_as_socket上设置SocketsCoresPerSocket、和。

以下规则适用:

  • 如果计算节点组使用多个实例类型,则只有当所有实例组都具有相同数量的 NUMA 域时, AWS PCS 才会应用默认拓扑。否则, AWS PCS 将保持未设置拓扑结构,与早期版本的行为相匹配。

  • 如果您Sockets在计算节点组的自定义 Slurm 设置中进行设置,则您的值优先, AWS PCS 不会相加。Parameters使用它来覆盖默认值,例如使用 L3 缓存域作为套接字Parameters=l3cache_as_socket,这仍然需要您的Sockets值。

注意

自动拓扑适用于使用 Slurm 26.05 或更高版本创建的集群,也适用于将它们更新到 26.05 或更高版本时的集群。

默认情况下 GPU 自动检测

从 Slurm 26.05 开始, AWS PCS 默认启用 GPU 自动检测。 AWS 当节点的套接字布局已知时,PCS 会将其添加AutoDetect=full到 GPU 计算节点组生成的 GPU 记录中,这要么是因为 AWS PCS 自动配置了 CPU 拓扑,要么是因为你Sockets自己设置。当插槽布局不可用时, AWS PCS 会在没有插槽布局的情况下发出 GPU 记录AutoDetect,这与早期版本的行为相匹配。有关 AWS PCS 生成的 GPU 记录以及它如何将该记录与您自己的记录进行协调的更多信息,请参阅操作方法 AWS PCS 应用你的 gres.conf 记录。