CycleCloud Slurm 3.0
Slurm スケジューラのサポートは、CycleCloud 8.4.0 リリースの一部として書き直されました。 組み込まれている主な機能は次のとおりです。
- 動的ノードと動的ノードを介した動的パーティションのサポート。単一の VM サイズと複数の VM サイズの両方をサポート
- 新しい slurm バージョン 23.02 および 22.05.8
- CLI を使用した
azslurm
コスト レポート -
azslurm
cli ベースのオートスケーラー - Ubuntu 20 のサポート
- トポロジ プラグインの必要性を取り除いたため、すべての送信プラグインも削除されました
CycleCloud バージョン < 8.4.0 の Slurm クラスター
詳細については、「 2.7 から 3.0 への移行 」を参照してください。
クラスターの変更
CycleCloud にデプロイされた Slurm クラスターには、クラスターの変更を容易にするために という cli azslurm
が含まれています。 クラスターに変更を加えたら、Slurm スケジューラ ノードでルートとして次のコマンドを実行して、 azure.conf
を再構築し、クラスター内のノードを更新します。
$ sudo -i
# azslurm scale
これにより、適切な数のノードを持つパーティションが作成され、適切な gres.conf
が作成され、 が再起動されます slurmctld
。
実行ノードを事前に作成しなくなりました
CycleCloud Slurm プロジェクトのバージョン 3.0.0 以降、CycleCloud でノードを事前に作成することはなくなりました。 ノードは、 が呼び出されたときに azslurm resume
作成されるか、CLI を使用して CycleCloud で手動で作成することによって作成されます。
追加のパーティションの作成
Azure CycleCloud に付属する既定のテンプレートには、3 つのパーティション (hpc
および dynamic
) があり、 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:3.0.1]]]
[[[network-interface eth0]]]
AssociatePublicIpAddress = $ExecuteNodesPublic
動的パーティション
の 3.0.1
時点では、動的パーティションがサポートされています。 次を追加することで、 nodearray
動的パーティションへのマップを作成できます。
必要な myfeature
機能の説明を指定できることに注意してください。 複数の機能をコンマで区切って指定することもできます。
[[[configuration]]]
slurm.autoscale = true
# Set to true if nodes are used for tightly-coupled multi-node jobs
slurm.hpc = false
# This is the minimum, but see slurmd --help and [slurm.conf](https://slurm.schedmd.com/slurm.conf.html) for more information.
slurm.dynamic_config := "-Z --conf \"Feature=myfeature\""
これにより、次のような動的パーティションが生成されます
# Creating dynamic nodeset and partition using slurm.dynamic_config=-Z --conf "Feature=myfeature"
Nodeset=mydynamicns Feature=myfeature
PartitionName=mydynamicpart Nodes=mydynamicns
動的パーティションを使用した自動スケーリング
既定では、動的パーティションにノードは定義されません。 代わりに、CycleCloud を使用するか、手動で呼び出してノードを azslurm resume
起動し、選択した名前でクラスターに参加します。 ただし、Slurm はこれらのノードについて知らないので、自動スケールアップすることはできません。
代わりに、このようなノード レコードを事前に作成することもできます。これにより、Slurm で自動スケールアップできます。
scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD
動的パーティションのもう 1 つの利点は、 同じパーティションで複数の VM サイズをサポートできることです。
VM サイズ名を機能として追加するだけで azslurm
、使用する VM サイズを区別できます。
メモ VM サイズは暗黙的に追加されます。 に追加する必要はありません slurm.dynamic_config
scontrol create nodename=f4-[1-10] Feature=myfeature,Standard_F4 State=CLOUD
scontrol create nodename=f8-[1-10] Feature=myfeature,Standard_F8 State=CLOUD
どちらの方法でも、これらのノードを で State=Cloud
作成すると、他のノードと同様に自動スケーリングできるようになります。
CycleCloud ノードアレイで複数の VM サイズをサポートするには、 を追加Config.Mutiselect = true
して、複数の VM サイズを許可するようにテンプレートを変更できます。
[[[parameter DynamicMachineType]]]
Label = Dyn VM Type
Description = The VM type for Dynamic nodes
ParameterType = Cloud.MachineType
DefaultValue = Standard_F2s_v2
Config.Multiselect = true
動的スケールダウン
既定では、動的パーティション内のすべてのノードは、他のパーティションと同様にスケールダウンされます。 これを無効にするには、「 SuspendExcParts」を参照してください。
手動スケーリング
自動スケーリングcyclecloud_slurm無効 (SuspendTime=-1) が検出された場合、Slurm の電源状態に依存するのではなく、電源が切れているノードを示すために FUTURE 状態が使用されます。 つまり、自動スケーリングが有効になっている場合、オフ ノードは sinfo で と idle~
示されます。 自動スケーリングが無効になっている場合、オフ ノードは sinfo にまったく表示されません。 を使用しても、その定義を scontrol show nodes --future
確認できます。
新しいノードを開始するには、 を実行 /opt/azurehpc/slurm/resume_program.sh node_list
します (例:htc-[1-10])。
ノードをシャットダウンするには、 を実行 /opt/azurehpc/slurm/suspend_program.sh node_list
します (例:htc-[1-10])。
このモードでクラスターを開始するには、テンプレートの追加の slurm 構成に を追加 SuspendTime=-1
するだけです。
クラスターをこのモードに切り替えるには、slurm.conf に を追加 SuspendTime=-1
し、 を実行 scontrol reconfigure
します。 次に、azslurm remove_nodes && azslurm scale
を実行します。
トラブルシューティング
2.7 から 3.0 への移行
インストール フォルダーが変更されました
/opt/cycle/slurm
->/opt/azurehpc/slurm
自動スケーリング ログは、 ではなく
/var/log/slurmctld
になりました/opt/azurehpc/slurm/logs
。 は引slurmctld.log
き続きこのフォルダーに格納されることに注意してください。cyclecloud_slurm.sh
は存在しません。 代わりに、ルートとして実行できる新しいazslurm
CLI があります。azslurm
はオートコンプリートをサポートしています。[root@scheduler ~]# azslurm usage: accounting_info - buckets - Prints out autoscale bucket information, like limits etc config - Writes the effective autoscale config, after any preprocessing, to stdout connect - Tests connection to CycleCloud cost - Cost analysis and reporting tool that maps Azure costs to Slurm Job Accounting data. This is an experimental feature. default_output_columns - Output what are the default output columns for an optional command. generate_topology - Generates topology plugin configuration initconfig - Creates an initial autoscale config. Writes to stdout keep_alive - Add, remove or set which nodes should be prevented from being shutdown. limits - nodes - Query nodes partitions - Generates partition configuration refresh_autocomplete - Refreshes local autocomplete information for cluster specific resources and nodes. remove_nodes - Removes the node from the scheduler without terminating the actual instance. resume - Equivalent to ResumeProgram, starts and waits for a set of nodes. resume_fail - Equivalent to SuspendFailProgram, shuts down nodes retry_failed_nodes - Retries all nodes in a failed state. scale - shell - Interactive python shell with relevant objects in local scope. Use --script to run python scripts suspend - Equivalent to SuspendProgram, shuts down nodes wait_for_resume - Wait for a set of nodes to converge.
CycleCloud にノードが事前に設定されなくなりました。 これらは、必要な場合にのみ作成されます。
すべての slurm バイナリは、 の下の
azure-slurm-install-pkg*.tar.gz
ファイル内にありますslurm-pkgs
。 これらは、特定のバイナリ リリースからプルされます。 現在のバイナリ再リリースは 2023-03-13 ですMPI ジョブの場合、既定で存在する唯一のネットワーク境界はパーティションです。 2.x のようなパーティションごとに複数の "配置グループ" はありません。 そのため、パーティションごとに併置された VMSS は 1 つだけです。 また、トポロジ プラグインは使用されていません。そのため、不要になったジョブ送信プラグインの使用が必要でした。 代わりに、複数のパーティションに送信することが、複数の配置グループにジョブを送信する必要があるユース ケースに推奨されるオプションになりました。
CycleCloud では、スケジューラ間で自動停止属性の標準セットがサポートされています。
属性 | 説明 |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | このノードで自動停止は有効になっていますか? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | スケールダウンされるまでのジョブの完了後にノードがアイドル状態になるまでの時間 (秒単位)。 |
cyclecloud.cluster.autoscale.idle_time_before_jobs | ノードがジョブを完了するまでにアイドル状態になるまでの時間 (秒単位)。 |