共用方式為


Slurm

Slurm 是高度可設定開放原始碼工作負載管理員。 如需概觀,請參閱 Slurm 專案網站

注意

自 CycleCloud 8.4.0 起,Slurm 整合已重寫以支援新功能。 如需詳細資訊,請參閱 Slurm 3.0 檔。

您可以在叢集定義的組態區段中修改 「run_list」,輕鬆地在 CycleCloud 叢集上啟用 Slurm。 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 版和更新版本中執行的叢集會實作更新版本的自動調整 API,讓叢集能夠利用多個 nodearray 和分割區。 為了在 Slurm 中加速這項功能,CycleCloud 會預先填入叢集中的執行節點。 因此,在對叢集進行任何變更之後,您必須在 Slurm 排程器節點上執行命令,例如自動調整限制或 VM 類型。

進行叢集變更

在 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 隨附的預設範本有兩個分割區 (hpchtc) ,而且您可以定義直接對應至 Slurm 分割區的自訂 nodearray。 例如,若要建立 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 中覆寫此值。 例如,若要保留 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 編輯按鈕:

編輯排程器編輯排程

編輯排程器編輯排程

executenodearray:編輯 Nodearray 編輯 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

Autoscale

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'。 這是個別 nodearray 設定,可控制 Slurm 是否應該在此 nodearray 中自動停止和啟動節點。
slurm.hpc 預設值:'true'。 這是個別 nodearray 設定,可控制 nodearray 中的節點是否會放在相同的放置群組中。 主要用於搭配 InfiniBand 使用 VM 系列的 nodearray。 只有在 slurm.autoscale 設定為 'true' 時才適用。
slurm.default_partition 預設值:'false'。 這是個別的 nodearray 設定,可控制 nodearray 是否應為未明確要求資料分割之作業的預設分割區。
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 來控制排程的個別 nodearray 設定。 設定為 'false' 以在 cyclecloud.conf 中設定 CPU=vcpus。
slurm.user.name 預設值:'slurm'。 這是要使用的 Slurm 服務使用者名稱。
slurm.user.uid 預設值:'11100'。 要用於 Slurm 使用者的使用者識別碼。
slurm.user.gid 預設值:'11100'。 要用於 Slurm 使用者的群組識別碼。
munge.user.name 預設值:'munge'。 這是要使用的 MUNGE 驗證服務使用者名稱。
munge.user.uid 預設值:'11101'。 要用於 MUNGE 使用者的使用者識別碼。
munge.user.gid 預設值:'11101'。 要用於 MUNGE 使用者的群組識別碼。

CycleCloud 支援跨排程器的標準自動停止屬性集:

屬性 描述
cyclecloud.cluster.autoscale.stop_enabled 此節點上是否已啟用自動停止功能? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs 節點在相應減少之前完成作業之後,) 以秒為單位的時間量 (閒置。
cyclecloud.cluster.autoscale.idle_time_before_jobs 節點在相應減少作業之前,) 以秒為單位 (的時間量。