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 클러스터를 생성하는 방법을 보여줍니다. 이 자습서를 마치면 ML 워크로드를 예약하고 실행할 준비가 된 컨트롤러 노드, 로그인 노드 및 컴퓨팅 작업자 그룹이 있는 작동 중인 Slurm 클러스터를 갖게 됩니다. 이 자습서에서는 Slurm 토폴로지 설정, 노드 수명 주기 구성 옵션, 선택적 FSx 공유 스토리지, 클러스터에 연결하는 방법을 다룹니다.

시작하기 전에 SageMaker HyperPod 사용을 위한 사전 조건 (VPC, 할당량, FSx) 및 AWS Identity and Access Management SageMaker HyperPod용 (IAM 역할,를 사용한 실행 역할)을 완료했는지 확인합니다AmazonSageMakerClusterInstanceRolePolicy.

주요 개념

이 섹션에서는 SageMaker HyperPod Slurm 클러스터를 생성하기 위한 핵심 구성 개념을 다룹니다. 이러한 개념을 이해하면 클러스터를 구성할 때 정보에 입각한 선택을 하는 데 도움이 되지만 즉시 시작하려면 로 바로 이동하여 필요에 따라 여기서 다시 클러스터 생성 참조할 수 있습니다.

Slurm 오케스트레이션 클러스터를 생성할 때 두 가지 독립적인 구성을 선택합니다.

  1. Slurm 토폴로지 구성 - Slurm 클러스터 토폴로지(노드 역할, 파티션)는 어떻게 정의되나요?

  2. 노드 수명 주기 구성 - 노드는 어떻게 프로비저닝되고 사용자 지정되나요?

Slurm 토폴로지의 경우이 자습서에서는 API 기반 구성 접근 방식을 사용합니다. 여기서SlurmConfig는 각 인스턴스 그룹 및 클러스터 수준에서를 사용하여 CreateCluster 요청Orchestrator.Slurm에서 직접 노드 역할과 파티션을 정의합니다. 이는 새 클러스터에 권장되는 접근 방식입니다. 관리할 추가 파일 없이 단일 신뢰할 수 있는 소스, 기본 제공 검증 및 파티션 구성 드리프트 감지를 제공합니다. 또는 기존 클러스터와의 이전 버전 호환성을 위해 Amazon S3에 저장된 레거시 provisioning_parameters.json 파일을 사용할 수 있습니다. 레거시 접근 방식에 대한 자세한 내용은 섹션을 참조하세요SageMaker HyperPod Slurm 구성.

노드 수명 주기 구성의 경우 SageMaker HyperPod는 세 가지 옵션을 지원합니다. 가장 간단한 경우에는 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 클러스터 구조를 정의하는 CreateCluster API 기반 Slurm 토폴로지 구성을 사용합니다.

Slurm 클러스터에는 하나 이상의 컨트롤러 노드(slurmctld데몬을 실행하고 작업 일정을 조정하는 노드)와 하나 이상의 컴퓨팅 노드(작업을 실행하는 노드)가 필요합니다. 선택적으로 로그인 노드를 추가하여 컨트롤러에 직접 로그인하지 않고도 작업을 제출하고 관리할 수 있는 전용 액세스 포인트를 사용자에게 제공할 수 있습니다. API 요청에서를 사용하여 각 인스턴스 그룹에 Slurm 역할을 할당하고 그룹이 컨트롤러, 로그인 또는 컴퓨팅 노드 역할을 하는지 여부를 SlurmConfig지정합니다. 컴퓨팅 그룹은 하나 이상의 Slurm 파티션에도 매핑되며,이 파티션은 서로 다른 노드 세트에서 작업이 예약되는 방식을 구성하는 논리적 대기열 역할을 합니다.

클러스터 수준에서는 HyperPod가에서 파티션 구성을 관리하는 방법을 Orchestrator.Slurm 제어합니다slurm.conf. HyperPod가 파티션 토폴로지의 단일 소스인지, 수동 변경 사항을 덮어쓰는지 또는 API 정의 구성을 사용자가 만든 수동 편집과 병합하는지 여부를 결정하는 전략을 선택합니다. 다음은 사용된 필드에 대한 참조입니다.

SlurmConfig(인스턴스 그룹당):

