

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

# Slurm Workload Manager (`slurm`)
<a name="slurm-workload-manager-v3"></a>

## 叢集容量大小和更新
<a name="cluster-capacity-size-and-update"></a>

叢集的容量是由叢集可以擴展的運算節點數量所定義。運算節點由 AWS ParallelCluster 組態 中運算資源內定義的 Amazon EC2 執行個體提供支援`(Scheduling/SlurmQueues/`ComputeResources`)`，並組織成`(Scheduling/SlurmQueues)`對應 1：1 到Slurm分割區的佇列。

在運算資源中，您可以設定必須在叢集 () 中持續執行的運算節點 （執行個體） 數目下限，以及運算資源可擴展至 ([`MaxCount`3](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)`MinCount`) 的執行個體數目上限。

在叢集建立時間或叢集更新時， `MinCount`會針對叢集中定義的每個運算資源 (`Scheduling/SlurmQueues/ ComputeResources`)，依在 中設定的數目 AWS ParallelCluster 啟動 Amazon EC2 執行個體。啟動以涵蓋叢集中運算資源最小數量節點的執行個體稱為***靜態節點**。*啟動後，除非發生特定事件或條件，否則靜態節點應持續存在於叢集中，系統不會終止這些節點。例如，這類事件包括 Slurm或 Amazon EC2 運作狀態檢查失敗，以及Slurm節點狀態變更為 DRAIN 或 DOWN。

在 `1`到 `‘MaxCount - MinCount’`(`MaxCount ` *減去*` MinCount)` ，隨需啟動以處理叢集負載增加的 Amazon EC2 執行個體，稱為***動態節點***。 它們的性質是暫時性的，它們會啟動以提供待定任務，並在它們在叢集組態`Scheduling/SlurmSettings/ScaledownIdletime`中 定義的一段時間內保持閒置後終止 （預設值：10 分鐘）。

靜態節點和動態節點符合下列命名結構描述：
+ 靜態節點`<Queue/Name>-st-<ComputeResource/Name>-<num>`，其中 `<num> = 1..ComputeResource/MinCount`
+ 動態節點，`<Queue/Name>-dy-<ComputeResource/Name>-<num>`其中 `<num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)`

例如，假設有下列 AWS ParallelCluster 組態：

```
Scheduling:  
    Scheduler: Slurm  
    SlurmQueues:    
        - Name: queue1      
            ComputeResources:        
                - Name: c5xlarge          
                    Instances:            
                        - InstanceType: c5.xlarge          
                        MinCount: 100          
                        MaxCount: 150
```

下列節點將在 中定義 Slurm

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

當運算資源具有 時`MinCount == MaxCount`，所有對應的運算節點都會是靜態的，而且所有執行個體都會在叢集建立/更新時間啟動，並保持啟動和執行。例如：

```
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue1
      ComputeResources:
        - Name: c5xlarge
          Instances:
            - InstanceType: c5.xlarge
          MinCount: 100
          MaxCount: 100
```

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

## 叢集容量更新
<a name="cluster-capacity-update"></a>

叢集容量的更新包括新增或移除佇列、運算資源或變更運算資源`MinCount/MaxCount`的 。從 3.9.0 AWS ParallelCluster 版開始，減少佇列的大小需要停止運算機群，或將 的 [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 設定為 TERMINATE，才能進行叢集更新。在下列情況下，不需要停止運算機群或將 [QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 設定為 TERMINATE：
+ 將新佇列新增至排程/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)

   
+ 將新的運算資源`Scheduling/SlurmQueues/ComputeResources`新增至佇列
+ 增加運算資源`MaxCount`的
+ 增加運算資源的 MinCount，並增加相同運算資源至少相同數量的 MaxCount 

## 考量和限制
<a name="considerations-limitations"></a>

本節旨在概述調整叢集容量時應考慮的任何重要因素、限制或限制。
+ 從名稱為 `Scheduling/SlurmQueues`的所有運算節點移除佇列時`<Queue/Name>-*`，靜態和動態都會從Slurm組態中移除，且對應的 Amazon EC2 執行個體將會終止。
+ `Scheduling/SlurmQueues/ComputeResources` 從佇列移除運算資源時，所有名稱為 的運算節點都會從Slurm組態中移除`<Queue/Name>-*-<ComputeResource/Name>-*`，且對應的 Amazon EC2 執行個體也會終止。

變更運算資源的 `MinCount` 參數時，我們可以區分兩種不同的案例：如果 `MaxCount` 保持等於 `MinCount`（僅限靜態容量），以及如果 `MaxCount` 大於 `MinCount`（混合靜態和動態容量）。

### 僅限靜態節點的容量變更
<a name="capacity-changes-static-only"></a>
+ 如果 `MinCount == MaxCount` ，增加 `MinCount`（和 ) `MaxCount` 時，叢集的設定方式是將靜態節點數量擴展到 的新值，`MinCount``<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>`而且系統會繼續嘗試啟動 Amazon EC2 執行個體，以滿足新的必要靜態容量。
+ 如果 `MinCount == MaxCount` ，則在減少 `MinCount`（和 `MaxCount` ) 數量 N 時，將透過移除最後一個 N 個靜態節點來設定叢集，`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]`且系統會終止對應的 Amazon EC2 執行個體。
  + 初始狀態 `MinCount = MaxCount = 100`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
    ```
  + 在 `MinCount`和 `-30`上更新 `MaxCount: MinCount = MaxCount = 70`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
    ```

