View a markdown version of this page

を使用した SageMaker HyperPod の開始方法 AWS CLI - Amazon SageMaker AI

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

を使用した SageMaker HyperPod の開始方法 AWS CLI

次のチュートリアルでは、SageMaker HyperPod AWS CLI のコマンドを使用して Slurm で新しい SageMaker HyperPod クラスターを作成する方法を示します。このチュートリアルを終了すると、コントローラーノード、ログインノード、コンピューティングワーカーグループを備えた Slurm クラスターが稼働し、ML ワークロードをスケジュールして実行できるようになります。このチュートリアルでは、Slurm トポロジーのセットアップ、ノードライフサイクル設定オプション、オプションの FSx 共有ストレージ、クラスターへの接続方法について説明します。

開始する前に、 SageMaker HyperPod を使用するための前提条件 (VPC、クォータ、FSx) と AWS Identity and Access Management SageMaker HyperPod 用 (IAM ロール、 の実行ロール) を完了していることを確認してくださいAmazonSageMakerClusterInstanceRolePolicy

主要なコンセプト

このセクションでは、SageMaker HyperPod Slurm クラスターを作成するための主要な設定概念について説明します。これらの概念を理解することは、クラスターを設定するときに情報に基づいた選択を行うのに役立ちますが、すぐに使用を開始する場合は、 に直接ジャンプクラスターを作成するし、必要に応じてここで参照できます。

Slurm オーケストレーションクラスターを作成するときは、2 つの独立した設定を選択します。

  1. Slurm トポロジ設定 – Slurm クラスタートポロジ (ノードロール、パーティション) はどのように定義されますか?

  2. ノードライフサイクル設定 – ノードのプロビジョニングとカスタマイズはどのように行われますか?

Slurm トポロジの場合、このチュートリアルでは API 駆動型設定アプローチを使用します。このアプローチでは、SlurmConfig各インスタンスグループとクラスターレベルで を使用してCreateCluster、リクエストでノードロールとパーティションを直接定義Orchestrator.Slurmします。これは、新しいクラスターに推奨されるアプローチです。信頼できる単一のソース、組み込みの検証、パーティション設定ドリフト検出を提供し、追加のファイルを管理する必要はありません。または、Amazon S3 に保存されているレガシーprovisioning_parameters.jsonファイルを使用して、既存のクラスターとの下位互換性を保つこともできます。レガシーアプローチの詳細については、「」を参照してくださいSageMaker HyperPod Slurm の設定

ノードライフサイクル設定では、SageMaker HyperPod は 3 つのオプションをサポートしています。最も単純なケースではLifeCycleConfig、完全に省略すると、HyperPod は AMI ベースの設定を使用してノードを自動的に設定し、スクリプトや Amazon S3 バケットを必要とせずに、ML ワークロードを実行するために Slurm や Docker、Enroot、Pyxis などの必須パッケージを設定します。AMI ベースの設定に加えてカスタマイズが必要な場合は、設定の完了後にOnInitComplete実行される 拡張スクリプトを 経由で指定できます。プロビジョニングシーケンス全体を完全に制御するために、 OnCreateパスを使用すると、Slurm の起動時を含め、スクリプトがすべてを所有できます。

ML ワークロードの場合、通常、データ、チェックポイント、共有ライブラリをトレーニングするための共有高性能ファイルシステムも必要です。SageMaker HyperPod は、経由でインスタンスグループごとに設定された Amazon FSx for Lustre と FSx for OpenZFS をサポートしていますInstanceStorageConfigs。FSx 設定はクラスター作成ではオプションですが、本番ワークロードでは推奨されます。

API を使用した Slurm トポロジの設定

このチュートリアルのすべての例では、API 駆動型の Slurm トポロジ設定を使用します。ここでは、個別の設定ファイルではなく、CreateClusterAPI リクエストで Slurm クラスター構造を直接定義します。

Slurm クラスターには、少なくともコントローラーノード (デーモンを実行し、ジョブのスケジュールを調整する) slurmctld と 1 つ以上のコンピューティングノード (ジョブを実行する) が必要です。必要に応じて、ログインノードを追加して、コントローラーに直接ログインせずにジョブを送信および管理するための専用のアクセスポイントをユーザーに提供できます。API リクエストでは、 を使用して各インスタンスグループに Slurm ロールを割り当てSlurmConfig、グループがコントローラー、ログイン、またはコンピューティングノードとして機能するかどうかを指定します。コンピューティンググループは、1 つ以上の Slurm パーティションにもマッピングされます。これは、異なるノードセット間でジョブをスケジュールする方法を整理する論理キューとして機能します。

