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

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

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

HyperPod の AWS CLI コマンドを使用して、最初の SageMaker HyperPod クラスターを作成します。

Slurm で最初の SageMaker HyperPod クラスターを作成する

次のチュートリアルでは、新しい SageMaker HyperPod クラスターを作成し、SageMaker HyperPod のAWS CLI コマンドを使用して Slurm で設定する方法を示します。このチュートリアルでは、、my-controller-groupmy-login-groupの 3 つの Slurm ノードを持つ HyperPod クラスターを作成しますworker-group-1

API 駆動型設定アプローチでは、 を使用して CreateCluster API リクエストで Slurm ノードタイプとパーティション割り当てを直接定義しますSlurmConfig。これにより、個別のprovisioning_parameters.jsonファイルが不要になり、組み込みの検証、ドリフト検出、per-instance-group FSx 設定が可能になります。

  1. まず、ライフサイクルスクリプトを準備して Amazon S3 バケットにアップロードします。クラスターの作成中、HyperPod は各インスタンスグループでそれらを実行します。次のコマンドを使用して、ライフサイクルスクリプトを Amazon S3 にアップロードします。

    aws s3 sync \ ~/local-dir-to-lifecycle-scripts/* \ s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
    注記

    SageMakerSageMaker HyperPod の IAM ロールは特定のプレフィックスで始まる Amazon S3 バケットへのアクセスAmazonSageMakerClusterInstanceRolePolicyのみを許可するためsagemaker-、S3 バケットパスはプレフィックス で始まる必要があります。 Amazon S3

    ゼロから開始する場合、Awsome Distributed Training GitHub リポジトリで提供されているサンプルライフサイクルスクリプトを使用します。以下のサブステップは、サンプルライフサイクルスクリプトをダウンロードして Amazon S3 バケットにアップロードする方法を示しています。

    1. ライフサイクルスクリプトのサンプルのコピーをローカルコンピュータのディレクトリにダウンロードします。

      git clone https://github.com/aws-samples/awsome-distributed-training/
    2. ディレクトリ 1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config に移動し、一連のライフサイクルスクリプトを見つけます。

      cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config

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

    3. スクリプトを s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src にアップロードします。これを行うには、Amazon S3 コンソールを使用するか、次の AWS CLI Amazon S3 コマンドを実行します。

      aws s3 sync \ ~/local-dir-to-lifecycle-scripts/* \ s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
    注記

    API 駆動型設定では、provisioning_parameters.jsonファイルを作成またはアップロードする必要はありません。Slurm 設定は、次のステップの CreateCluster API リクエストで直接定義されます。

  2. CreateCluster リクエストファイルを JSON 形式で準備し、create_cluster.json という名前で保存します。

    API 駆動型設定では、 SlurmConfigフィールドを使用して、各インスタンスグループの Slurm ノードタイプとパーティション割り当てを指定します。また、 を使用してクラスターレベルの Slurm 設定を構成しますOrchestrator.Slurm

    ExecutionRole には、「SageMaker HyperPod を使用するための前提条件」でマネージド AmazonSageMakerClusterInstanceRolePolicy を使用して作成した IAM ロールの ARN を指定します。

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

    SlurmConfig フィールド:

    フィールド 説明
    NodeType インスタンスグループの Slurm ロール。有効な値: ControllerLoginCompute
    PartitionNames コンピューティングノードを割り当てる Slurm パーティション (複数可)。Compute ノードタイプにのみ有効です。

    Orchestrator.Slurm フィールド:

    フィールド 説明
    SlurmConfigStrategy HyperPod が を管理する方法を制御しますslurm.conf。有効な値: Managed (デフォルト)Overwrite、、 Merge

    SlurmConfigStrategy オプション:

    • Managed (推奨): HyperPod は、不正な変更 (ドリフト検出) を完全に管理slurm.confおよび検出します。ドリフトが検出されると、更新は失敗します。

    • Overwrite: HyperPod は、手動での変更を無視して、更新slurm.conf時に上書きします。

    • Merge: HyperPod は手動の変更を保持し、API 設定とマージします。

    FSx for Lustre の追加 (オプション):

    FSx for Lustre ファイルシステムをコンピューティングノードにマウントするには、インスタンスグループの InstanceStorageConfigs FsxLustreConfigに を追加します。これにはカスタム VPC 設定が必要です。

    { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "InstanceStorageConfigs": [ { "FsxLustreConfig": { "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com", "MountPath": "/fsx", "MountName": "abcdefgh" } } ], "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }

    FSx for OpenZFS の追加 (オプション):

    FSx for OpenZFS ファイルシステムをマウントすることもできます。

    "InstanceStorageConfigs": [ { "FsxOpenZfsConfig": { "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com", "MountPath": "/shared" } } ]
    注記

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

    VPC 設定の追加 (FSx に必要):

    FSx を使用する場合は、カスタム VPC 設定を指定する必要があります。

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }, ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "VpcConfig": { "SecurityGroupIds": ["sg-0abc123def456789a"], "Subnets": ["subnet-0abc123def456789a"] } }
  3. 次のコマンドを実行してクラスターを作成します。

    aws sagemaker create-cluster --cli-input-json file://complete/path/to/create_cluster.json

    これにより、作成されたクラスターの ARN が返されます。

    { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster" }

    リソースの制限が原因でエラーが発生した場合、アカウントに十分なクォータを持つインスタンスタイプに変更するか、「SageMaker HyperPod クォータ」に従って追加のクォータをリクエストしてください。

    一般的な検証エラー:

    エラー 解決策
    「クラスターには Controller ノードタイプを持つ InstanceGroup が 1 つだけ必要です」 1 つのインスタンスグループに があることを確認しますSlurmConfig.NodeType"Controller"
    「パーティションは Compute ノードタイプにのみ割り当てることができます」 Controller またはLoginインスタンスグループPartitionNamesから削除する
    FSx 設定はカスタム VPC でのみサポートされています」 FSx の使用時に VpcConfigをリクエストに追加する
  4. describe-cluster を実行して、クラスターのステータスを確認します。

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

    レスポンスの例:

    { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster", "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "Creating", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "CreationTime": "2024-01-15T10:30:00Z" }

    クラスターのステータスが InService になったら、次のステップに進みます。クラスターの作成には通常 10~15 分かかります。

  5. list-cluster-nodes を実行して、クラスターノードの詳細を確認します。

    aws sagemaker list-cluster-nodes --cluster-name my-hyperpod-cluster

    レスポンスの例:

    { "ClusterNodeSummaries": [ { "InstanceGroupName": "my-controller-group", "InstanceId": "i-0abc123def456789a", "InstanceType": "ml.c5.xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:35:00Z" }, { "InstanceGroupName": "my-login-group", "InstanceId": "i-0abc123def456789b", "InstanceType": "ml.m5.4xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:35:00Z" }, { "InstanceGroupName": "worker-group-1", "InstanceId": "i-0abc123def456789c", "InstanceType": "ml.trn1.32xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:36:00Z" } ] }

    InstanceId は、クラスターユーザーが (aws ssm) にログインするために必要なものです。クラスターノードへのログインと ML ワークロードの実行の詳細については、「SageMaker HyperPod クラスター上のジョブ」を参照してください。

  6. AWS Systems Manager Session Manager を使用してクラスターに接続します。

    aws ssm start-session \ --target sagemaker-cluster:my-hyperpod-cluster_my-login-group-i-0abc123def456789b \ --region us-west-2

    接続したら、Slurm が正しく設定されていることを確認します。

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

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

SageMaker HyperPod クラスターは、作成のテストに成功した後、クラスターを削除するまで InService 状態で実行され続けます。オンデマンド料金に基づいてサービス料金が継続的に発生しないよう、オンデマンド SageMaker AI キャパシティを使用して作成されたクラスターは、使用しない際に削除することをお勧めします。このチュートリアルでは、3 つのインスタンスグループで構成されるクラスターを作成しました。次のコマンドを実行して、クラスターを削除してください。

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

このチュートリアルで使用した Amazon S3 バケットからライフサイクルスクリプトをクリーンアップするには、クラスターの作成時に使用した Amazon S3 バケットに移動し、ファイルを完全に削除します。

aws s3 rm s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src --recursive

クラスターでモデルトレーニングワークロードの実行をテストした場合、データをアップロードしたかどうか、ジョブで Amazon FSx for Lustre や Amazon Elastic File System などのさまざまな Amazon S3 バケットやファイルシステムサービスにアーティファクトが保存されたかどうかも確認してください。料金の発生を防ぐには、ストレージまたはファイルシステムからすべてのアーティファクトとデータを削除します。