### 混合節點的容量變更
<a name="capacity-changes-mixed-nodes"></a>

如果 `MinCount < MaxCount`，增加`MinCount`數量 N 時 （假設 `MaxCount`將保持不變），叢集的設定方式是將靜態節點數目擴展到 `MinCount`() `old_MinCount + N` 的新值： `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>` 且系統會繼續嘗試啟動 Amazon EC2 執行個體，以滿足新的必要靜態容量。此外，為了滿足運算資源的`MaxCount`容量，叢集組態會透過*移除最後一個 N 個動態節點*來更新： `<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]`且系統會終止對應的 Amazon EC2 執行個體。
+ 初始狀態： `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 將 \$130 更新為 `MinCount : MinCount = 130 (MaxCount = 150)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

如果 `MinCount < MaxCount`，在增加 `MinCount`且數量`MaxCount`相同 N 時，叢集的設定方式是將靜態節點數量擴展到 `MinCount`() `old_MinCount + N` 的新值： ，`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>`而且系統會繼續嘗試啟動 Amazon EC2 執行個體，以滿足新的必要靜態容量。此外，不會對動態節點數量進行任何變更，以遵守新的

 `MaxCount` 值。
+ 初始狀態： `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 將 \$130 更新為 `MinCount : MinCount = 130 (MaxCount = 180)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

如果 `MinCount < MaxCount`，則在減少`MinCount`數量 N 時 （假設 `MaxCount`將保持不變），則會透過移除最後一個 N 個靜態節點靜態節點來設定叢集，`<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>`且系統會終止對應的 Amazon EC2 執行個體。此外，為了遵守運算資源的`MaxCount`容量，透過擴展動態節點的數量來填補間隙來更新叢集組態`MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]`。在此情況下，由於這些是動態節點，除非排程器在新節點上有待定任務，否則不會啟動新的 Amazon EC2 執行個體。
+ 初始狀態： `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 在 上更新 -30 `MinCount : MinCount = 70 (MaxCount = 120)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-80]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

如果 `MinCount < MaxCount`，則在減少 `MinCount`和相同數量`MaxCount`的 N 時，將透過移除最後一個 N 個靜態節點來設定叢集，`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>]`且系統會終止對應的 Amazon EC2 執行個體。

 此外，不會對動態節點數量進行任何變更，以遵守新`MaxCount`值。
+ 初始狀態： `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 在 上更新 -30 `MinCount : MinCount = 70 (MaxCount = 120)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

