翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
を使用した SageMaker HyperPod の開始方法 AWS CLI
HyperPod の AWS CLI コマンドを使用して、最初の SageMaker HyperPod クラスターを作成します。
Slurm で最初の SageMaker HyperPod クラスターを作成する
次のチュートリアルでは、新しい SageMaker HyperPod クラスターを作成し、SageMaker HyperPod のAWS CLI
コマンドを使用して Slurm で設定する方法を示します。このチュートリアルでは、、my-controller-group、 my-login-groupの 3 つの Slurm ノードを持つ HyperPod クラスターを作成しますworker-group-1。
API 駆動型設定アプローチでは、 を使用して CreateCluster API リクエストで Slurm ノードタイプとパーティション割り当てを直接定義しますSlurmConfig。これにより、個別のprovisioning_parameters.jsonファイルが不要になり、組み込みの検証、ドリフト検出、per-instance-group FSx 設定が可能になります。
-
まず、ライフサイクルスクリプトを準備して 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 バケットにアップロードする方法を示しています。 -
ライフサイクルスクリプトのサンプルのコピーをローカルコンピュータのディレクトリにダウンロードします。
git clone https://github.com/aws-samples/awsome-distributed-training/ -
ディレクトリ
1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-configに移動し、一連のライフサイクルスクリプトを見つけます。 cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-configライフサイクルスクリプトのサンプルの詳細については、「ライフサイクルスクリプトを使用して SageMaker HyperPod クラスターをカスタマイズする」を参照してください。
-
スクリプトを
s3://sagemaker-にアップロードします。これを行うには、Amazon S3 コンソールを使用するか、次の AWS CLI Amazon S3 コマンドを実行します。<unique-s3-bucket-name>/<lifecycle-script-directory>/srcaws s3 sync \ ~/local-dir-to-lifecycle-scripts/* \ s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
注記
API 駆動型設定では、
provisioning_parameters.jsonファイルを作成またはアップロードする必要はありません。Slurm 設定は、次のステップの CreateCluster API リクエストで直接定義されます。 -
-
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 ロール。有効な値: Controller、Login、ComputePartitionNamesコンピューティングノードを割り当てる Slurm パーティション (複数可)。 Computeノードタイプにのみ有効です。Orchestrator.Slurm フィールド:
フィールド 説明 SlurmConfigStrategyHyperPod が を管理する方法を制御します slurm.conf。有効な値:Managed(デフォルト)Overwrite、、MergeSlurmConfigStrategy オプション:
-
Managed(推奨): HyperPod は、不正な変更 (ドリフト検出) を完全に管理slurm.confおよび検出します。ドリフトが検出されると、更新は失敗します。 -
Overwrite: HyperPod は、手動での変更を無視して、更新slurm.conf時に上書きします。 -
Merge: HyperPod は手動の変更を保持し、API 設定とマージします。
FSx for Lustre の追加 (オプション):
FSx for Lustre ファイルシステムをコンピューティングノードにマウントするには、インスタンスグループの
InstanceStorageConfigsFsxLustreConfigに を追加します。これにはカスタム 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"] } } -
-
次のコマンドを実行してクラスターを作成します。
aws sagemaker create-cluster --cli-input-jsonfile://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をリクエストに追加する -
describe-clusterを実行して、クラスターのステータスを確認します。aws sagemaker describe-cluster --cluster-namemy-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 分かかります。 -
list-cluster-nodesを実行して、クラスターノードの詳細を確認します。aws sagemaker list-cluster-nodes --cluster-namemy-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 クラスター上のジョブ」を参照してください。 -
AWS Systems Manager Session Manager を使用してクラスターに接続します。
aws ssm start-session \ --target sagemaker-cluster:my-hyperpod-cluster_my-login-group-i-0abc123def456789b\ --regionus-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-namemy-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 バケットやファイルシステムサービスにアーティファクトが保存されたかどうかも確認してください。料金の発生を防ぐには、ストレージまたはファイルシステムからすべてのアーティファクトとデータを削除します。