次の方法で共有


CycleCloud Slurm 3.0

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 つのパーティション (hpchtcdynamic) があり、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 への移行

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

  2. 自動スケール ログは、/opt/azurehpc/slurm/logsではなく /var/log/slurmctld になりました。 slurmctld.logはこのフォルダー内にあります。

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

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

  6. MPI ジョブの場合、既定のネットワーク境界はパーティションだけです。 バージョン 2.x とは異なり、各パーティションには複数の "配置グループ" は含まれません。 そのため、パーティションごとに併置された VMSS は 1 つだけです。 トポロジ プラグインは不要になったため、ジョブ送信プラグインも必要ありません。 代わりに、複数の配置グループにジョブを送信する必要があるユース ケースでは、複数のパーティションに送信することをお勧めします。

CycleCloud では、スケジューラ全体でオートストップ属性の標準セットがサポートされています。

特性 説明
cyclecloud.cluster.autoscale.stop_enabled このノードで自動停止は有効になっていますか? [真/偽]
cyclecloud.cluster.autoscale.idle_time_after_jobs ノードがスケールダウンされるまでのジョブの完了後にアイドル状態になるまでの時間 (秒単位)。
cyclecloud.cluster.autoscale.ジョブ前待機時間 ノードがスケールダウンされるまで、ジョブを完了する前にアイドル状態である時間(秒単位)。