你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Slurm

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 附带的默认模板有两个分区(hpchtc),你可以定义直接映射到 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(停止自动扩展已启用) 是否在此节点上启用自动停止? [真/假]
自动缩放集群的作业后空闲时间 节点在完成作业后处于空闲状态的时间(以秒为单位),然后再进行缩减规模。
自动扩展.集群.作业前的空闲时间 节点在完成作业前处于空闲状态的时间(以秒为单位),然后进行缩减。