"SlurmConfig": { "NodeType": "Controller | Login | Compute", "PartitionNames": ["partition-name"] }
필드 설명
NodeType 필수 사항입니다. 이 인스턴스 그룹의 Slurm 역할입니다. 유효한 값: Controller, Login, Compute. 정확히 하나의 인스턴스 그룹은 여야 합니다Controller.
PartitionNames 조건부. Slurm 파티션 이름입니다. Compute 노드 유형에 필수이며 Controller 또는 에는 허용되지 않습니다Login.

Orchestrator.Slurm(클러스터 수준):

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

SlurmConfigStrategy는 HyperPod가 컨트롤러 partition-to-node 매핑을 관리하는 방법을 결정합니다. slurm.conf 클러스터를 생성하거나 업데이트할 때 HyperPod는 각 인스턴스 그룹에 SlurmConfig 정의한를 slurm.conf 기반으로 파티션 구성을에 쓰고, 컴퓨팅 인스턴스 그룹을 할당된 파티션에 매핑하고, 컨트롤러 및 로그인 노드를 적절한 Slurm 역할에 등록합니다.

선택한 전략은 예를 들어 컨트롤러 노드에서 직접 파일을 편집하는 관리자가 API 외부에서의 파티션 구성을 수정slurm.conf한 경우 발생하는 상황을 제어합니다. Managed를 사용하면 HyperPod는 API를 단일 정보 소스로 취급하고 디스크slurm.conf의가 드리프트된 경우 업데이트를 감지하고 차단합니다. 를 사용하면 Overwrite HyperPod는 API 정의 구성을 컨트롤러에 강제로 적용하여 수동 편집을 로 무시합니다slurm.conf. 이는 의도하지 않은 변경에서 복구하는 데 유용합니다. Merge를 사용하면 HyperPod는에 대한 수동 편집을 보존slurm.conf하고 API 구성과 병합하므로 고급 사용자는 API 관리형 파티션과 함께 사용자 지정 slurm.conf 설정을 유연하게 유지할 수 있습니다.

전략 파티션 드리프트 감지 수동 변경 사항 사용 사례:
Managed(기본값) 활성화됨, 드리프트가 발견되면 업데이트를 차단합니다. 지원되지 않음 단일 정보 소스
Overwrite 비활성화됨 업데이트 시 덮어쓰기됨 드리프트에서 복구
Merge 비활성화됨 보존 및 병합 사용자 지정 slurm.conf 요구 사항
중요

