Slurm記憶體式排程 - AWS ParallelCluster

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Slurm記憶體式排程

從版本 3.2.0 開始, AWS ParallelCluster 支援使用 SlurmSettings/EnableMemoryBasedScheduling叢集配置參數的Slurm記憶體型排程。

注意

從 AWS ParallelCluster 版本 3.7.0 開始,如果您在執行個體中設定多個執行個體類型,則EnableMemoryBasedScheduling可以啟用此功能。

適用於 AWS ParallelCluster 版本 3.2.0 至 3.6 版本。 xEnableMemoryBasedScheduling如果您在執行個體中設定多個執行個體類型,則無法啟用。

警告

當您在Slurm佇列運算資源中指定多個執行個體類型且EnableMemoryBasedScheduling已啟用時,該RealMemory值是可供所有執行個體類型使用的最小記憶體數量。如果您指定的記憶體容量非常不同的執行個體類型,這可能會導致大量未使用的記憶體。

使用時EnableMemoryBasedScheduling: true,Slurm排程器會追蹤每個工作在每個節點上所需的記憶體數量。然後,Slurm排程器會使用此資訊,在同一個計算節點上排程多個工作。節點上作業所需的記憶體總容量不能大於可用節點記憶體。排程器可防止工作使用比提交工作時要求的記憶體更多。

使用時EnableMemoryBasedScheduling: false,工作可能會爭取共用節點上的記憶體,並造成工作失敗和out-of-memory事件。

警告

Slurm對其標籤使用 2 個符號的冪,例如 MB 或 GB。將這些標籤分別讀取為 MiB 和 GiB。

Slurm組態和記憶體型排程

使用EnableMemoryBasedScheduling: true,Slurm設定下列Slurm組態參數:

  • SelectTypeParameters=CR_CPU_Memory (位於《slurm.conf》)。此選項會將節點記憶體設定為中的可消耗資源。Slurm

  • ConstrainRAMSpace=yes在中Slurmcgroup.conf。使用此選項時,工作對記憶體的存取會限制在提交作業時要求的記憶體數量。

注意

設定這兩個選項時,其他數個Slurm組態參數可能會影響Slurm排程器和資源管理員的行為。如需詳細資訊,請參閱 Slurm 文件

Slurm排程器和記憶體型排程

EnableMemoryBasedScheduling: false(預設值)

默認情況下EnableMemoryBasedScheduling,設置為假。如果為 false,則Slurm不會在其排程演算法中包含記憶體做為資源,也不會追蹤作業使用的記憶體。使用者可以指定--mem MEM_PER_NODE選項,以設定工作所需的每個節點的最小記憶體容量。這會強制排程器在排程工作MEM_PER_NODE時選擇RealMemory值至少為的節點。

例如,假設使用者使用提交兩個工作。--mem=5GB如果要求的資源 (例如 CPU 或 GPU) 可供使用,則作業可以在具有 8 GiB 記憶體的節點上同時執行。這兩個作業不會排程在低於 5 GiB 的RealMemory運算節點上。

警告

停用記憶體型排程時,Slurm不會追蹤工作使用的記憶體量。在相同節點上執行的工作可能會爭取記憶體資源,並導致其他工作失敗。

停用記憶體型排程時,建議使用者不要指定--mem-per-cpu--mem-per-gpu選項。這些選項可能會導致行為與說明Slurm文件中描述的不同。

EnableMemoryBasedScheduling: true

設定EnableMemoryBasedScheduling為 true 時,會Slurm追蹤每個工作的記憶體使用量,並防止工作使用超過--mem提交選項要求的記憶體。

在前面的範例中,使用者使用提交兩個工作。--mem=5GB作業無法在具有 8 GiB 記憶體的節點上同時執行。這是因為所需的記憶體總量大於節點上可用的記憶體。

啟用記憶體型排程後,--mem-per-cpu並與Slurm文件中所述的--mem-per-gpu行為一致。例如,使用提交工作--ntasks-per-node=2 -c 1 --mem-per-cpu=2GB。在此情況下,Slurm會為每個節點指派工作總共 4 GiB。

警告

啟用記憶體式排程時,建議使用者在提交工作時加入--mem規格。使用隨附的預設Slurm組態 AWS ParallelCluster,如果沒有包含記憶體選項 (--mem--mem-per-cpu、或--mem-per-gpu),則Slurm會將已配置節點的整個記憶體指派給作業,即使它只要求部分其他資源 (例如 CPU 或 GPU) 也一樣。這有效地防止節點共用,直到工作完成,因為沒有記憶體可供其他工作使用。發生這種情況是因Slurm為在工作提交DefMemPerNode時未提供記憶體規格時,將工作每個節點的記憶體設定為。此參數的預設值為 0,並指定對節點記憶體的無限制存取。

如果同一佇列中有多種具有不同記憶體數量的運算資源,則不含記憶體選項的工作可能會在不同節點上指派不同數量的記憶體。這取決於排程器可供工作使用的節點。使用者可以在Slurm組態檔案中的叢集DefMemPerNode或磁碟分割層級為選項 (例如或) 定義自訂值 DefMemPerCPU,以防止此行為發生。

Slurm RealMemory 和 AWS ParallelCluster SchedulableMemory

使用隨附的Slurm組態 AWS ParallelCluster,將Slurm解譯RealMemory為每個節點可供工作使用的記憶體容量。從版本 3.2.0 開始,依預設,會 AWS ParallelCluster 設定RealMemoryAmazon EC2 執行個體類型中列出的 95% 記憶體,並由 Amazon EC2 API DescribeInstanceTypes傳回。

停用記憶體型排程時,排程Slurm器會在使用者提交具有--mem指定的工作時使用RealMemory來篩選節點。

啟用記憶體型排程時,排程Slurm器會解譯RealMemory為運算節點上執行的工作可用的最大記憶體容量。

預設設定可能不是所有執行個體類型的最佳選擇:

  • 此設定可能會高於節點實際存取的記憶體數量。當計算節點是小型執行個體類型時,就會發生這種情

  • 此設定可能低於節點實際可存取的記憶體數量。當計算節點是大型執行個體類型時,就可能會發生這種情況,並且可能導致大量未使用的記憶體。

您可以使用 SlurmQueuesComputeResources//SchedulableMemory微調運算節點所RealMemory AWS ParallelCluster 配置的值。若要覆寫預設值,請為叢集配置SchedulableMemory專門定義自訂值。

若要檢查計算節點的實際可用記憶體,請在節點上執行/opt/slurm/sbin/slurmd -C命令。此命令返回節點的硬件配置,包括RealMemory值。如需詳細資訊,請參閱 slurmd -C

請確定計算節點的作業系統處理序有足夠的記憶體。若要執行此操作,請將值設定為低於slurmd -C指令傳回的SchedulableMemory值,以限制工作可用的記憶體。RealMemory