クラスターレベルで、 は HyperPod が でパーティション設定を管理する方法Orchestrator.Slurmを制御しますslurm.conf。HyperPod がパーティショントポロジーの唯一の信頼できるソースであるかどうか、手動の変更を上書きするかどうか、API 定義の設定を手動編集とマージするかどうかを決定する戦略を選択します。使用されるフィールドのリファレンスを次に示します。

SlurmConfig (インスタンスグループあたり):

"SlurmConfig": { "NodeType": "Controller | Login | Compute", "PartitionNames": ["partition-name"] }
フィールド 説明
NodeType 必須。このインスタンスグループの Slurm ロール。有効な値は、ControllerLoginCompute です。1 つのインスタンスグループは である必要がありますController
PartitionNames 条件付き。Slurm パーティション名。Compute ノードタイプに必須。 Controllerまたは では許可されませんLogin

Orchestrator.Slurm (クラスターレベル):

"Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed | Overwrite | Merge" } }

SlurmConfigStrategy は、HyperPod がコントローラーノードslurm.conf上の partition-to-node間のマッピングを管理する方法を決定します。クラスターを作成または更新すると、HyperPod は各インスタンスグループでSlurmConfig定義した slurm.conf に基づいてパーティション設定を に書き込み、コンピューティングインスタンスグループを割り当てられたパーティションにマッピングし、コントローラーノードとログインノードを適切な Slurm ロールに登録します。

選択した戦略は、管理者がコントローラーノードでファイルを直接編集するなど、 のパーティション設定slurm.confが API の外部で変更された場合の動作を制御します。ではManaged、HyperPod は API を単一の信頼できるソースとして扱い、ディスクslurm.conf上の がドリフトした場合に更新を検出してブロックします。ではOverwrite、HyperPod は API 定義の設定をコントローラーに強制的に適用し、 への手動編集はすべて破棄しますslurm.conf。これは、意図しない変更からの復旧に役立ちます。ではMerge、HyperPod は への手動編集を保持slurm.confし、API 設定とマージします。これにより、高度なユーザーは API マネージドパーティションとともにカスタムslurm.conf設定を柔軟に維持できます。

方針 パーティションドリフト検出 手動変更 ユースケース
Managed (デフォルト) 有効。ドリフトが見つかった場合、更新をブロックする サポートされていません 単一の情報源
Overwrite Disabled 更新時に上書き ドリフトからの復旧
Merge Disabled 保存およびマージ済み カスタムslurm.confニーズ
重要

ドリフト検出は、 の Slurm パーティション設定 slurm.conf ( partition-to-nodeマッピング) にのみ適用されます。スケジュールパラメータ、リソース制限、アカウンティングslurm.conf設定などの他の設定の変更はモニタリングされず、HyperPod によって検出または報告されません。

注記

API の代わりに provisioning_parameters.json ファイルを使用して Slurm トポロジを定義する場合は、SlurmConfigインスタンスグループとクラスターリクエストOrchestrator.Slurmから を省略し、ノードライフサイクルスクリプトとともにファイルを Amazon S3 にアップロードします。詳細については、「SageMaker HyperPod Slurm の設定」を参照してください。

ノードライフサイクル設定オプション

SageMaker HyperPod Slurm クラスターを作成するときは、CreateClusterリクエストで LifeCycleConfigブロックを設定して、各インスタンスグループのノードのプロビジョニング方法を選択します。SageMaker HyperPod は 3 つのノードライフサイクル設定オプションをサポートし、それぞれがプロビジョニングプロセスに対して異なるレベルの制御を提供します。

AMI ベースの設定のみの場合は、 LifeCycleConfigを完全に省略します。HyperPod は、AMI ベースの設定、Slurm の設定、必須パッケージのインストール、必要なすべてのサービスの開始を使用してノードを自動的に設定します。これは最も簡単なパスであり、Amazon S3 バケットやスクリプトは必要ありません。

拡張機能オプションでは、Amazon S3 OnInitCompleteの拡張機能スクリプトSourceS3Uriを指すLifeCycleConfigとともに で を指定します。HyperPod は、まず完全な AMI ベースの設定を実行し、次にスクリプトを実行します。これにより、ベースラインプロビジョニングを管理することなく、モニタリングエージェント、LDAP 統合、追加のストレージマウントなどのカスタマイズを追加できます。

