

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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`)`、Slurmパーティションに 1:1 をマッピング`(Scheduling/SlurmQueues)`するキューに編成されます。

コンピューティングリソース内では、クラスターで常に実行する必要があるコンピューティングノード (インスタンス) の最小数 (`MinCount`)、およびコンピューティングリソースがスケールできるインスタンスの最大数 ([`MaxCount`3](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)) を設定できます。

クラスターの作成時またはクラスターの更新時に、 はクラスターで定義された各コンピューティングリソース (`Scheduling/SlurmQueues/ ComputeResources`) `MinCount` に対して で設定された数だけ Amazon EC2 インスタンス AWS ParallelCluster を起動します。クラスター内のコンピューティングリソースの最小ノード数をカバーするために起動されたインスタンスは、***静的ノード***と呼ばれます。静的ノードは、起動されるとクラスター内で永続的となり、特定のイベントや条件が発生しない限り、システムによって終了されることはありません。このようなイベントには、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` の変更などが含まれます。 AWS ParallelCluster バージョン 3.9.0 以降では、キューのサイズを小さくするには、クラスターの更新を行う前にコンピューティングフリートを停止するか、[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` を削除すると、名前が `<Queue/Name>-*-<ComputeResource/Name>-*` であるすべてのコンピューティングノード (静的と動的の両方) が Slurm 設定から削除され、対応する Amazon EC2 インスタンスが終了します。

コンピューティングリソースの `MinCount` パラメータを変更するときは、`MaxCount` が `MinCount` と等しい場合 (静的容量のみ) と `MaxCount` が `MinCount` より大きい場合 (静的容量と動的容量の混合) の 2 つの異なるシナリオを区別できます。

### 静的ノードのみの容量変更
<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]
    ```
  + 更新 (`-30`) を適用した `MinCount` および `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]
  ```
+ 更新 (\+30) を適用した `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]
  ```
+ 更新 (\+30) を適用した `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>]`)。システムは対応する数の 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\_FAIL で失敗し、キューから消えるため、手動で再送信する必要があります。

クラスターのサイズ変更の更新を実行する予定がある場合は、予定した更新中に削除対象のノードでジョブが実行されないようにすることができます。これを行うには、ノードをメンテナンス中に削除するように設定します。メンテナンス中にノードを設定しても、ノードで既に実行しているジョブには最終的に影響しないことに注意してください。

予定したクラスターのサイズ変更の更新で、ノード `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]
```

これにより、Slurm 予約が `maint_for_update` という名前でノード `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)`
+ 更新された Slurm パーティション設定を AWS ParallelCluster 設定から生成する
+ `slurmctld` を再起動する (Chef サービスレシピを使用して実行)
+ `slurmctld` のステータスを確認する `(systemctl is-active --quiet slurmctld.service)`
+ Slurm 設定を再ロードする `(scontrol reconfigure)`
+ 起動する: `clustermgtd (supervisorctl start clustermgtd)`

Slurm の詳細については、「[https://slurm.schedmd.com](https://slurm.schedmd.com)」を参照してください。ダウンロードについては、「[https://github.com/SchedMD/slurm/tags](https://github.com/SchedMD/slurm/tags)」を参照してください。ソースコードについては、「[https://github.com/SchedMD/slurm](https://github.com/SchedMD/slurm)」を参照してください。

## サポートされているクラスターと SLURM バージョン
<a name="cluster-slurm-version-table"></a>

次の表に、 がサポートする AWS AWS ParallelCluster および Slurmのバージョンを示します。


| AWS ParallelCluster バージョン (複数可) | サポートされる 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)