Azure CycleCloud で Slurm を実行する方法について説明する

完了

このユニットを完了すると、Azure CycleCloud で Slurm を使用できるようになります。

CycleCloud で Slurm を有効にする

Azure CycleCloud を使用してハイ パフォーマンス コンピューティング (HPC) クラスターをデプロイするには、次の手順を行います。

  1. デプロイされた Azure CycleCloud インスタンスに接続し、認証を行います。

  2. [Create a New Cluster](新しいクラスターの作成) ページで、使用可能なオプションを確認し、[スケジューラ] セクションで [Slurm] を選択します。

    Azure CycleCloud Web アプリケーションの [新しいクラスターの作成] ページを示すスクリーンショット。

  3. [新しい Slurm クラスター] ページの [About](情報) タブで、[クラスター名] テキスト ボックスに Slurm クラスターの名前を入力します。

  4. [新しい Slurm クラスター] ページの [必須の設定] タブにある [クラスター名] テキスト ボックスで次の設定を構成します。

    • [リージョン]: クラスター ノードをホストするデータセンターを定義します。
    • スケジューラ VM の種類:ジョブ スケジューラをホストする仮想マシンの VM SKU を指定できます。
    • HPC VM の種類:HPC パーティション ワークロードをホストする仮想マシンの VM SKU を指定できます。
    • HTC VM の種類:HTC パーティション ワークロードをホストする仮想マシンの VM SKU を指定できます。
    • 自動スケーリング:パーティション ノードが必要な場合または不要になった場合に、そのノードをホストする VM インスタンスの開始と停止を有効または無効にすることができます。
    • 最大 HPC コア数:自動スケーリング時に HPC パーティションに割り当てることができる CPU コアの最大数。
    • 最大 HTC コア数:自動スケーリング時に HTC パーティションに割り当てることができる CPU コアの最大数。
    • スケールセットあたりの最大 VM 数:パーティション ワークロードをホストするために使用できる VM の最大数。
    • スポット インスタンスを使用する:Azure スポット インスタンスの使用を許可するかどうかを定義します。 スポット インスタンスは実行コストが大幅に安くなりますが、警告なしに削除される場合があり、ジョブの実行に影響を与える可能性があります。
    • サブネット ID:クラスター ノード VM をホストする Azure 仮想ネットワーク サブネット。

    Azure CycleCloud Web アプリケーションの [新しい Slurm クラスター] ページにある [必須の設定] タブを示すスクリーンショット。

  5. [ネットワーク接続ストレージ] ページで、ネットワーク接続ストレージマウントに [組み込み] または [外部 NFS] のどちらのオプションを使用するかを構成します。 [組み込み] を選択すると、スケジューラ ノードは、他のノードのマウントポイントとして機能する NFS サーバーとして構成されます。 [外部 NFS] を指定すると、ネットワーク接続ストレージ デバイス (Azure NetApp Files、HPC Cache、または NFS サーバーを実行する特別に構成された VM など) の詳細を指定できます。

  6. [詳細設定] ページでは、次の設定を指定できます。

    • Slurm バージョン:クラスターで使用する Slurm バージョンを選択します。
    • ジョブ アカウンティング:ジョブ アカウンティングを有効にするかどうか、およびアカウンティング データを格納するために選択する設定を指定します。
    • シャットダウン ポリシー:インスタンスを終了するか、またはインスタンスを割り当て解除するかを選択できます。
    • 資格情報: 関連付けられている Azure サブスクリプションに接続するために使用される資格情報。
    • スケジューラ OS:スケジューラをホストするために使用される Linux オペレーティング システムを選択します。
    • HPC OS:スケジューラをホストするために使用される Linux オペレーティング システムを指定します。
    • スケジューラの cluster-init:ここでは、スケジューラ VM に適用するカスタム手順を指定します。
    • HTC の cluster-init:HTC ノードに適用するカスタム手順を指定します。
    • 高度なネットワーク:このオプションを使用すると、リターン プロキシを有効にし、インターネット アドレスからヘッド ノードにアクセスできるかどうか、およびインターネットから実行ノードにアクセスできるかどうかを指定できます。

    Azure CycleCloud Web アプリケーションの [新しい Slurm クラスター] ページの [詳細設定] タブを示すスクリーンショット。

  7. cloud-init ページを使用すると、デプロイ後に仮想マシンノードにカスタム構成設定を渡すことができます。

メモリ設定

CycleCloud では、スケジュール設定のために Slurm で使用できるメモリの量を自動的に設定します。 使用可能なメモリの量は Linux カーネル オプションの違いによって多少変化する可能性があり、Slurm 構成のメモリ量を削減しなければ、OS と VM でジョブに使用できる少量のメモリが使い果たされる可能性があるため、CycleCloud では、メモリを自動的に削減します。 CycleCloud では、既定により、報告された VM 内の使用可能なメモリの 5 パーセントを残しておきますが、この値は、クラスター テンプレートで slurm.dampen_memory を、残しておくメモリのパーセンテージに設定することでオーバーライドできます。 たとえば、VM のメモリの 20 パーセントを残しておくには、次のように設定します。

slurm.dampen_memory=20

Slurm パーティションの構成

Azure CycleCloud に付属する既定のテンプレートには、2 つのパーティション (HPC と HTC) があり、Slurm パーティションに直接マップするカスタム ノード配列を定義できます。 たとえば、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

既存の Slurm クラスターの編集

既存の Slurm クラスターを変更し、変更を適用する場合、slurm.conf ファイルを再構築し、クラスター内の既存のノードを更新する必要があります。 これを行うには、cyclecloud_slurm.sh という名前の特殊なスクリプトを使用して、Azure CycleCloud にデプロイされた Slurm クラスターに存在するスクリプトを使用します。 スクリプトは、Slurm スケジューラ ノードの /opt/cycle/slurm ディレクトリにあります。 クラスターを変更したら、apply_changes パラメーターを使用して次のスクリプトを root として実行します。 たとえば、メッセージ パッシング インターフェイス (MPI) パーティションに参加するノードに影響を与える変更を行う場合、/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes を使用します。

ノードまたはパーティションの自動スケーリングを無効にする

slurm.conf ファイルを直接編集することで、実行中の Slurm クラスターの自動スケーリングを無効にすることができます。 個々のノードまたはパーティション全体を自動スケーリングから除外できます。

1 つまたは複数のノードを自動スケーリングから除外するには、SuspendExcNodes=<listofnodes> を Slurm 構成ファイルに追加します。 たとえば、ノード 1 と 2 を HPC パーティションから除外するには、次の行を /sched/slurm.conf に追加して、slurmctld サービスを再起動します。

SuspendExcNodes=hpc-pg0-[1-2]

パーティションを除外する場合は、/sched/slurm.conf ファイルも変更します。 たとえば、HPC パーティションを自動スケーリングから除外するには、次の行を slurm.conf に追加して、slurmctld サービスを再起動します。

SuspendExcParts=hpc