

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ライフサイクルスクリプトを使用して SageMaker HyperPod クラスターをカスタマイズする
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm"></a>

SageMaker HyperPod は、常に稼働を続けるコンピューティングクラスターを提供します。これは、クラスターリソースのセットアップ方法を SageMaker HyperPod に指示するライフサイクルスクリプトを記述できるため、高度にカスタマイズ可能です。以下のトピックは、オープンソースのワークロードマネージャーツールで SageMaker HyperPod クラスターを設定するライフサイクルスクリプトを準備するためのベストプラクティスです。

以下のトピックでは、SageMaker HyperPod で Slurm 設定をセットアップするライフサイクルスクリプトを準備するための詳細なベストプラクティスについて説明します。

## 概要
<a name="sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-highlevel-overview"></a>

次の手順は、HyperPod クラスターをプロビジョニングし、Slurm で設定する主なフローです。ステップは、***ボトムアップ***アプローチの順番で並べられています。

1. HyperPod クラスターに Slurm ノードを作成する方法を計画します。例えば、2 つの Slurm ノードを設定する場合、HyperPod クラスターに 2 つのインスタンスグループを設定する必要があります。

1. Slurm 設定を準備します。次のいずれかのアプローチを選択します。
   + **オプション A: API 駆動型設定 (推奨)** – 各インスタンスグループ`SlurmConfig`内で を使用して`CreateCluster`、API ペイロードで Slurm ノードタイプとパーティションを直接定義します。このアプローチでは、次のようになります。
     + `provisioning_parameters.json` ファイルは必要ありません
     + Slurm トポロジは、インスタンスグループ定義とともに API ペイロードで定義されます。
     + FSx ファイルシステムは、 per-instance-group設定されます。 `InstanceStorageConfigs`
     + 設定戦略は によって制御されます。 `Orchestrator.Slurm.SlurmConfigStrategy`

     `SlurmConfig` インスタンスグループの例:

     ```
     {
         "InstanceGroupName": "gpu-compute",
         "InstanceType": "ml.p4d.24xlarge",
         "InstanceCount": 8,
         "SlurmConfig": {
             "NodeType": "Compute",
             "PartitionNames": ["gpu-training"]
         }
     }
     ```
   + **オプション B: レガシー設定** – `provisioning_parameters.json` ファイルを準備します。これは です[provisioning\_parameters.json の設定フォーム](sagemaker-hyperpod-ref.md#sagemaker-hyperpod-ref-provisioning-forms-slurm)。 には、HyperPod クラスターでプロビジョニングする Slurm ノード設定情報が含まれている`provisioning_parameters.json`必要があります。これは、ステップ 1 の Slurm ノードの設計を反映している必要があります。

1. 一連のライフサイクルスクリプトを準備して、ソフトウェアパッケージをインストールし、ユースケース用にクラスターに環境をセットアップするよう HyperPod で Slurm を設定します。ライフサイクルスクリプトを中央の Python スクリプト (`lifecycle_script.py`) でまとめて実行されるように構成し、エントリポイントシェルスクリプト (`on_create.sh`) を記述して Python スクリプトを実行する必要があります。エントリポイントシェルスクリプトは、ステップ 5 の後半で HyperPod クラスター作成リクエストに提供する必要があります。

   さらに、クラスターの作成時に HyperPod によって生成される `resource_config.json` を期待するスクリプトも記述する必要がある点に注意してください。`resource_config.json` には、IP アドレス、インスタンスタイプ、ARN などの HyperPod クラスターリソース情報が含まれており、Slurm の設定に使用する必要があります。

1. 前のステップのすべてのファイルをフォルダに集めます。フォルダ構造は、ステップ 2 で選択した設定アプローチによって異なります。

   オプション A (API 駆動型設定) を選択した場合:

   フォルダに必要なのは、カスタムセットアップタスクのライフサイクルスクリプトのみです。Slurm 設定と FSx マウントは、API ペイロードに基づいて HyperPod によって自動的に処理されます。

   ```
   └── lifecycle_files // your local folder
   
       ├── on_create.sh
       ├── lifecycle_script.py
       └── ... // more setup scripts to be fed into lifecycle_script.py
   ```
**注記**  
API 駆動型設定を使用する場合、 `provisioning_parameters.json`ファイルは必須ではありません。

   オプション B (レガシー設定) を選択した場合:

   フォルダには、 `provisioning_parameters.json`とライフサイクルスクリプトの完全なセットが含まれている必要があります。

   ```
   └── lifecycle_files // your local folder
   
       ├── provisioning_parameters.json
       ├── on_create.sh
       ├── lifecycle_script.py
       └── ... // more setup scrips to be fed into lifecycle_script.py
   ```

1. すべてのファイルを S3 バケットにアップロードします。S3 バケットパスをコピーして保持します。`sagemaker-` で始まる S3 バケットパスを作成する必要がある点に注意してください。プレフィックス `sagemaker-` で始まる S3 バケットパスのみを許可する、[`AmazonSageMakerClusterInstanceRolePolicy`](security-iam-awsmanpol-AmazonSageMakerClusterInstanceRolePolicy.md) でアタッチされた [SageMaker HyperPod の IAM ロール](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-role-for-hyperpod) を選択する必要があります。次のコマンドは、すべてのファイルを S3 バケットにアップロードするコマンドの例です。

   ```
   aws s3 cp --recursive {{./lifecycle_files}} {{s3://sagemaker-hyperpod-lifecycle/src}}
   ```

1. HyperPod クラスター作成リクエストを準備します。
   + オプション 1: を使用する場合は AWS CLI、「」の手順に従って、クラスター作成リクエストを JSON 形式 (`create_cluster.json`) で書き込みます[新しいクラスターを作成する](sagemaker-hyperpod-operate-slurm-cli-command.md#sagemaker-hyperpod-operate-slurm-cli-command-create-cluster)。
   + オプション 2: SageMaker AI コンソール UI を使用する場合、「[SageMaker HyperPod クラスターを作成する](sagemaker-hyperpod-operate-slurm-console-ui.md#sagemaker-hyperpod-operate-slurm-console-ui-create-cluster)」の手順に従って、HyperPod コンソール UI で **[クラスターを作成]** リクエストフォームに入力します。

   この段階では、ステップ 1 と 2 で計画したのと同じ構造でインスタンスグループを作成してください。さらに、リクエストフォームでステップ 5 の S3 バケットを指定していることも確認してください。

1. クラスター作成リクエストを送信します。HyperPod はリクエストに基づいてクラスターをプロビジョニングした後、HyperPod クラスターインスタンスで `resource_config.json` ファイルを作成し、ライフサイクルスクリプトを実行しているクラスターで Slurm を設定します。

以下のトピックでは、HyperPod クラスターの作成時に適切に整理するよう設定ファイルとライフサイクルスクリプトを整理する方法について詳しく説明します。

**Topics**
+ [概要](#sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-highlevel-overview)
+ [HyperPod が提供する基本ライフサイクルスクリプト](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-base-config.md)
+ [Slurm 設定ファイルで HyperPod が管理する特定の設定](sagemaker-hyperpod-lifecycle-best-practices-slurm-what-hyperpod-overrides-in-slurm-conf.md)
+ [Slurm ログのローテーション](sagemaker-hyperpod-slurm-log-rotation.md)
+ [Amazon FSx for Lustre および Amazon FSx for OpenZFS を HyperPod クラスターにマウントする](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-setup-with-fsx.md)
+ [HyperPod での Slurm クラスター作成前の JSON 設定ファイルの検証](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-json-files.md)
+ [HyperPod Slurm クラスターでの本番稼働ワークロード実行前のランタイム検証](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-validate-runtime.md)
+ [HyperPod クラスターノードでのライフサイクルスクリプトのインタラクティブ開発](sagemaker-hyperpod-lifecycle-best-practices-slurm-slurm-develop-lifecycle-scripts.md)