Slurm スケジューラのサポートは、CycleCloud 8.4.0 リリースの一部として書き換えられます。 主な機能は次のとおりです。
- 動的ノード配列を通じての動的ノードと動的パーティションのサポート、単一および複数の仮想マシン (VM) サイズの両方をサポート。
- 新しい Slurm バージョン 23.02 および 22.05.8
-
azslurm
CLI を使用したコスト レポート -
azslurm
コマンドラインインターフェース(CLI)ベースのオートスケーラー - Ubuntu 20 のサポート
- トポロジ プラグインの必要性が解消され、送信プラグインも削除されました
CycleCloud のバージョン < 8.4.0 における Slurm クラスター
詳細については、「 2.7 から 3.0 への移行」を参照してください。
クラスターの変更
CycleCloud にデプロイされた Slurm クラスターには、クラスターの変更を容易にするために、azslurm
という cli が含まれています。 クラスターを変更した後、Slurm スケジューラ ノードでルートとして次のコマンドを実行して、azure.conf
を再構築し、クラスター内のノードを更新します。
$ sudo -i
# azslurm scale
このコマンドは、適切な数のノード(適切な gres.conf
)を使用してパーティションを作成し、 slurmctld
を再起動します。
実行ノードを事前に作成しなくなった
CycleCloud バージョン 3.0.0 の Slurm プロジェクトを開始すると、ノードは事前に作成されません。 ノードは、 azslurm resume
が呼び出されたときに、または CLI を使用して CycleCloud で手動で作成することによって作成されます。
追加のパーティションの作成
Azure CycleCloud に付属する既定のテンプレートには、3 つのパーティション (hpc
、htc
、dynamic
) があり、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
動的パーティション
CycleCloud バージョン 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 サイズ名を機能として追加するだけで、どの VM サイズを使用したいかを azslurm
が判断できるようになります。
注 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 nodearray で複数の 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」を参照してください。
手動スケーリング
サイクルクラウドスラームが自動スケールが無効であること(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
自動スケール ログは、
/opt/azurehpc/slurm/logs
ではなく/var/log/slurmctld
になりました。slurmctld.log
はこのフォルダー内にあります。cyclecloud_slurm.sh
スクリプトは使用できなくなりました。azslurm
という新しい CLI ツールcyclecloud_slurm.sh
置き換えられ、ルートとして実行できます。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 the --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
ファイル内にあります。 これらは、特定のバイナリ リリースから引き出されます。 現在のバイナリ リリースは 4.0.0 ですMPI ジョブの場合、既定のネットワーク境界はパーティションだけです。 バージョン 2.x とは異なり、各パーティションには複数の "配置グループ" は含まれません。 そのため、パーティションごとに併置された VMSS は 1 つだけです。 トポロジ プラグインは不要になったため、ジョブ送信プラグインも必要ありません。 代わりに、複数の配置グループにジョブを送信する必要があるユース ケースでは、複数のパーティションに送信することをお勧めします。
CycleCloud では、スケジューラ全体でオートストップ属性の標準セットがサポートされています。
特性 | 説明 |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | このノードで自動停止は有効になっていますか? [真/偽] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | ノードがスケールダウンされるまでのジョブの完了後にアイドル状態になるまでの時間 (秒単位)。 |
cyclecloud.cluster.autoscale.ジョブ前待機時間 | ノードがスケールダウンされるまで、ジョブを完了する前にアイドル状態である時間(秒単位)。 |