Slurm は、高度に構成可能なオープン ソース ワークロード マネージャーです。 詳細については、 Slurm プロジェクト サイトの概要を参照してください。
注
CycleCloud 8.4.0 以降では、新機能をサポートするために Slurm 統合が書き換えられました。 詳細については、 Slurm 3.0 のドキュメントを参照してください。
CycleCloud クラスターで Slurm を有効にするには、クラスター定義の構成セクションで使用可能な "run_list" を変更します。 Slurm クラスターには、共有ファイル システムで Slurm ソフトウェアを実行するマスター (またはスケジューラ) ノードと、そのファイル システムをマウントして送信されたジョブを実行する実行済みノードの 2 つの主要な部分があります。 たとえば、単純なクラスター テンプレート スニペットは次のようになります。
[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 クラスターの 2 つの基本的なコンポーネントは、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 クラスターでは、クラスターが複数の nodearray とパーティションを利用できるようにする、自動スケール API の更新バージョンが実装されています。 Slurm でこの機能を容易にするために、CycleCloud はクラスター内で実行されるノードを事前に設定します。 事前設定のため、自動スケールの制限や VM の種類など、クラスターに変更を加えてから、Slurm スケジューラ ノードでコマンドを実行する必要があります。
クラスターの変更
CycleCloud にデプロイされた Slurm クラスターには、変更を容易にするスクリプトが含まれています。 クラスターに変更を加えてから、Slurm スケジューラ ノードで次のルート (たとえば、 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 にあります。
Von Bedeutung
MPI パーティション内のノード (VM サイズ、イメージ、cloud-init など) の 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 サイズ、イメージ、cloud-init など) の VM に影響を与える変更を行い、ノードが実行されている場合は、新しいノードの起動時に This node doesn't match existing scaleset attribute
エラーが発生します。 このため、 apply_changes
コマンドを実行すると、ノードが確実に終了し、そうでない場合はエラー メッセージで失敗します。 変更を適用する前に、次のノードを完全に終了する必要があります。
MPI ノードの VM プロパティに影響しない変更を行う場合は、最初に実行中のノードを終了する必要はありません。 この場合、次の 2 つのコマンドを使用して変更を行うことができます。
/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 に付属する既定のテンプレートには、2 つのパーティション (hpc
と htc
) があり、Slurm パーティションに直接マップするカスタム nodearray を定義できます。 たとえば、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 クラスターの自動スケーリングを無効にできます。 個々のノードまたはパーティション全体を自動スケーリングから除外できます。
ノードの除外
1 つまたは複数のノードを自動スケーリングから除外するには、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 ユーザーには UID と GID 11100、munge ユーザーには 11101 が使用されます。 これにより、別のユーザーまたはグループとの競合が発生した場合、これらの既定値がオーバーライドされる可能性があります。
UID と GID をオーバーライドするには、 scheduler
ノードの両方の編集ボタンをクリックします。
そして、execute
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
自動スケーリング
CycleCloud では、Slurm の エラスティック コンピューティング機能が 使用されます。 自動スケールの問題をデバッグするには、スケジューラ ノードにいくつかのログを確認できます。 1 つ目は、 /var/log/slurmctld/slurmctld.log
を確認して、省電力の再開呼び出しが行われていることを確認します。 次のような行が表示されます。
[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1
確認するもう 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 がこの nodearray 内のノードを自動的に停止して起動するかどうかを制御する nodearray ごとの設定。 |
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'。 ハイパースレッド化された vcpu を使用してスケジュールを制御するための nodearray ごとの設定。 cyclecloud.conf で CPU=vcpus を設定するには、'false' に設定します。 |
slurm.user.name | 既定値: 'slurm'。 使用する Slurm サービスのユーザー名。 |
slurm.user.uid | 既定値: '11100'。 Slurm ユーザーに使用するユーザー ID。 |
slurm.user.gid | 既定値: '11100'。 Slurm ユーザーに使用するグループ ID。 |
munge.user.name | 既定: 'munge'。 使用する MUNGE 認証サービスのユーザー名。 |
munge.user.uid | 既定値: '11101'。 MUNGE ユーザーに使用するユーザー ID。 |
munge.user.gid | 既定値: '11101'。 MUNGE ユーザーに使用するグループ ID。 |
CycleCloud では、スケジューラ全体でオートストップ属性の標準セットがサポートされています。
特性 | 説明 |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | このノードで自動停止は有効になっていますか? [真/偽] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | ノードがスケールダウンされるまでのジョブの完了後にアイドル状態になるまでの時間 (秒単位)。 |
cyclecloud.cluster.autoscale.ジョブ前待機時間 | ノードがスケールダウンされるまで、ジョブを完了する前にアイドル状態である時間(秒単位)。 |