Custom オプションでは、Amazon S3 で設定されたライフサイクルスクリプトSourceS3Uri全体を指すLifeCycleConfigとともに、 OnCreateで を指定します。 Amazon S3 HyperPod は AMI ベースの設定を実行せず、Slurm を起動しません。スクリプトはプロビジョニングシーケンス全体を所有します。これにより、インストールされるソフトウェア、設定方法、Slurm の起動時期を完全に制御できます。

ノードライフサイクルオプション Amazon S3 バケットが必要ですか? アップロードするスクリプト API の LifeCycleConfig?
AMI ベースの設定のみ (最もシンプル) いいえ いいえ 完全に省略する
拡張機能 (OnInitComplete) はい 拡張機能スクリプトのみ OnInitComplete + SourceS3Uri
カスタム (OnCreate) はい フルライフサイクルスクリプトセット OnCreate + SourceS3Uri
注記

オプションのノードライフサイクル設定は、Slurm オーケストレーションされたクラスターでのみサポートされます。Continuous を使用する EKS オーケストレーションクラスターと Slurm クラスターでは、すべてのインスタンスグループLifeCycleConfigOnCreateSourceS3Uri NodeProvisioningModeが引き続き必要です。

注記

OnCreateOnInitCompleteは相互に排他的です。同じインスタンスグループで両方を指定すると、検証エラーが発生します。

FSx と VPC の設定

ML ワークロードの場合、クラスターノード間でトレーニングデータ、モデルチェックポイント、共有ライブラリを保存するには、共有の高性能ファイルシステムが不可欠です。SageMaker HyperPod は、経由でインスタンスグループごとに設定された Amazon FSx for Lustre と FSx for OpenZFS をサポートしていますInstanceStorageConfigs。FSx ファイルシステムは VPC に存在するため、FSx を使用する場合はカスタム VPC 設定 (VpcConfig) が必要です。

FSx 設定は、3 つのノードライフサイクル設定オプションすべてで機能します。AMI ベースの設定または を使用する場合OnInitComplete、HyperPod は FSx マウントを自動的に処理します。を使用する場合OnCreate、ライフサイクルスクリプトがマウントを担当します。

FSx for Lustre:

"InstanceStorageConfigs": [ { "FsxLustreConfig": { "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com", "MountPath": "/fsx", "MountName": "abcdefgh" } } ]
フィールド 説明
DnsName 必須。FSx for Lustre ファイルシステムの DNS 名。
MountPath オプション。インスタンスのローカルマウントパス。デフォルト: /fsx
MountName 必須。FSx for Lustre ファイルシステムのマウント名。これは、FSx for Lustre コンソールまたは で検索しますaws fsx describe-file-systems

FSx for OpenZFS:

"InstanceStorageConfigs": [ { "FsxOpenZfsConfig": { "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com", "MountPath": "/shared" } } ]
フィールド 説明
DnsName 必須。FSx for OpenZFS ファイルシステムの DNS 名。
MountPath オプション。インスタンスのローカルマウントパス。デフォルト: /home
注記

各インスタンスグループは、最大 1 つの FSx for Lustre と FSx for OpenZFS 設定を持つことができます。異なるインスタンスグループは、異なるファイルシステムをマウントできます。

VPC 設定 (FSx に必要):

CreateCluster リクエストVpcConfigのクラスターレベルで を追加します。

"VpcConfig": { "SecurityGroupIds": ["sg-0abc123def456789a"], "Subnets": ["subnet-0abc123def456789a"] }

VPC のセットアップの詳細については、「」を参照してくださいSageMaker HyperPod を使用するための前提条件。FSx のセットアップの詳細については、「」を参照してくださいSageMaker HyperPod を使用するための前提条件

クラスターを作成する

このセクションでは、「」で説明されている 3 つのノードライフサイクル設定オプションのそれぞれを使用してクラスターを作成する方法について説明しますノードライフサイクル設定オプション。ほとんどのユーザーには、オプション A の AMI ベースの設定から開始することをお勧めします。スクリプトや Amazon S3 バケットは不要で、完全に機能するクラスターをすぐに提供します。AMI ベースの設定の上にカスタマイズを追加する必要がある場合はオプション B、プロビジョニングプロセスを完全に制御する必要がある場合はオプション C を選択します。

