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 會預先填入叢集中執行中的節點。 由於預先填入,您必須在對叢集進行任何變更之後,於 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 中。
這很重要
如果您所做的任何變更(例如 VM 大小、映像或 cloud-init)會影響 MPI 分區中節點的 VM,則必須先終止所有節點。
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 會保留 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 使用者使用 11100 的 UID 和 GID,而 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 的 彈性運算 功能。 若要排解自動調整問題,您可以檢查排程器節點上的一些 log 檔。 第一個是藉由檢查 /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'。這是針對每個 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』。 利用虛擬CPU超線程進行排程控制的每個節點陣列設置。 設定為 『false』 以在 cyclecloud.conf 中設定 CPUUs=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(停止功能已啟用) | 是否在此節點上啟用自動停止? 是/否 |
cyclecloud.cluster.autoscale.工作後閒置時間 | 節點在完成作業後閒置的時間長度(以秒為單位),然後再將其縮減。 |
cyclecloud.cluster.autoscale.idle_time_before_jobs | 節點在完成作業並縮減之前的閒置時間量(以秒為單位)。 |