기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
를 사용하여 SageMaker HyperPod 시작하기 AWS CLI
HyperPod용 AWS CLI 명령을 사용하여 첫 번째 SageMaker HyperPod 클러스터를 생성합니다.
Slurm을 사용하여 첫 번째 SageMaker HyperPod 클러스터 생성
다음 자습서에서는 SageMaker HyperPod 에 대한AWS CLI
명령을 통해 새 SageMaker HyperPod 클러스터를 생성하고 Slurm으로 설정하는 방법을 보여줍니다. 자습서에 따라 , my-controller-group my-login-group및 라는 세 개의 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참고
를 사용하는 S3SageMaker 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 EC2 콘솔에을 사용하거나 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 파일 시스템을 컴퓨팅 노드에 탑재하려면 인스턴스 그룹의
FsxLustreConfigInstanceStorageConfigs에를 추가합니다. 이를 위해서는 사용자 지정 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" } } ]참고
각 인스턴스 그룹은 최대 하나의 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 할당량에 따라 추가 할당량을 요청해야 합니다.
일반적인 검증 오류:
오류 해결 방법 “클러스터에는 컨트롤러 노드 유형이 있는 InstanceGroup 정확히 하나 있어야 합니다.” 정확히 하나의 인스턴스 그룹에이 있는지 확인합니다 SlurmConfig.NodeType."Controller"“파티션은 컴퓨팅 노드 유형에만 할당할 수 있습니다.” PartitionNamesController또는Login인스턴스 그룹에서 제거“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 세션 관리자를 사용하여 클러스터에 연결합니다.
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 용량을 사용하여 생성된 클러스터를 사용하지 않을 때는 삭제하는 것이 좋습니다. 이 자습서에서는 세 개의 인스턴스 그룹으로 구성된 클러스터를 생성했습니다. 다음 명령을 실행하여 클러스터를 삭제해야 합니다.
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 버킷 또는 파일 시스템 서비스에 아티팩트를 저장했는지도 확인합니다. 요금이 발생하지 않도록 하려면 스토리지 또는 파일 시스템에서 모든 아티팩트와 데이터를 삭제합니다.