翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
が提供するベースライフサイクルスクリプトから開始する HyperPod
このセクションでは、トップダウンアプローチ HyperPod で Slurm を に設定する基本的なフローのすべてのコンポーネントについて説明します。これは、 CreateCluster
を実行するクラスター HyperPod 作成リクエストの準備から始まりAPI、階層構造をライフサイクルスクリプトにまで掘り下げます。Awsome Distributed Training GitHub リポジトリ
git clone https://github.com/aws-samples/awsome-distributed-training/
で Slurm クラスターを設定するためのベースライフサイクルスクリプト SageMaker HyperPod は、 で入手できます1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
次のフローチャートは、ベースライフサイクルスクリプトの設計方法の詳細な概要を示しています。以下の図と手順ガイドでは、API通話中の HyperPod CreateCluster
動作について説明します。
図: HyperPod クラスター作成の詳細なフローチャートとライフサイクルスクリプトの構造。(1) 破線の矢印は、ボックスが「」と呼ばれる場所に送られ、設定ファイルとライフサイクルスクリプトの準備の流れを示します。準備provisioning_parameters.json
とライフサイクルスクリプトから始まります。次に、これらは でコード化されlifecycle_script.py
、一括実行が順番に行われます。また、lifecycle_script.py
スクリプトの実行は、インスタンスターミナルで HyperPod実行されるon_create.sh
シェルスクリプトによって行われます。(2) 実線の矢印は、メイン HyperPod クラスター作成フローと、ボックスが「」または「送信先」と呼ばれる方法を示しています。 on_create.sh
は、 create_cluster.json
またはコンソール UI のクラスター作成リクエストフォームのいずれかで必要です。リクエストを送信すると、 はリクエストとライフサイクルスクリプトから指定された設定情報CreateCluster
APIに基づいて HyperPod を実行します。(3) 点線の矢印は、クラスターリソースのプロビジョニング中に HyperPod プラットフォームがクラスターインスタンスresource_config.json
に を作成することを示します。 resource_config.json
には、 HyperPod クラスター ARN、インスタンスタイプ、IP アドレスなどのクラスターリソース情報が含まれています。クラスターの作成中にresource_config.json
ファイルを期待するようにライフサイクルスクリプトを準備する必要があることに注意してください。詳細については、以下の手順ガイドを参照してください。
以下の手順ガイドでは、 HyperPod クラスターの作成中に何が起こるか、および基本ライフサイクルスクリプトの設計方法について説明します。
-
create_cluster.json
– クラスター作成リクエストを送信する HyperPodには、 JSON形式のCreateCluster
リクエストファイルを準備します。このベストプラクティス例では、リクエストファイルの名前が であると想定していますcreate_cluster.json
。インスタンスグループを使用して HyperPod クラスターをプロビジョニングcreate_cluster.json
するには書き込みます。ベストプラクティスは、 HyperPod クラスターで設定する予定の Slurm ノードの数と同じ数のインスタンスグループを追加することです。セットアップする予定の Slurm ノードに割り当てるインスタンスグループに固有の名前を付けるようにしてください。また、S3 バケットパスを指定して、設定ファイルとライフサイクルスクリプトのセット全体を
CreateCluster
リクエストフォームInstanceGroups.LifeCycleConfig.SourceS3Uri
のフィールド名に保存し、エントリポイントシェルスクリプトのファイル名 ( と名付けられたものと仮定on_create.sh
) を に指定する必要がありますInstanceGroups.LifeCycleConfig.OnCreate
。注記
HyperPod コンソール UI でクラスター作成送信フォームを使用している場合、コンソールはユーザーに代わって
CreateCluster
リクエストの入力と送信を管理し、バックエンドCreateCluster
APIで を実行します。この場合、 を作成する必要はありませんcreate_cluster.json
。代わりに、クラスター作成送信フォームに正しいクラスター設定情報を指定してください。 -
on_create.sh
– インスタンスグループごとに、コマンドの実行on_create.sh
、ソフトウェアパッケージのインストールのためのスクリプトの実行、および Slurm によるクラスター環境のセットアップ HyperPodのために、エントリポイントシェルスクリプト を提供する必要があります。準備する必要がある 2 つのことは、Slurm をセットアップ HyperPod するために がprovisioning_parameters.json
必要とする と、ソフトウェアパッケージをインストールするための一連のライフサイクルスクリプトです。このスクリプトは、 のサンプルスクリプトに示すように、次のファイルを検索して実行するために記述する必要がありますon_create.sh
。 注記
ライフサイクルスクリプトのセット全体を、 で指定した S3 ロケーションにアップロードしてください
create_cluster.json
。また、provisioning_parameters.json
を同じ場所に配置する必要があります。-
provisioning_parameters.json
– これは ですで Slurm ノードをプロビジョニングするための設定フォーム HyperPod。on_create.sh
スクリプトは、このJSONファイルを見つけ、そのファイルへのパスを識別するための環境変数を定義します。このJSONファイルを使用して、Amazon FSx for Lustre for Slurm などの Slurm ノードとストレージオプションを通信するように設定できます。ではprovisioning_parameters.json
、 で指定した名前を使用して HyperPod クラスターインスタンスグループcreate_cluster.json
を、セットアップ方法に基づいて適切に Slurm ノードに割り当てます。次の図は、 HyperPod インスタンスグループを Slurm ノードに割り当てるために
provisioning_parameters.json
2 つのJSON設定ファイルcreate_cluster.json
と を書き込む方法の例を示しています。この例では、コントローラー (管理) ノード、ログインノード (オプション)、コンピューティング (ワーカー) ノードの 3 つの Slurm ノードをセットアップする場合を想定しています。ヒント
これらの 2 つのJSONファイルを検証するため、 HyperPodサービスチームは検証スクリプト を提供します
validate-config.py
。詳細については、「で Slurm クラスターを作成する前に設定JSONファイルを検証する HyperPod」を参照してください。 図: クラスター作成
create_cluster.json
と HyperPod Slurm 設定provisiong_params.json
の を直接比較します。のインスタンスグループの数は、Slurm ノードとして設定するノードの数と一致するcreate_cluster.json
必要があります。図の例では、3 つのインスタンスグループの HyperPod クラスターに 3 つの Slurm ノードが設定されます。それに応じてインスタンスグループ名を指定して、 HyperPod クラスターインスタンスグループを Slurm ノードに割り当てる必要があります。 -
resource_config.json
– クラスターの作成中に、lifecycle_script.py
スクリプトは からのresource_config.json
ファイルを期待するように書き込まれます HyperPod。このファイルには、インスタンスタイプや IP アドレスなど、クラスターに関する情報が含まれています。を実行すると
CreateCluster
API、 HyperPodは ファイル/opt/ml/config/resource_config.json
に基づいて でリソース設定create_cluster.json
ファイルを作成します。ファイルパスは、 という名前の環境変数に保存されますSAGEMAKER_RESOURCE_CONFIG_PATH
。重要
resource_config.json
ファイルは HyperPod プラットフォームによって自動生成されるため、作成NOTする必要があります。次のコードは、前のステップcreate_cluster.json
で に基づいてクラスターの作成からresource_config.json
作成される の例を示し、バックエンドで何が起こり、自動生成された がどのようにresource_config.json
見えるかを理解するのに役立ちます。{ "ClusterConfig": { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/abcde01234yz", "ClusterName": "your-hyperpod-cluster" }, "InstanceGroups": [ { "Name": "controller-machine", "InstanceType": "ml.c5.xlarge", "Instances": [ { "InstanceName": "controller-machine-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] }, { "Name": "login-group", "InstanceType": "ml.m5.xlarge", "Instances": [ { "InstanceName": "login-group-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] }, { "Name": "compute-nodes", "InstanceType": "ml.trn1.32xlarge", "Instances": [ { "InstanceName": "compute-nodes-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-2", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-3", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-4", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] } ] }
-
lifecycle_script.py
– これは、プロビジョニング中に HyperPod クラスターで Slurm をセットアップするライフサイクルスクリプトをまとめて実行するメイン Python スクリプトです。このスクリプトは、 で指定または識別されたパスprovisioning_parameters.json
resource_config.json
を読み取りon_create.sh
、関連情報を各ライフサイクルスクリプトに渡してから、ライフサイクルスクリプトを順番に実行します。ライフサイクルスクリプトは、Slurm のセットアップ、ユーザーの作成、Conda または Docker のインストールなど、クラスターの作成中にソフトウェアパッケージをインストールしたり、必要な設定やカスタム設定をセットアップしたりするためにカスタマイズできる完全な柔軟性を持つスクリプトのセットです。サンプル
lifecycle_script.py
スクリプトは、Slurm deamons ( start_slurm.sh
) の起動、Amazon FSx for Lustre () のマウント、MariaDB アカウンティング ( mount_fsx.sh
) とアカRDSウンティング ( setup_mariadb_accounting.sh
) の設定など、リポジトリで他のベースライフサイクルスクリプトを実行する準備ができています setup_rds_accounting.sh
。また、スクリプトを追加し、同じディレクトリにパッケージ化し、コード行を に追加 lifecycle_script.py
して、スクリプト HyperPod の実行を許可することもできます。ベースライフサイクルスクリプトの詳細については、Awsome Distributed Training GitHub リポジトリ の「3.1 Lifecycle scripts」も参照してください。 注記
HyperPod はクラスターの各インスタンスSageMaker HyperPod DLAMIで実行され、 AMIには、クラスターと HyperPod機能間の互換性に準拠したソフトウェアパッケージがプリインストールされています。事前にインストールされたパッケージのいずれかを再インストールする場合、互換性のあるパッケージをインストールする責任があり、一部の HyperPod 機能が期待どおりに動作しない場合があることに注意してください。
デフォルト設定に加えて、以下のソフトウェアをインストールするためのスクリプトが
utils
フォルダで利用できます。 lifecycle_script.py
ファイルには、インストールスクリプトを実行するためのコード行を含める準備が既にできているため、以下の項目を参照して行を検索し、コメントを解除してアクティブ化します。-
次のコード行は、Docker
、Enroot 、および Pyxis をインストールするためのものです 。これらのパッケージは、Slurm クラスターで Docker コンテナを実行するために必要です。 このインストールステップを有効にするには、
config.py
ファイル True
でenable_docker_enroot_pyxis
パラメータを に設定します。# Install Docker/Enroot/Pyxis if Config.enable_docker_enroot_pyxis: ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_enroot_pyxis.sh").run(node_type)
-
HyperPod クラスターを Amazon Managed Service for Prometheus および Amazon Managed Grafana と統合して、クラスターおよびクラスターノードに関するメトリクスを HyperPod Amazon Managed Grafana ダッシュボードにエクスポートできます。メトリクスをエクスポートし、Amazon Managed Grafana の Slurm ダッシュボード
、NVIDIADCGMエクスポーターダッシュボード 、およびEFAメトリクスダッシュボード を使用するには、Prometheus の Slurm エクスポーター 、NVIDIADCGMエクスポーター 、およびEFAノードエクスポーター をインストールする必要があります。エクスポーターパッケージのインストールと Amazon Managed Grafana ワークスペースでの Grafana ダッシュボードの使用の詳細については、「」を参照してくださいSageMaker HyperPod クラスターリソースのモニタリング。 このインストールステップを有効にするには、
config.py
ファイル True
でenable_observability
パラメータを に設定します。# Install metric exporting software and Prometheus for observability if Config.enable_observability: if node_type == SlurmNodeType.COMPUTE_NODE: ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_dcgm_exporter.sh").run() ExecuteBashScript("./utils/install_efa_node_exporter.sh").run() if node_type == SlurmNodeType.HEAD_NODE: wait_for_scontrol() ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_slurm_exporter.sh").run() ExecuteBashScript("./utils/install_prometheus.sh").run()
-
-
-
ステップ 2 のすべての設定ファイルとセットアップスクリプトを、ステップ 1 の
CreateCluster
リクエストで指定した S3 バケットにアップロードしてください。例えば、 に次のcreate_cluster.json
ものがあるとします。"LifeCycleConfig": { "SourceS3URI": "
s3://sagemaker-hyperpod-lifecycle/src
", "OnCreate": "on_create.sh
" }次に、 には、
on_create.sh
、lifecycle_script.py
provisioning_parameters.json
、、およびその他のすべてのセットアップスクリプトが含まれている"s3://sagemaker-hyperpod-lifecycle/src"
必要があります。次のように、ローカルフォルダにファイルを準備したとします。└── lifecycle_files // your local folder ├── provisioning_parameters.json ├── on_create.sh ├── lifecycle_script.py └── ... // more setup scrips to be fed into lifecycle_script.py
ファイルをアップロードするには、次のように S3 コマンドを使用します。
aws s3 cp --recursive
./lifecycle_scripts
s3://sagemaker-hyperpod-lifecycle/src