すべての例ExecutionRoleで、 AmazonSageMakerClusterInstanceRolePolicyで管理されている で作成した IAM ロールの ARN を指定しますSageMaker HyperPod を使用するための前提条件

オプション A: AMI ベースの設定のみ (ライフサイクル設定なし)

これは最も簡単なパスです。Amazon S3 バケット、スクリプト、または設定ファイルは必要ありません。SageMaker HyperPod は、AMI ベースの設定を使用してノードを自動的に設定し、重要なソフトウェアをインストールして設定を適用することで、クラスターがすぐに ML ワークロードを実行できるようにします。すべてのソフトウェアパッケージは AMI に埋め込まれているため、プロビジョニング中にインターネットアクセスは必要ありません。

次の表に、AMI ベースの設定に含まれる機能を示します。

機能 説明
スラムデーモンコントローラーデーモンとコンピューティングデーモンが自動的に開始されました
DockerML コンテナを構築および実行するためのコンテナランタイム
エンルートSlurm ワークロードのルートレスコンテナ実行
プロキシコンテナ統合用の Slurm プラグイン
Slurm アカウンティングジョブ履歴とリソース消費量を追跡するための Slurm ジョブアカウンティングを設定します
MariaDBSlurm アカウンティングのバッキングデータベースとしてコントローラーノードに MariaDB をデプロイします
SSH キーの生成デフォルトの ubuntu ユーザー用に生成されたキーペア
SSH 伝達マルチノードジョブのコンピューティングノード間で伝達されるユーザー認証情報
Slurm ログのローテーションログの肥大化とディスクいっぱいの問題を防止
ホームディレクトリのセットアップ共有ファイルシステムにマウントされた Ubuntu ユーザーホームディレクトリ
  1. 次のように として保存しますcreate_cluster.json

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "FsxLustreConfig": { "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com", "MountPath": "/fsx", "MountName": "abcdefgh" } } ] } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "VpcConfig": { "SecurityGroupIds": ["sg-0abc123def456789a"], "Subnets": ["subnet-0abc123def456789a"] } }

    インスタンスグループには LifeCycleConfigが指定されていないことに注意してください。

    Slurm トポロジは、各インスタンスグループSlurmConfigで を介して定義されます。 my-controller-groupにはControllerロールが割り当てられ ( を実行slurmctld)、ユーザーアクセスのLoginノードmy-login-groupとして機能し、 はジョブスケジューリングpartition-1の に割り当てられたComputeノードworker-group-1です。クラスターレベルでは、 は HyperPod がパーティション設定の唯一の信頼できるソースであることをSlurmConfigStrategy: "Managed"保証します。ワーカーグループには、共有ストレージ/fsx用に にマウントされた FSx for Lustre ファイルシステムが含まれており、FSx の必要に応じてクラスターレベルでVpcConfig指定されます。

    ヒント

    FSx なしでテストする場合は、リクエストFsxLustreConfigから を省略InstanceStorageConfigsしたり、リクエストVpcConfigから削除したりできます。FSx はクラスターの作成には必要ありませんが、本番稼働用 ML ワークロードには推奨されます。

  2. クラスターを作成します。

    aws sagemaker create-cluster \ --cli-input-json file://create_cluster.json
  3. ステータスを確認します。

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    AMI ベースの設定のみの場合、レスポンスのインスタンスグループにはLifeCycleConfigブロックは含まれません。以下は、コントローラーインスタンスグループを示す切り捨てられた例です。

    { "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "InService", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "SlurmConfig": { "NodeType": "Controller" } } ] }

    ステータスが になったらInService、 に進みますクラスターに接続する

オプション B: OnInitComplete を使用して AMI ベースの設定を拡張する

このオプションは、エージェントのモニタリング、LDAP/SSSD 統合、追加のストレージマウントなど、AMI ベースの設定に加えてカスタマイズが必要な場合に使用します。SageMaker HyperPod は最初に AMI ベースの設定を実行し、次に拡張機能スクリプトを実行します。

  1. 拡張機能スクリプトを記述します。例extend-defaults.sh:

    #!/bin/bash set -e echo "Running post-initialization customizations..." # Example: Install a monitoring agent # apt-get install -y my-monitoring-agent # Example: Configure LDAP integration # /opt/custom/setup-ldap.sh # Example: Mount an additional S3 bucket # mount-s3 my-data-bucket /mnt/s3-data echo "Custom extensions complete."
    Awsome Distributed Training リポジトリから拡張スクリプトを使用する

    Awsome Distributed Training リポジトリの Extensions フォルダにはready-to-use拡張スクリプトが用意されています。各機能は、スクリプトとして直接提供できる独自のエントリポイントスクリプトを使用して、独自のディレクトリに自己完結型ですOnInitComplete

    複数の機能を必要とするクラスターの場合は、拡張機能フォルダの最上位にあるrun_extensions.shスクリプトを使用することをお勧めします。このスクリプトは、使用可能なすべての拡張機能スクリプトをオーケストレーションし、各機能を有効または無効にするためのシンプルなブールトグルを提供します。これを使用するには、拡張機能フォルダ全体を Amazon S3 バケットにアップロードし、OnInitCompleteスクリプトrun_extensions.shとして を指定します。

    s3://<bucket>/<prefix>/ |-- run_extensions.sh (OnInitComplete target) |-- detect-node/ (node type detection utility) |-- add-users/ (user management scripts + config) |-- observability/ (observability scripts + config)

    内でrun_extensions.sh、対応する フラグを設定して、各機能を有効または無効にします。

    ENABLE_ADD_USERS="true" ENABLE_OBSERVABILITY="true"

    有効な各機能の設定ファイルは、Amazon S3 にアップロードする前に入力する必要があります。設定の詳細については、各機能の ディレクトリの README を参照してください。

  2. Amazon S3 にアップロードする (バケットパスは で始まる必要がありますs3://sagemaker-)。

    aws s3 cp extend-defaults.sh \ s3://sagemaker-amzn-s3-demo-bucket/scripts/
  3. 次のように として保存しますcreate_cluster.json

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "OnInitComplete": "extend-defaults.sh", "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "OnInitComplete": "extend-defaults.sh", "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "OnInitComplete": "extend-defaults.sh", "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } } }
    重要

    OnInitComplete を指定すると、 SourceS3Uriは必須です。 OnCreateOnInitComplete は同じインスタンスグループで一緒に使用することはできません。

    ヒント

    クラスター内でオプションを混在させることができます。たとえば、AMI ベースの設定は、コントローラーとOnInitCompleteワーカーでのみ使用します。

    Slurm トポロジはオプション A と同じです。各インスタンスグループにはノードロールとパーティション割り当てSlurmConfigを定義する があり、クラスターレベルでSlurmConfigStrategy: "Managed"設定されます。唯一の違いは、 LifeCycleConfigに を追加することです。これによりOnInitComplete、各ノードで AMI ベースの設定が完了した後に、拡張スクリプトを実行するように HyperPod に指示します。FSx を追加するには、関連するインスタンスグループに FsxLustreConfigまたは FsxOpenZfsConfigInstanceStorageConfigs に含め、VpcConfig「」で説明されているようにクラスターレベルで を追加しますFSx と VPC の設定

  4. クラスターを作成します。

    aws sagemaker create-cluster \ --cli-input-json file://create_cluster.json
  5. ステータスを確認します。

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    ではOnInitComplete、レスポンスが OnInitCompleteに表示されますLifeCycleConfig。以下は、コントローラーインスタンスグループを示す切り捨てられた例です。

    { "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "InService", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/scripts/", "OnInitComplete": "extend-defaults.sh" } } ] }

    ステータスが になったらInService、 に進みますクラスターに接続する