如果 `MinCount < MaxCount`，則在減少`MaxCount`數量 N 時 （假設 `MinCount`將保持不變），叢集將透過移除最後一個 N 個動態節點進行設定，`<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]`如果靜態節點受到 running.No 影響，系統會終止對應的 Amazon EC2 執行個體。
+ 初始狀態： `MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 在 上更新 -30 `MaxCount : MinCount = 100 (MaxCount = 120)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```

## 對任務的影響
<a name="impacts-on-jobs"></a>

在移除節點並終止 Amazon EC2 執行個體的所有情況下，除非沒有其他節點滿足任務需求，否則在移除的節點上執行的 sbatch 任務會重新排入佇列。在此情況下，任務會失敗，狀態為 NODE\$1FAIL，並從佇列中消失，且必須手動重新提交。

如果您打算執行叢集調整大小更新，您可以防止任務在計劃更新期間將移除的節點中執行。這可以透過設定要在維護中移除的節點來實現。請注意，在維護中設定節點不會影響最終已在節點中執行的任務。

假設透過計劃的叢集調整大小更新，您將移除節點 `qeueu-st-computeresource-[9-10`】。您可以使用下列命令建立Slurm保留

```
sudo -i scontrol create reservation ReservationName=maint_for_update user=root starttime=now duration=infinite flags=maint,ignore_jobs nodes=qeueu-st-computeresource-[9-10]
```

這將在節點 `maint_for_update` 上建立名為 的Slurm保留`qeueu-st-computeresource-[9-10]`。從建立保留開始，就無法再將任何任務執行到節點 `qeueu-st-computeresource-[9-10]`。請注意，保留不會阻止任務最終配置到節點 `qeueu-st-computeresource-[9-10]`。

叢集調整大小更新後，如果僅在調整大小更新期間移除的節點上設定Slurm保留，系統會自動刪除維護保留。如果您改為在叢集調整大小更新後仍存在的節點上建立Slurm保留，我們可能會想要在執行調整大小更新後移除節點上的維護保留，方法是使用下列命令 

```
sudo -i scontrol delete ReservationName=maint_for_update
```

如需Slurm保留的其他詳細資訊，請參閱[此處](https://slurm.schedmd.com/reservations.html)的官方 SchedMD 文件。

## 容量變更的叢集更新程序
<a name="cluster-update-process"></a>

在排程器組態變更時，會在叢集更新程序期間執行下列步驟：
+ 停止 AWS ParallelCluster `clustermgtd (supervisorctl stop clustermgtd)`
+ 從 AWS ParallelCluster 組態產生更新的Slurm分割區組態
+ 重新啟動 `slurmctld`（透過 Chef 服務配方完成）
+ 檢查`slurmctld`狀態 `(systemctl is-active --quiet slurmctld.service)`
+ 重新載入Slurm組態 `(scontrol reconfigure)`
+ 啟動 `clustermgtd (supervisorctl start clustermgtd)`

如需 的詳細資訊Slurm，請參閱 https：//[https://slurm.schedmd.com](https://slurm.schedmd.com)。如需下載，請參閱 https：//[https://github.com/SchedMD/slurm/tags](https://github.com/SchedMD/slurm/tags)。如需來源碼，請參閱 https：//[https://github.com/SchedMD/slurm](https://github.com/SchedMD/slurm)。

## 支援的叢集和 SLURM 版本
<a name="cluster-slurm-version-table"></a>

下表列出 AWS 支援的 AWS ParallelCluster 和 Slurm版本。


| AWS ParallelCluster version(s) | 支援的 Slurm 版本 | 
| --- | --- | 
|  3.13.0  |  24.05.07  | 
|  3.12.0  |  23.11.10  | 
|  3.11.0  |  23.11.10  | 
|  3.9.2、3.9.3、3.10.0  |  23.11.7  | 
|  3.9.0、3.9.1  |  23.11.4  | 
|  3.8.0  |  23.02.7  | 
|  3.7.2  |  23.02.6  | 
|  3.7.1  |  23.02.5  | 
|  3.7.0  |  23.02.4  | 
|  3.6.0、3.6.1  |  23.02.2  | 
|  3.5.0、3.5.1  |  22.05.8  | 
|  3.4.0、3.4.1  |  22.05.7  | 
|  3.3.0、3.3.1  |  22.05.5  | 
|  3.1.4、3.1.5、3.2.0、3.2.1  |  21.08.8-2  | 
|  3.1.2、3.1.3  |  21.08.6  | 
|  3.1.1  |  21.08.5  | 
|  3.0.0  |  20.11.8  | 

**Topics**
+ [叢集容量大小和更新](#cluster-capacity-size-and-update)
+ [叢集容量更新](#cluster-capacity-update)
+ [考量和限制](#considerations-limitations)
+ [對任務的影響](#impacts-on-jobs)
+ [容量變更的叢集更新程序](#cluster-update-process)
+ [支援的叢集和 SLURM 版本](#cluster-slurm-version-table)
+ [多個佇列的組態](configuration-of-multiple-queues-v3.md)
+ [Slurm 適用於多個佇列模式的 指南](multiple-queue-mode-slurm-user-guide-v3.md)
+ [Slurm 叢集保護模式](slurm-protected-mode-v3.md)
+ [Slurm 叢集快速容量不足容錯移轉](slurm-short-capacity-fail-mode-v3.md)
+ [Slurm 記憶體型排程](slurm-mem-based-scheduling-v3.md)
+ [使用 Slurm 進行多個執行個體類型配置](slurm-multiple-instance-allocation-v3.md)
+ [動態節點的叢集擴展](scheduler-node-allocation-v3.md)
+ [Slurm 使用 會計 AWS ParallelCluster](slurm-accounting-v3.md)
+ [Slurm 組態自訂](slurm-configuration-settings-v3.md)
+ [Slurm 與 `prolog``epilog`](slurm-prolog-epilog-v3.md)
+ [叢集容量大小和更新](slurm-cluster-capacity-size-and-update.md)