次の方法で共有


Slurm

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 つのパーティション (hpchtc) があり、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: 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.ジョブ前待機時間 ノードがスケールダウンされるまで、ジョブを完了する前にアイドル状態である時間(秒単位)。