オプション C: OnCreate によるフルカスタムコントロール (アドバンスド)

このオプションは、ソフトウェアのインストール、インフラストラクチャの変更、Slurm の起動時期の決定など、プロビジョニングを完全に制御する必要がある場合に使用します。ではOnCreate、SageMaker HyperPod は AMI ベースの設定を実行せず、Slurm を自動的に起動しません

注記

SageMaker HyperPod を初めて使用し、特定のカスタマイズ要件がない場合は、オプション A またはオプション B から始めることをお勧めします。後でいつでもカスタムモードに移行できます。

  1. ライフサイクルスクリプトを準備して Amazon S3 にアップロードします。最初から開始する場合は、Awsome Distributed Training GitHub リポジトリのサンプルスクリプトを使用します。

    git clone https://github.com/aws-samples/awsome-distributed-training/ cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config

    Amazon S3 にアップロードする (バケットパスは で始まる必要がありますs3://sagemaker-)。

    aws s3 sync . \ s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src

    ライフサイクルスクリプトの詳細については、「ライフサイクルスクリプトを使用して SageMaker HyperPod クラスターをカスタマイズする」を参照してください。

  2. 次のように として保存しますcreate_cluster.json

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } } }

    Slurm トポロジは、他のオプションと同じSlurmConfigパターンに従います。主な違いは LifeCycleConfigですOnCreate。これにより、HyperPod は AMI ベースの設定を完全にスキップし、代わりにon_create.shスクリプトを実行するように指示されます。スクリプトは、ソフトウェアのインストール、Slurm の設定、Slurm デーモンの開始など、プロビジョニングシーケンス全体を担当します。FSx を追加するには、関連するインスタンスグループに FsxLustreConfigまたは FsxOpenZfsConfigInstanceStorageConfigs に含め、VpcConfig「」で説明されているようにクラスターレベルで を追加しますFSx と VPC の設定

  3. クラスターを作成します。

    aws sagemaker create-cluster \ --cli-input-json file://create_cluster.json
  4. ステータスを確認します。

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    ではOnCreate、レスポンスが OnCreateに表示されますLifeCycleConfig。以下は、コントローラーインスタンスグループを示す切り捨てられた例です。

    { "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "InService", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src", "OnCreate": "on_create.sh" } } ] }

    ステータスが になったらInService、 に進みますクラスターに接続する

