你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Slurm
Slurm 是高度可配置开放源代码工作负荷管理器。 有关概述,请参阅 Slurm 项目网站 。
注意
从 CycleCloud 8.4.0 开始,Slurm 集成已重写,以支持新的特性和功能。 有关详细信息,请参阅 Slurm 3.0 文档。
可以通过修改群集定义的配置部分中的“run_list”,在 CycleCloud 群集上轻松启用 Slurm。 Slurm 群集的两个基本组件是“master” (或“scheduler”) 节点(提供运行 Slurm 软件的共享文件系统)和“execute”节点(这些节点是装载共享文件系统和执行提交的作业的主机)。 例如,简单的群集模板代码片段可能如下所示:
[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 群集的两个基本组件是“scheduler”节点,该节点提供运行 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 计划程序节点上运行 sudo -i
) 以重新生成 slurm.conf
并更新群集中的节点:
/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale
注意
对于 CycleCloud 版本 < 7.9.10, cyclecloud_slurm.sh
脚本位于 /opt/cycle/jetpack/system/bootstrap/slurm 中。
重要
如果所做的任何更改会影响 MPI 分区 (节点的 VM,例如 VM 大小、映像或 cloud-init) , 则必须 首先终止所有节点。
在这种情况下, 命令 remove_nodes
会输出警告,但它不会退出并显示错误。
如果存在正在运行的节点,则会出现启动新节点时的错误 This node does not 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 does not 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 保留 VM 中报告的可用内存的 5%,但可以通过将 设置为 slurm.dampen_memory
要保留的内存百分比,在群集模板中重写此值。 例如,若要保留 VM 内存的 20%,请执行以下操作:
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
和 nodearray:
并将以下属性添加到 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 的配置选项 | 说明 |
---|---|
slurm.version | 默认值:“18.08.7-1”。 这是要安装和运行的 Slurm 版本。 这是当前默认且 唯 一的选项。 将来可能支持 Slurm 软件的其他版本。 |
slurm.autoscale | 默认值:“false”。 这是一个按节点数组设置,用于控制 Slurm 是否应自动停止和启动此节点数组中的节点。 |
slurm.hpc | 默认值:“true”。 这是一个按节点数组设置,用于控制是否将节点数组中的节点放置在同一放置组中。 主要用于将 VM 系列与 InfiniBand 配合使用的节点数组。 仅当 slurm.autoscale 设置为“true”时才适用。 |
slurm.default_partition | 默认值:“false”。 这是一个按节点数组设置,用于控制节点数组是否应是未显式请求分区的作业的默认分区。 |
slurm.dampen_memory | 默认值:“5”。 OS/VM 开销要保留的内存百分比。 |
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 中设置 CPU=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 支持跨计划程序的标准自动停止属性集:
特性 | 说明 |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | 是否在此节点上启用了自动停止? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | 节点在完成作业后在纵向缩减之前处于空闲状态的时间 (以秒为单位) 。 |
cyclecloud.cluster.autoscale.idle_time_before_jobs | 节点在纵向缩减之前完成作业之前处于空闲状态的时间 (以秒为单位) 。 |