드리프트 감지는의 Slurm 파티션 구성에만 적용됩니다slurm.conf(API를 통해 정의된 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는 세 가지 노드 수명 주기 구성 옵션을 지원하며, 각 옵션은 프로비저닝 프로세스에 대해 서로 다른 수준의 제어를 제공합니다.

AMI 기반 구성만 사용하면 LifeCycleConfig 완전히 생략됩니다. HyperPod는 AMI 기반 구성을 사용하여 노드를 자동으로 구성하고, Slurm을 설정하고, 필수 패키지를 설치하고, 필요한 모든 서비스를 시작합니다. 가장 간단한 경로이며 Amazon S3 버킷이나 스크립트가 필요하지 않습니다.

확장 옵션을 사용하면 Amazon S3OnInitComplete에서 확장 스크립트를 SourceS3Uri 가리키는와 LifeCycleConfig 함께를 지정합니다. HyperPod는 먼저 전체 AMI 기반 구성을 실행한 다음 스크립트를 실행합니다. 이를 통해 기준 프로비저닝을 관리하지 않고도 모니터링 에이전트, LDAP 통합 또는 추가 스토리지 마운트와 같은 사용자 지정을 추가할 수 있습니다.

사용자 지정 옵션을 사용하면 Amazon S3OnCreate의 전체 수명 주기 스크립트 세트를 SourceS3Uri 가리키는와 LifeCycleConfig 함께에서를 지정합니다. HyperPod는 AMI 기반 구성을 실행하지 않으며 Slurm을 시작하지 않습니다. 스크립트는 전체 프로비저닝 시퀀스를 소유합니다. 이를 통해 설치된 소프트웨어, 구성 방법, Slurm 시작 시기를 완벽하게 제어할 수 있습니다.

노드 수명 주기 옵션 Amazon S3 버킷이 필요합니까? 업로드할 스크립트는? API의 LifeCycleConfig?
AMI 기반 구성만 해당(단순) 아니요 아니요 완전히 생략
확장(OnInitComplete) 확장 스크립트만 OnInitComplete + SourceS3Uri
사용자 지정(OnCreate) 전체 수명 주기 스크립트 세트 OnCreate + SourceS3Uri
참고

선택적 노드 수명 주기 구성은 Slurm 오케스트레이션 클러스터에서만 지원됩니다. Continuous를 사용하는 EKS 오케스트레이션 클러스터 및 Slurm 클러스터는 모든 인스턴스 그룹에 LifeCycleConfig OnCreateSourceS3UriNodeProvisioningMode 계속 필요합니다.

참고

OnCreateOnInitComplete는 상호 배타적입니다. 동일한 인스턴스 그룹에서 둘 다 지정하면 검증 오류가 발생합니다.

FSx 및 VPC 구성

ML 워크로드의 경우 클러스터 노드 간에 훈련 데이터, 모델 체크포인트 및 공유 라이브러리를 저장하려면 공유 고성능 파일 시스템이 필수적입니다. SageMaker HyperPod는를 통해 인스턴스 그룹별로 구성된 Amazon FSx for Lustre 및 FSx for OpenZFS를 지원합니다InstanceStorageConfigs. FSx 파일 시스템은 VPC에 상주하므로 FSx를 사용할 때는 사용자 지정 VPC 구성(VpcConfig)이 필요합니다.

FSx 구성은 세 가지 노드 수명 주기 구성 옵션 모두에서 작동합니다. 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
참고

각 인스턴스 그룹은 최대 하나의 FSx for Lustre 및 하나의 FSx for OpenZFS 구성을 가질 수 있습니다. 인스턴스 그룹마다 다른 파일 시스템을 탑재할 수 있습니다.

VPC 구성(FSx에 필요):

CreateCluster 요청VpcConfig의 클러스터 수준에서를 추가합니다.

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

VPC 설정에 대한 자세한 내용은 섹션을 참조하세요SageMaker HyperPod 사용을 위한 사전 조건. FSx 설정에 대한 자세한 내용은 섹션을 참조하세요SageMaker HyperPod 사용을 위한 사전 조건.

클러스터 생성

이 섹션에서는에 설명된 세 가지 노드 수명 주기 구성 옵션을 각각 사용하여 클러스터를 생성하는 방법을 안내합니다노드 수명 주기 구성 옵션. 대부분의 사용자에게는 옵션 A, AMI 기반 구성으로 시작하는 것이 좋습니다. 스크립트나 Amazon S3 버킷이 필요하지 않으며 바로 사용할 수 있는 완전한 기능을 갖춘 클러스터를 제공합니다. AMI 기반 구성 위에 사용자 지정을 추가해야 하는 경우 옵션 B를 선택하고 프로비저닝 프로세스를 완전히 제어해야 하는 경우 옵션 C를 선택합니다.

모든 예제ExecutionRole에서 AmazonSageMakerClusterInstanceRolePolicy에에서 관리형 로 생성한 IAM 역할의 ARN을 제공합니다SageMaker HyperPod 사용을 위한 사전 조건.

옵션 A: AMI 기반 구성만 해당(수명 주기 구성 없음)

가장 간단한 경로입니다. Amazon S3 버킷, 스크립트 또는 구성 파일은 필요하지 않습니다. SageMaker HyperPod는 AMI 기반 구성을 사용하여 노드를 자동으로 구성하고, 필수 소프트웨어를 설치하고, 구성을 적용하여 클러스터가 즉시 ML 워크로드를 실행할 수 있도록 합니다. 모든 소프트웨어 패키지는 AMI에 포함되어 있으므로 프로비저닝 중에 인터넷에 액세스할 필요가 없습니다.

다음 표에는 AMI 기반 구성에 포함된 기능이 나열되어 있습니다.

기능 설명
Slurm 데몬컨트롤러 및 컴퓨팅 데몬이 자동으로 시작됨
DockerML 컨테이너 빌드 및 실행을 위한 컨테이너 런타임
루트Slurm 워크로드에 대한 루트 없는 컨테이너 실행
Pyxis컨테이너 통합을 위한 Slurm 플러그인
Slurm 회계작업 기록 및 리소스 소비를 추적하기 위한 Slurm 작업 회계를 구성합니다.
MariaDB컨트롤러 노드에 MariaDB를 Slurm 회계를 위한 백업 데이터베이스로 배포합니다.
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 분산 훈련 리포지토리의 확장 스크립트 사용

    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가 필요합니다. OnCreate 및는 동일한 인스턴스 그룹에서 함께 사용할 수 OnInitComplete 없습니다.

    작은 정보

    클러스터 내에서 옵션을 혼합할 수 있습니다. 예를 들어 컨트롤러와 OnInitComplete 작업자에서만 AMI 기반 구성을 사용합니다.

    Slurm 토폴로지는 옵션 A와 동일합니다. 각 인스턴스 그룹에는 노드 역할과 파티션 할당을 SlurmConfig 정의하는 SlurmConfigStrategy: "Managed"이 있으며 클러스터 수준에서 설정됩니다. 유일한 차이점은 LifeCycleConfig 각 노드에서 AMI 기반 구성이 완료된 후 HyperPod에 확장 스크립트를 실행하도록 지시OnInitComplete하는에를 추가하는 것입니다. FSx를 추가하려면 FsxOpenZfsConfigInstanceStorageConfigs에 설명된 대로 관련 인스턴스 그룹에 FsxLustreConfig 또는를 포함하고 클러스터 수준에서 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

    를 사용하면 응답OnInitCompleteOnInitComplete에 표시됩니다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. 이렇게 on_create.sh 하면 HyperPod가 AMI 기반 구성을 완전히 건너뛰고 대신 스크립트를 실행하도록 지시합니다. 스크립트는 소프트웨어 설치, Slurm 구성, Slurm 데몬 시작을 포함한 전체 프로비저닝 시퀀스를 담당합니다. FSx를 추가하려면 FsxOpenZfsConfigInstanceStorageConfigs에 설명된 대로 관련 인스턴스 그룹에 FsxLustreConfig 또는를 포함하고 클러스터 수준에서 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

    를 사용하면 응답OnCreateOnCreate에 표시됩니다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진행합니다클러스터에 연결.

일반적인 검증 오류

오류 해결 방법
“클러스터에는 컨트롤러 노드 유형이 있는 InstanceGroup 정확히 하나 있어야 합니다.” 정확히 하나의 인스턴스 그룹에이 있는지 확인합니다SlurmConfig.NodeType. "Controller"
“파티션은 컴퓨팅 노드 유형에만 할당할 수 있습니다.” PartitionNames Controller 또는 Login 인스턴스 그룹에서 제거
"FSx 구성은 사용자 지정 VPC에서만 지원됩니다" FSx 사용 시 요청에 VpcConfig 추가
"인스턴스 그룹에LifeCycleConfig이 필요합니다..." EKS 클러스터 또는 Slurm 연속 NodeProvisioningMode. 선택적 노드 수명 주기 구성은 지원되지 않습니다.
"LifeCycleConfig의 OnCreate와 OnInitComplete는 상호 배타적입니다..." OnCreate 또는를 제거합니다OnInitComplete. 둘 다 지정할 수는 없습니다.
"인스턴스 그룹에 대한 LifeCycleConfig가 불완전합니다..." OnCreate 또는 OnInitComplete를 지정할 때 도 제공해야 SourceS3Uri 합니다.
"LifeCycleConfig는 선택 사항이지만 호환되는 AMI가 필요합니다..." 를 실행UpdateClusterSoftware하여 선택적 노드 수명 주기 구성을 지원하는 AMI로 업데이트합니다.
"인스턴스 그룹에 대한 LifeCycleConfig가 제공되지만 구성이 포함되어 있지 않습니다..." OnCreate 또는 SourceS3Uri를 사용하여를 지정OnInitComplete하거나 LifeCycleConfig 완전히 생략합니다.

클러스터에 연결

클러스터 상태가 로 바뀌면InService(일반적으로 10~15분) 연결하고 확인합니다.

  1. 인스턴스 IDs

    aws sagemaker list-cluster-nodes --cluster-name my-hyperpod-cluster
  2. AWS Systems 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에서 데이터 또는 아티팩트를 확인하고 삭제하여 요금을 방지합니다.