一般的な検証エラー

エラー 解像度
「クラスターには Controller ノードタイプを持つ InstanceGroup が 1 つだけ必要です」 1 つのインスタンスグループに があることを確認しますSlurmConfig.NodeType"Controller"
「パーティションは Compute ノードタイプにのみ割り当てることができます」 Controller またはLoginインスタンスグループPartitionNamesから削除する
FSx 設定はカスタム VPC でのみサポートされています」 FSx の使用時に VpcConfigをリクエストに追加する
「インスタンスグループにはLifeCycleConfig が必要です...」 EKS クラスターまたは Slurm Continuous NodeProvisioningMode。オプションのノードライフサイクル設定はサポートされていません。
LifeCycleConfig の OnCreate と OnInitComplete は相互に排他的です...」 OnCreate または を削除しますOnInitComplete。両方を指定することはできません。
「インスタンスグループのLifeCycleConfig が不完全です...」 OnCreate または OnInitCompleteを指定するSourceS3Uri場合は、 も指定する必要があります。
LifeCycleConfig はオプションですが、互換性のある AMI が必要です...」 UpdateClusterSoftware を実行して、オプションのノードライフサイクル設定をサポートする AMI に更新します。
「インスタンスグループのLifeCycleConfig は提供されていますが、設定は含まれていません...」 OnCreate または SourceS3Uriで を指定するかOnInitCompleteLifeCycleConfigを完全に省略します。

クラスターに接続する

クラスターのステータスが InService (通常は 10~15 分) になったら、接続して確認します。

  1. インスタンス IDs。

    aws sagemaker list-cluster-nodes --cluster-name my-hyperpod-cluster
  2. AWS Systems Manager Session Manager を使用して接続します。

    aws ssm start-session \ --target sagemaker-cluster:my-hyperpod-cluster_my-login-group-i-0abc123def456789b \ --region us-west-2
  3. Slurm が正しく設定されていることを確認します。

    # Check Slurm nodes sinfo # Check Slurm partitions sinfo -p partition-1 # Submit a test job srun -p partition-1 --nodes=1 hostname

ML ワークロードの実行の詳細については、「」を参照してくださいSageMaker HyperPod クラスター上のジョブ

クラスターを削除してリソースをクリーンアップする

テスト後、継続的な料金が発生しないように、クラスターを削除します。

aws sagemaker delete-cluster --cluster-name my-hyperpod-cluster

ノードライフサイクルスクリプト (オプション B またはオプション C) を使用した場合は、Amazon S3 バケットをクリーンアップします。

aws s3 rm s3://sagemaker-amzn-s3-demo-bucket/lifecycle/src --recursive

AMI ベースの設定のみを使用した場合 (オプション A)、ノードライフサイクルスクリプトに Amazon S3 クリーンアップは必要ありません。

トレーニングワークロードを実行した場合は、Amazon S3、Amazon FSx for Lustre、または Amazon Elastic File System のデータまたはアーティファクトもチェックし、料金が発生しないように削除します。