共用方式為


Slurm

CycleCloud Slurm 叢集專案 README

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

若要在 CycleCloud 叢集上啟用 Slurm,請在叢集定義的組態區段中修改 run_list 。 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 會在叢集中預先填入執行的節點。 由於此預先填入,您必須在對叢集進行任何變更之後,於 Slurm 排程器節點上執行命令,例如變更自動調整限制或 VM 類型。

進行叢集變更

在 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 命令在此情況下會列印警告,但不會因錯誤而退出。 如果您在節點執行時變更 MPI 分割區中節點的虛擬機(例如虛擬機大小、映像或 cloud-init),則新節點將無法啟動,並且您會看到錯誤訊息 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 分割區中節點的虛擬機(例如虛擬機大小、映像或 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_nodesscale 命令來進行變更。 請確定 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 會保留 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 使用者使用 11100 的 UID 和 GID,而 munge 使用者則使用 11101。 如果這些預設值造成與另一個使用者或群組的衝突,您可以覆寫它們。

若要覆寫 UID 和 GID 值,請選取兩個節點的scheduler按鈕:

編輯排程器

編輯排程器

以及 execute 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.autoscale 預設值:false。 每個節點陣列的特定設定,用於控制 Slurm 是否會自動停止和啟動該節點陣列中的節點。
slurm.hpc 預設值:true。 針對每一個節點陣列的設定,控制節點陣列中的節點是否位於相同的放置群組中。 主要用於採用 InfiniBand 技術的 VM 系列的節點陣列。 只有在 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。 針對每個 nodearray 的設定以透過超線程 vCPU 調控排程。 設定為 false 以在 CPUs=vcpus 中設定 cyclecloud.conf
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 使用者的使用者 ID。
munge.user.gid 預設值:11101。 MUNGE 使用者的群組標識碼。

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

屬性 說明
cyclecloud.cluster.autoscale.stop_enabled 啟用此節點上的自動停止。 是/否
cyclecloud.cluster.autoscale.idle_time_after_jobs 節點在工作自動停止前,完成工作之後閑置的時間量 (以秒為單位)。
cyclecloud.cluster.autoscale.idle_time_before_jobs 節點在自動停止之前的閒置時間(以秒為單位),即在完成所有作業後到停止前的時間。