你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Slurm 是高度可配置的开源工作负荷管理器。 有关详细信息,请参阅 Slurm 项目网站概述。
注释
从 CycleCloud 8.4.0 开始,Slurm 集成被重写以支持新功能。 有关详细信息,请参阅 Slurm 3.0 文档。
若要在 CycleCloud 群集上启用 Slurm,请修改群集定义的配置部分中提供的“run_list”。 Slurm 群集有两个主要部分:主节点(或计划程序)节点,该节点在共享文件系统上运行 Slurm 软件,以及执行节点,这些节点装载该文件系统并运行提交的作业。 例如,简单的群集模板代码片段可能如下所示:
[cluster custom-slurm]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:master]]]
[[[configuration]]]
run_list = role[slurm_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_master_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
可以通过修改群集定义的配置部分中提供的“run_list”,在 CycleCloud 群集上轻松启用 Slurm。 Slurm 群集的两个基本组件是“计划程序”节点,它提供运行 Slurm 软件的共享文件系统,以及作为装载共享文件系统并执行提交的作业的主机的“执行”节点。 例如,简单的群集模板代码片段可能如下所示:
[cluster custom-slurm]
[[node scheduler]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:scheduler]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[cluster-init cyclecloud/slurm:default]]]
[[[cluster-init cyclecloud/slurm:execute]]]
[[[configuration]]]
run_list = role[slurm_scheduler_role]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = true
slurm.default_partition = true
编辑现有 Slurm 群集
在 CycleCloud 版本 7.8 及更高版本中运行的 Slurm 群集实现自动缩放 API 的更新版本,使群集能够利用多个节点数组和分区。 为了在 Slurm 中促进此功能,CycleCloud 会预填充群集中执行的节点。 由于预填充,需要在对群集进行任何更改(例如自动缩放限制或 VM 类型)后,在 Slurm 计划程序节点上运行命令。
对群集进行更改
在 CycleCloud 中部署的 Slurm 群集包含有助于更改的脚本。 对群集进行任何更改后,在 Slurm 调度节点上以 root 身份运行下一个命令(例如,通过运行 sudo -i
),以重建 slurm.conf
并更新群集中的节点。
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
注释
对于 7.9.10 之前的 CycleCloud 版本,脚本 cyclecloud_slurm.sh
位于 /opt/cycle/jetpack/system/bootstrap/slurm 中。
重要
如果要进行任何会影响 MPI 分区中节点 VM 的更改(例如 VM 大小、映像或 cloud-init),则必须先将节点全部终止。
此命令 remove_nodes
在此示例中打印警告,但不会退出并显示错误。
如果存在正在运行的节点,则会出现新节点启动时的错误 This node doesn't match existing scaleset attribute
。
/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes
注释
对于 CycleCloud 版本 < 8.2,脚本 cyclecloud_slurm.sh
位于 /opt/cycle/jetpack/system/bootstrap/slurm 中。
如果要进行会影响 MPI 分区中节点 VM 的更改(例如 VM 大小、映像或 cloud-init),而这些节点正在运行中,那么在启动新节点时,你会收到错误 This node doesn't match existing scaleset attribute
。 出于此原因, apply_changes
该命令确保节点已终止,如果未终止,则返回此错误消息: 在应用更改之前,必须完全终止以下节点。
如果要进行更改不会影响 MPI 节点的 VM 属性,则无需首先终止正在运行的节点。 在这种情况下,可以使用以下两个命令进行更改:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
注释
该 apply_changes
命令仅在 CycleCloud 8.3+ 中存在,因此在早期版本中进行更改的唯一方法是使用开销 remove_nodes
+ scale
命令。 确保 remove_nodes
命令不会打印有关需要终止的节点的警告。
创建补充分区
Azure CycleCloud 附带的默认模板有两个分区(hpc
和 htc
),你可以定义直接映射到 Slurm 分区的自定义节点数组。 例如,若要创建 GPU 分区,请将下一部分添加到群集模板:
[[nodearray gpu]]
MachineType = $GPUMachineType
ImageName = $GPUImageName
MaxCoreCount = $MaxGPUExecuteCoreCount
Interruptible = $GPUUseLowPrio
AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
[[[cluster-init cyclecloud/slurm:execute:2.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
内存设置
CycleCloud 自动设置 Slurm 用于计划目的的可用内存量。 由于可用内存可能因 Linux 内核选项而略有不同,并且 OS 和 VM 使用少量内存,CycleCloud 会自动减少 Slurm 配置中的内存值。 默认情况下,CycleCloud 会预留虚拟机中所报告可用内存的 5%,但可以通过在群集模板中将 slurm.dampen_memory
设置为要预留的内存百分比来改写此值。 例如,要预留 20% 的 VM 内存,请执行以下操作:
slurm.dampen_memory=20
为特定节点或分区禁用自动缩放
虽然内置的 CycleCloud“KeepAlive”功能目前不适用于 Slurm 群集,但可以通过直接编辑 slurm.conf 文件来禁用正在运行的 Slurm 群集的自动缩放。 可以将单个节点或整个分区排除在自动缩放范围之外。
排除某个节点
若要将一个或多个节点排除在自动缩放范围之外,请将 SuspendExcNodes=<listofnodes>
添加到 Slurm 配置文件。 例如,若要从hpc
分区中排除节点 1 和 2,请添加以下项:/sched/slurm.conf
SuspendExcNodes=hpc-pg0-[1-2]
然后重启slurmctld
服务,以使新配置生效。
排除某个分区
从自动缩放中排除整个分区类似于排除节点。 若要排除整个 hpc
分区,请将下列内容添加到 /sched/slurm.conf
SuspendExcParts=hpc
然后重启 slurmctld
服务。
故障排除
Slurm 和 Munge 用户的 UID 冲突
默认情况下,此项目对 Slurm 用户使用 UID 和 GID 为 11100,对于 munge 用户使用 11101。 如果这会导致与另一个用户或组发生冲突,则可能会重写这些默认值。
要改写 UID 和 GID,请单击 scheduler
节点的编辑按钮:
以及 execute
节点数组:
将下一个属性添加到 Configuration
节:
slurm.user.name = slurm
slurm.user.uid = 11100
slurm.user.gid = 11100
munge.user.name = munge
munge.user.uid = 11101
munge.user.gid = 11101
自动缩放
CycleCloud 使用 Slurm 的 弹性计算 功能。 要调试自动缩放问题,可以检查计划程序节点上的一些日志。 首先,通过检查 /var/log/slurmctld/slurmctld.log
来确保进行省电恢复调用。 您应该会看到如下几行:
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
要检查的另一个日志是 /var/log/slurmctld/resume.log
。 如果恢复步骤失败,会出现 /var/log/slurmctld/resume_fail.log
。 如果出现有关未知或无效节点名称的消息,请确保先按照上述“更改群集”部分中的步骤操作,然后再将节点添加到群集。
Slurm 配置参考
下面是可切换来自定义功能的 Slurm 特定配置选项:
Slurm 特定配置选项 | DESCRIPTION |
---|---|
slurm.version | 默认值:“18.08.7-1”。 这会设置要安装和运行的 Slurm 版本。 现在,它是默认选项, 也是唯一 选项。 将来可能支持更多版本。 |
slurm.autoscale | 默认值:“false”。 一个每节点数组设置,用于控制 Slurm 是否应在此节点数组中自动停止和启动节点。 |
slurm.hpc | 默认值:“true”。一个每节点数组设置,用于控制节点数组中的节点是否放置在同一放置组中。 主要用于使用带有 InfiniBand 的 VM 系列的节点数组。 仅当 slurm.autoscale 设置为“true”时,它才适用。 |
slurm.default_partition | 默认值:“false”。 一个按节点数组设置的选项,用于控制该节点数组是否应为未明确请求分区的作业的默认分区。 |
slurm.dampen_memory | 默认值:“5”。 为操作系统/虚拟机资源开销保留的内存百分比。 |
slurm.suspend_timeout | 默认值:“600”。 暂停调用与何时可以再次使用该节点之间的时间(以秒为单位)。 |
slurm.resume_timeout | 默认值:“1800”。 等待节点成功启动的时间(以秒为单位)。 |
slurm.install | 默认值:“true”。 确定在节点启动时是否安装了 Slurm('true' 表示已安装)。 如果在自定义映像中安装了 Slurm,则此配置选项应设置为“false”(proj 版本 2.5.0+)。 |
slurm.use_pcpu | 默认值:“true”。 一个按节点数组设置的选项,用于控制超线程 vcpu 的调度。 设置为“false”以在 cyclecloud.conf 中设置 CPUs=vcpus。 |
slurm.user.name | 默认值:“slurm”。 要使用的 Slurm 服务的用户名。 |
slurm.user.uid | 默认值:“11100”。 Slurm 用户所需使用的用户 ID。 |
slurm.user.gid | 默认值:“11100”。 用于 Slurm 用户的组 ID。 |
munge.user.name | 默认值:“munge”。 要使用的 MUNGE 身份验证服务的用户名。 |
munge.user.uid | 默认值:“11101”。 用于 MUNGE 用户的用户 ID。 |
munge.user.gid | 默认值:“11101”。 用于 MUNGE 用户的组 ID。 |
CycleCloud 支持在不同计划程序之间通用的标准自动停止属性集。
特征 | DESCRIPTION |
---|---|
cyclecloud.cluster.autoscale.stop_enabled(停止自动扩展已启用) | 是否在此节点上启用自动停止? [真/假] |
自动缩放集群的作业后空闲时间 | 节点在完成作业后处于空闲状态的时间(以秒为单位),然后再进行缩减规模。 |
自动扩展.集群.作业前的空闲时间 | 节点在完成作业前处于空闲状态的时间(以秒为单位),然后进行缩减。 |