次の方法で共有


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 への移行

  1. インストール フォルダーが変更されました /opt/cycle/slurm ->/opt/azurehpc/slurm

  2. 自動スケーリング ログは、 ではなく /var/log/slurmctldになりました/opt/azurehpc/slurm/logs。 は引 slurmctld.log き続きこのフォルダーに格納されることに注意してください。

  3. 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.
    
  4. CycleCloud にノードが事前に設定されなくなりました。 これらは、必要な場合にのみ作成されます。

  5. すべての slurm バイナリは、 の下の azure-slurm-install-pkg*.tar.gz ファイル内にあります slurm-pkgs。 これらは、特定のバイナリ リリースからプルされます。 現在のバイナリ再リリースは 2023-03-13 です

  6. 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 ノードがジョブを完了するまでにアイドル状態になるまでの時間 (秒単位)。