次の方法で共有


OpenPBS

Azure CycleCloud の OpenPBS クラスターの種類は、PBS Professional を使用してハイ パフォーマンス コンピューティング (HPC) ワークロードを管理するための堅牢でスケーラブルなソリューションを提供します。 この統合により、ユーザーはクラウドに PBS ベースのクラスターをデプロイして管理し、合理化された構成と自動化を実現できます。 詳細なセットアップ手順、サポートされている機能、使用ガイダンスについては、CycleCloud Open PBS と PBS Professional Cluster Project README を参照してください。

クラスター定義の構成セクションでを変更することで、CycleCloud クラスターで run_list を有効にすることができます。 PBS Professional (PBS Pro) クラスターには、共有ファイルシステム上でソフトウェアを実行する プライマリ ノードと、そのファイルシステムをマウントして送信されたジョブを実行する 実行 ノードの 2 つの主要な部分があります。 たとえば、単純なクラスター テンプレート スニペットは次のようになります。

[cluster my-pbspro]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[pbspro_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

CycleCloud でこの定義を使用してクラスターをインポートして起動すると、1 つの プライマリ ノードが取得されます。 コマンドを使用して、クラスターにcyclecloud add_nodeノードを追加できます。 たとえば、さらに 10 個の 実行 ノードを追加するには、次のコマンドを使用します。

cyclecloud add_node my-pbspro -t execute -c 10

PBS リソースベースの自動スケール

CycleCloud は、動的プロビジョニング機能を拡張するために 2 つのリソースを維持します。 これらのリソースは nodearraymachinetype です

ジョブを送信し、 qsub -l nodearray=highmem -- /bin/hostnameを持つノード配列リソースを指定すると、CycleCloud は highmem という名前のノード配列にノードを追加します。 ノード配列が存在しない場合、ジョブは何もせずに待機します。

ジョブの送信でコンピューターの種類のリソース (qsub -l machinetype:Standard_L32s_v2 my-job.shなど) を指定すると、CycleCloud は Standard_L32s_v2 (既定) ノード配列内のexecuteマシンを自動スケールします。 マシンの種類が execute ノード配列で使用できない場合、ジョブはアイドル状態のままになります。

これらのリソースは、次のように一緒に使用できます。

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

自動スケールは、Standard_HB60rs ノード配列でhpcマシンを指定した場合にのみ行われます。

ノード配列に割り当てられた追加のキューの追加

複数のノード配列を持つクラスターでは、ジョブを適切な VM の種類に自動的にルーティングする個別のキューを作成します。 この例では、クラスター テンプレートで次の gpu ノード配列が定義されているとします。

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

クラスター テンプレートをインポートしてクラスターを起動したら、サーバー ノードで次のコマンドを実行して、 gpu キューを作成します。

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

この例に示すように、キュー定義は、MPI ジョブをサポートするために、キュー内のすべての VM を 1 つの仮想マシン スケール セットにパックします。 シリアル ジョブのキューを定義し、複数の仮想マシン スケール セットを許可するには、ungrouped = trueresources_defaultの両方にdefault_chunkを設定します。 スケジューラがジョブをVMにまとめて配置することを希望する場合、ラウンドロビン方式ではなく、resources_default.place = pack を設定します。 PBS ジョブパッキングの詳細については、 PBS Professional OSS の公式ドキュメントを参照してください

PBS Professional 構成リファレンス

次の表では、機能をカスタマイズするために切り替えることができる PBS Professional (PBS Pro) 固有の構成オプションについて説明します。

PBS Pro オプション 説明
pbspro.slots PBS Pro に報告する特定のノードのスロット数。 スロットの数は、ノードが実行できる同時実行ジョブの数です。 この値の既定値は、特定のコンピューター上の CPU の数です。 この値は、CPU に基づいてジョブを実行せず、メモリ、GPU、その他のリソースで実行する場合にオーバーライドできます。
pbspro.slot_type ノードが提供する 'slot' の種類の名前。 既定値は 'execute' です。 ハード リソース slot_type=<type>を使用してジョブにタグを付けると、ジョブは同じスロットの種類のマシン でのみ 実行されます。 この設定を使用すると、ノードごとに異なるソフトウェア構成とハードウェア構成を作成し、適切なジョブが常に適切な種類のノードでスケジュールされるようにすることができます。
pbspro.version 既定値: '18.1.3-0'。 現在、このバージョンは既定であり、インストールして実行するための 唯一 のオプションです。 将来的には、PBS Pro ソフトウェアのより多くのバージョンがサポートされる可能性があります。

PBS を CycleCloud に接続する

CycleCloud は、と呼ばれるインストール可能なエージェントを介して azpbs クラスターを管理します。 このエージェントは CycleCloud に接続して、クラスターと VM の構成を読み取ります。 また、OpenPBS と統合して、ジョブとホストの情報を処理します。 azpbs ファイルには、通常は autoscale.json にあるすべての/opt/cycle/pbspro/autoscale.json構成があります。

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

重要なファイル

azpbs エージェントは、呼び出されるたびに PBS 構成 (ジョブ、キュー、リソース) を解析します。 エージェントは、この情報をコマンドの stderr と stdout に提供し、ログ ファイルに対して構成可能なレベルで提供します。 エージェントは、すべての PBS 管理コマンド (qcmd) を引数と共にファイルに記録します。

これらのファイルはすべて、エージェントをインストールする /opt/cycle/pbspro/ ディレクトリにあります。

ファイル ロケーション 説明
自動スケーリングの構成 autoscale.json 自動スケーリング、リソース マップ、CycleCloud アクセス情報の構成
自動スケーリング ログ autoscale.log CycleCloud ホスト管理を含むエージェントのメイン スレッド のログ記録
需要ログ demand.log リソース照合の詳細なログ
qcmd トレース ログ qcmd.log エージェント qcmd 呼び出しのログ記録
構成のログ記録 logging.conf マスクとファイルの場所をログに記録するための構成

OpenPBS リソースの定義

このプロジェクトを使用すると、cyclecloud-pbspro (azpbs) プロジェクトを通じて OpenPBS リソースを Azure VM リソースに関連付けることができます。 このリソースリレーションシップは、 autoscale.jsonで定義します。 クラスター テンプレートには、次の既定のリソースが含まれています。

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

memという名前の OpenPBS リソースは、node.memoryという名前のノード属性に対応します。これは、仮想マシンの合計メモリを表します。 この構成 azpbs ジョブ リソース要件の値をノード リソースと比較することで、 -l mem=4gb などのリソース要求を処理できます。

現在、ディスク サイズは size::20g に設定されています。 VM サイズ固有のディスク サイズを処理する方法の例を次に示します。

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

オートスケールとスケールセット

CycleCloud は、OpenPBS クラスターでスパン ジョブとシリアル ジョブを異なる方法で処理します。 スパニング ジョブは、同じ配置グループの一部であるノードに配置されます。 配置グループには、SinglePlacementGroup=true の VirtualMachineScaleSet を意味する特定のプラットフォームがあり、CycleCloud はスパンされたノード セットごとに名前付き配置グループを管理します。 この配置グループ名には PBS リソースの group_id を使用します。

hpc キューは、ネイティブ キューの既定値を使用して、同等の-l place=scatter:group=group_idを追加します。

CycleCloud OpenPBS エージェントのインストール azpbs

OpenPBS CycleCloud クラスターは、サーバー ノード上のエージェントのインストールと構成を管理します。 準備手順には、PBS リソース、キュー、フックの設定が含まれます。 CycleCloud の外部でスクリプト化されたインストールを実行することもできます。

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

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

特性 説明
cyclecloud.cluster.autoscale.stop_enabled このノードで自動停止を有効にします。 [真/偽]
cyclecloud.cluster.autoscale.idle_time_after_jobs ノードが自動停止する前にジョブが完了した後にアイドル状態になるまでの時間 (秒単位)。
cyclecloud.cluster.autoscale.idle_time_before_jobs ノードが自動停止する前にジョブを完了するまでのアイドル状態の時間 (秒単位)。

CycleCloud では、Open PBS でのバースト構成はサポートされていません。

Windows は公式にサポートされている Open PBS プラットフォームですが、現時点では CycleCloud では Windows での Open PBS の実行はサポートされていません。