Amazon SageMaker HyperPod의 스팟 인스턴스 - Amazon SageMaker AI

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SageMaker HyperPod의 스팟 인스턴스

Amazon SageMaker HyperPod는 Amazon EC2 스팟 인스턴스를 지원하므로 내결함성 및 상태 비저장 AI/ML 워크로드에 대한 비용을 크게 절감할 수 있습니다. 사용 사례에는 배치 추론 및 훈련 작업, 하이퍼파라미터 튜닝, 실험 워크로드가 포함됩니다. 또한이 저비용 용량을 사용할 수 있는 경우 스팟 인스턴스를 사용하여 컴퓨팅 용량을 자동으로 조정하고 추가된 스팟 용량을 회수하면 온디맨드 용량으로 다시 조정할 수 있습니다.

기본적으로 HyperPod의 스팟 인스턴스는 HyperPod의 지속적 프로비저닝 기능과 함께 작동하므로 SageMaker HyperPod는 워크로드가 사용 가능한 인스턴스에서 즉시 시작하는 동안 백그라운드에서 나머지 용량을 자동으로 프로비저닝할 수 있습니다. 용량 제약 또는 기타 문제로 인해 노드 프로비저닝에 장애가 발생하면 SageMaker HyperPod는 클러스터가 원하는 규모에 도달할 때까지 백그라운드에서 자동으로 재시도하므로 자동 크기 조정 작업은 복원력과 비차단성을 유지합니다. Karpenter 기반 자동 크기 조정과 함께 스팟 인스턴스를 사용할 수도 있습니다.

고려해야 할 주요 기능 및 개념

  • 온디맨드 인스턴스에 비해 최대 90% 비용 절감

  • 중단을 처리할 수 있고 작업 시작 및 완료 시간이 유연한 작업에 스팟 인스턴스 사용

  • 자동 조정에 Karpenter를 사용하는 경우 스팟 용량이 중단되거나 사용할 수 없을 때 자동으로 온디맨드로 폴백하도록 HyperPod를 구성할 수 있습니다.

  • HyperPod에서 지원하는 다양한 CPU, GPU 및 액셀러레이터 인스턴스 유형에 액세스

  • 용량 가용성은 EC2의 공급에 따라 다르며 리전 및 인스턴스 유형에 따라 다릅니다.

  • EC2에서 제공하는 스팟 인스턴스 어드바이저와 같은 다양한 도구를 사용하여 원하는 인스턴스를 얻거나 중단될 가능성을 식별하는 등의 다양한 작업을 수행할 수 있습니다.

시작하기

사전 조건

시작하기 전에 다음을 갖추었는지 확인하세요.

AWS CLI 설치 및 구성됨

자격 AWS 증명 및 리전을 설정합니다.

aws configure

자세한 지침은 자격 AWS 증명 설명서를 참조하세요.

SageMaker HyperPod 실행을 위한 IAM 역할

클러스터를 업데이트하려면 먼저 Karpenter에 대한 AWS Identity and Access Management(IAM) 권한을 생성해야 합니다. 지침은 Karpenter를 사용한 HyperPod Auto Scaling을 위한 IAM 역할 생성을 참조하세요.

VPC 및 EKS 클러스터 설정

2.1 VPC 및 EKS 클러스터 생성

HyperPod EKS 설정 가이드에 따라 다음을 수행합니다.

  1. 여러 가용 영역에 서브넷이 있는 VPC 생성

  2. EKS 클러스터 생성

  3. 차트 Helm을 사용하여 필수 종속성 설치

2.2 환경 변수 설정

export EKS_CLUSTER_ARN="arn:aws:eks:REGION:ACCOUNT_ID:cluster/CLUSTER_NAME" export EXECUTION_ROLE="arn:aws:iam::ACCOUNT_ID:role/SageMakerExecutionRole" export BUCKET_NAME="your-s3-bucket-name" export SECURITY_GROUP="sg-xxxxx" export SUBNET="subnet-xxxxx" export SUBNET1="subnet-xxxxx" export SUBNET2="subnet-xxxxx" export SUBNET3="subnet-xxxxx"

스팟 인스턴스에 대한 서비스 할당량

SageMaker HyperPod 클러스터에서 생성할 인스턴스에 필요한 할당량이 있는지 확인합니다. 할당량을 검토하려면 Service Quotas 콘솔에서 탐색 창에서 AWS 서비스를 선택한 다음 SageMaker를 선택합니다. 예를 들어 다음 스크린샷은 c5 인스턴스에 사용 가능한 할당량을 보여줍니다.

비용 리전 정보가 포함된 이미지입니다.

스팟 가용성 확인

스팟 인스턴스 그룹을 생성하기 전에 다른 가용 영역에서 가용성을 확인합니다.

aws ec2 get-spot-placement-scores \ --region us-west-2 \ --instance-types c5.2xlarge \ --target-capacity 10 \ --single-availability-zone \ --region-names us-west-2

: 더 나은 가용성을 위해 배치 점수가 높은 대상 가용 영역입니다. 스팟 인스턴스 어드바이저 및 EC2 스팟 요금에서 가용성을 확인할 수도 있습니다. 가용성 점수가 더 나은 필수 가용 영역을 선택하고 해당 AZ에서 인스턴스를 시작하도록 연결된 서브넷이 있는 인스턴스 그룹을 구성합니다.

인스턴스 그룹 생성(Autoscaling 없음)

CreateCluster(스팟)

aws sagemaker create-cluster \ --cluster-name clusterNameHere \ --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \ --node-provisioning-mode "Continuous" \ --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]' --vpc-config '{ "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET'"] }'

클러스터 업데이트(스팟 + 온디맨드)

aws sagemaker update-cluster \ --cluster-name "my-cluster" \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-x-az3", "InstanceType": "ml.c5.xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} }, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET3'"] } }, { "InstanceGroupName": "auto-spot-c5-2x-az2", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET2'"] } }, { "InstanceGroupName": "auto-ondemand-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]'

CapacityRequirements 인스턴스 그룹이 생성된 후에는를 수정할 수 없습니다.

클러스터 설명

aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME --region us-west-2
## Sample Response { "ClusterName": "my-cluster", "InstanceGroups": [ { "InstanceGroupName": "ml.c5.2xlarge", "InstanceType": "ml.c5.xlarge", "InstanceCount": 5, "CurrentCount": 3, "CapacityRequirements: { "Spot": {} }, "ExecutionRole": "arn:aws:iam::account:role/SageMakerExecutionRole", "InstanceStorageConfigs": [...], "OverrideVpcConfig": {...} } // Other IGs ] }

DescribeClusterNode

aws sagemaker describe-cluster-node --cluster-name $HP_CLUSTER_NAME --region us-west-2
## Sample Response { "NodeDetails": { "InstanceId": "i-1234567890abcdef1", "InstanceGroupName": "ml.c5.2xlarge", "CapacityType": "Spot", "InstanceStatus": {...} } }

콘솔 사용

SageMaker HyperPod 클러스터 생성 및 구성

시작하려면 SageMaker HyperPod EKS 클러스터를 시작 및 구성하고 클러스터 생성 시 지속적 프로비저닝 모드가 활성화되어 있는지 확인합니다. 다음 단계를 완료합니다.

  1. SageMaker AI 콘솔의 탐색 창에서 HyperPod 클러스터를 선택합니다.

  2. Amazon EKS에서 HyperPod 클러스터 생성 및 오케스트레이션을 선택합니다.

  3. 설정 옵션에서 사용자 지정 설정을 선택합니다.

  4. 이름에 이름을 입력합니다.

  5. 인스턴스 복구에서 자동을 선택합니다.

  6. 인스턴스 프로비저닝 모드에서 지속적 프로비저닝 사용을 선택합니다.

  7. CapacityType: 스팟 선택

  8. 제출을 선택합니다.

콘솔의 스크린샷:

생성 클러스터 흐름이 포함된 이미지입니다.

이 설정은 Virtual Private Cloud(VPC), 서브넷, 보안 그룹 및 EKS 클러스터와 같은 필수 구성을 생성하고 클러스터에 연산자를 설치합니다. 새 클러스터를 생성하는 대신 기존 클러스터를 사용하려는 경우 EKS 클러스터와 같은 기존 리소스를 제공할 수도 있습니다. 이 설정은 약 20분이 소요됩니다.

동일한 클러스터에 새 스팟 인스턴스 그룹 추가

기존 HyperPod EKS 클러스터에 스팟 IG를 추가하려면 다음 단계를 완료합니다.

  1. SageMaker AI 콘솔의 탐색 창에서 HyperPod 클러스터를 선택합니다.

  2. Amazon EKS 오케스트레이션을 사용하여 기존 HyperPod 클러스터를 선택합니다(지속적 프로비저닝이 활성화되어 있는지 확인).

  3. 편집을 클릭합니다.

  4. 클러스터 편집 페이지에서 인스턴스 그룹 생성을 클릭합니다.

  5. 용량 유형 선택: 인스턴스 그룹 구성의 스팟 인스턴스입니다.

  6. 인스턴스 그룹 생성을 클릭합니다.

  7. Submit을 클릭합니다.

콘솔의 스크린샷:

인스턴스 그룹 생성 흐름이 포함된 이미지입니다.

사용 CloudFormation

Resources: TestCluster: Type: AWS::SageMaker::Cluster Properties: ClusterName: "SampleCluster" InstanceGroups: - InstanceGroupName: group1 InstanceType: ml.c5.2xlarge InstanceCount: 1 LifeCycleConfig: SourceS3Uri: "s3://'$BUCKET_NAME'" OnCreate: "on_create_noop.sh" ExecutionRole: "'$EXECUTION_ROLE'", ThreadsPerCore: 1 CapacityRequirements: Spot: {} VpcConfig: Subnets: - "'$SUBNET1'" SecurityGroupIds: - "'$SECURITY_GROUP'" Orchestrator: Eks: ClusterArn: '$EKS_CLUSTER_ARN' NodeProvisioningMode: "Continuous" NodeRecovery: "Automatic"

자세한 내용은 https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-eks-console-create-cluster-cfn.html 참조하십시오.

Karpenter 기반 Autoscaling

클러스터 역할 생성

1단계: IAM 콘솔로 이동

  1. AWS Management ConsoleIAM 서비스로 이동

  2. 왼쪽 사이드바에서 역할을 클릭합니다.

  3. 역할 생성을 클릭합니다.

2단계: 신뢰 정책 설정

  1. 사용자 지정 신뢰 정책 선택( AWS 서비스 대신)

  2. 기본 JSON을이 신뢰 정책으로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "hyperpod.sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

다음을 클릭합니다.

3단계: 사용자 지정 권한 정책 생성

이는 특정 SageMaker 권한이므로 사용자 지정 정책을 생성해야 합니다.

  1. 정책 생성을 클릭합니다(새 탭 열기).

  2. JSON 탭을 클릭합니다.

  3. 다음 정책을 입력합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:BatchAddClusterNodes", "sagemaker:BatchDeleteClusterNodes" ], "Resource": "*" } ] }
  4. 다음을 클릭합니다.

  5. 다음과 같은 이름을 지정합니다. SageMakerHyperPodRolePolicy

  6. 정책 생성을 클릭합니다.

4단계: 역할에 정책 연결

  1. 역할 생성 탭으로 돌아가기

  2. 정책 목록 새로 고침

  3. 새로 생성된 정책을 검색하고 선택합니다.

  4. 다음을 클릭합니다.

5단계: 역할 이름 지정 및 생성

  1. 역할 이름 입력(예: SageMakerHyperPodRole)

  2. 필요한 경우 설명을 추가합니다.

  3. 신뢰 정책 및 권한 검토

  4. 역할 생성을 클릭합니다.

Verification(확인)

생성 후 다음을 통해 확인할 수 있습니다.

  • 신뢰 관계 탭을 확인하면 하이퍼포드 서비스가 표시됩니다.

  • 권한 탭을 확인하면 사용자 지정 정책이 표시됩니다.

  • 역할 ARN은 HyperPod와 함께 사용할 수 있습니다.

역할 ARN 형식은 다음과 같습니다.

arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole

AutoScaling을 사용하여 클러스터 생성:

가용성을 높이려면 서브넷을 구성하여 여러 AZs IGs를 생성합니다. 대체를 위해 onDemand IGs 포함할 수도 있습니다.

aws sagemaker create-cluster \ --cluster-name clusterNameHere \ --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \ --node-provisioning-mode "Continuous" \ --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 0, // For Auto scaling keep instance count as 0 "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]' --vpc-config '{ "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET'"] }' --auto-scaling ' { "Mode": "Enable", "AutoScalerType": "Karpenter" }'

클러스터 업데이트(스팟 + 온디맨드)

aws sagemaker update-cluster \ --cluster-name "my-cluster" \ --instance-groups '[{ "InstanceGroupName": "auto-spot-c5-x-az3", "InstanceType": "ml.c5.xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} }, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET3'"] } }, { "InstanceGroupName": "auto-spot-c5-2x-az2", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "CapacityRequirements: { "Spot": {} } "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET2'"] } }, { "InstanceGroupName": "auto-ondemand-c5-2x-az1", "InstanceType": "ml.c5.2xlarge", "InstanceCount": 2, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create_noop.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1, "OverrideVpcConfig": { "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET1'"] } }]'

HyperpodNodeClass 생성

HyperpodNodeClass는 SageMaker HyperPod에서 미리 생성된 인스턴스 그룹에 매핑되는 사용자 지정 리소스로, Karpenter의 Auto Scaling 결정에 지원되는 인스턴스 유형 및 가용 영역에 대한 제약 조건을 정의합니다. 를 사용하려면 NodePools에서 포드를 확장하는 데 사용할 AWS 컴퓨팅 리소스InstanceGroups의 소스로 사용할 SageMaker HyperPod 클러스터의 이름을 지정하기HyperpodNodeClass만 하면 됩니다. 여기서 사용하는 HyperpodNodeClass 이름은 참조하는 다음 섹션의 NodePool로 전달됩니다. 이는 NodePool에 리소스를 가져올 대상HyperpodNodeClass을 알려줍니다. 를 생성하려면 다음 단계를 HyperpodNodeClass완료합니다.

  1. 다음 코드와 유사한 YAML 파일(예: nodeclass.yaml)을 생성합니다. SageMaker HyperPod 클러스터 생성 시 사용한 InstanceGroup 이름을 추가합니다. 기존 SageMaker HyperPod EKS 클러스터에 새 인스턴스 그룹을 추가할 수도 있습니다.

  2. NodePool 구성에서 HyperPodNodeClass 이름을 참조합니다.

다음은 샘플입니다HyperpodNodeClass.

apiVersion: karpenter.sagemaker.amazonaws.com/v1 kind: HyperpodNodeClass metadata: name: multiazg6 spec: instanceGroups: # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created # before this step can be completed. # MaxItems: 10 - auto-spot-c5-2x-az1 - auto-spot-c5-2x-az2 - auto-spot-c5-x-az3 - auto-ondemand-c5-2x-az1

Karpenter는 구성에 지정된 경우 온디맨드를 폴백으로 사용하여 온디맨드 인스턴스보다 스팟 인스턴스 그룹의 우선 순위를 지정합니다. 인스턴스 선택은 각 서브넷의 가용 영역과 연결된 EC2 스팟 배치 점수를 기준으로 정렬됩니다.

를 사용하여 EKS 클러스터에 구성을 적용합니다kubectl.

kubectl apply -f nodeclass.yaml

를 적용InService하려면 HyperPod 클러스터에 AutoScaling이 활성화되어 있어야 하며 AutoScaling 상태가 로 변경HyperpodNodeClass되어야 합니다. 또한 인스턴스 그룹 용량을 스팟 또는 OnDemand 표시합니다. 자세한 내용과 주요 고려 사항은 SageMaker HyperPod EKS에서 Autoscaling을 참조하세요.

예:

apiVersion: karpenter.sagemaker.amazonaws.com/v1 kind: HyperpodNodeClass metadata: creationTimestamp: "2025-11-30T03:25:04Z" name: multiazc6 uid: ef5609be-15dd-4700-89ea-a3370e023690 spec: instanceGroups: -spot1 status: conditions: // true when all IGs in the spec are present in SageMaker cluster, false otherwise - lastTransitionTime: "2025-11-20T03:25:04Z" message: "" observedGeneration: 3 reason: InstanceGroupReady status: "True" type: InstanceGroupReady // true if subnets of IGs are discoverable, false otherwise - lastTransitionTime: "2025-11-20T03:25:04Z" message: "" observedGeneration: 3 reason: SubnetsReady status: "True" type: SubnetsReady // true when all dependent resources are Ready [InstanceGroup, Subnets] - lastTransitionTime: "2025-11-30T05:47:55Z" message: "" observedGeneration: 3 reason: Ready status: "True" type: Ready instanceGroups: - instanceTypes: - ml.c5.2xlarge name:auto-spot-c5-2x-az2 subnets: - id: subnet-03ecc649db2ff20d2 zone: us-west-2a zoneId: usw2-az2 - capacities: {"Spot": {}}

NodePool 생성

NodePool은 Karpenter가 생성할 수 있는 노드와 해당 노드에서 실행할 수 있는 포드에 대한 제약 조건을 설정합니다. NodePool은 다음과 같은 다양한 작업을 수행하도록 설정할 수 있습니다.

  • 레이블 및 테인트를 정의하여 Karpenter가 생성하는 노드에서 실행할 수 있는 포드를 제한합니다.

  • 노드 생성을 특정 영역, 인스턴스 유형 및 컴퓨터 아키텍처 등으로 제한

NodePool에 대한 자세한 내용은 NodePools. SageMaker HyperPod 관리형 Karpenter는이 게시물에서 설명하는 잘 알려진 Kubernetes 및 Karpenter 요구 사항의 제한된 세트를 지원합니다.

NodePool을 생성하려면 다음 단계를 완료합니다.

원하는 NodePool 구성으로 nodepool.yaml이라는 YAML 파일을 생성합니다. 다음 코드는 샘플 NodePool을 생성하기 위한 샘플 구성입니다. ml.g6.xlarge SageMaker 인스턴스 유형을 포함하도록 NodePool을 지정하고 한 영역에 추가로 지정합니다. 추가 사용자 지정은 NodePools를 참조하세요.

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpunodepool spec: template: spec: nodeClassRef: group: karpenter.sagemaker.amazonaws.com kind: HyperpodNodeClass name: multiazg6 expireAfter: Never requirements: - key: node.kubernetes.io/instance-type operator: Exists - key: "node.kubernetes.io/instance-type" // Optional otherwise Karpenter will decide based on Job config resource requirements operator: In values: ["ml.c5.2xlarge"] - key: "topology.kubernetes.io/zone" operator: In values: ["us-west-2a"]

: EC2 스팟 중단 시 하이퍼포드 테인트 노드가 포드 제거를 트리거합니다. Karpenter의 통합 프로세스는 포드 중단 예산을 존중하고 일반적인 Kubernetes 제거를 수행하지만 consolidateAfter: 0을 설정하면 통합이 즉시 발생하여 정상적인 포드 제거를 위한 시간이 거의 없습니다. 체크포인트 요구 사항에 대해 정상적인 포드 제거를 허용하려면 최대 2분 동안 0이 아닌 것으로 설정합니다.

클러스터에 NodePool을 적용합니다.

kubectl apply -f nodepool.yaml

NodePool 상태를 모니터링하여 상태의 준비 조건이 True로 설정되어 있는지 확인합니다.

kubectl get nodepool gpunodepool -oyaml

이 예제에서는 NodePool을 사용하여 포드의 하드웨어(인스턴스 유형) 및 배치(가용 영역)를 지정하는 방법을 보여줍니다.

간단한 워크로드 시작

다음 워크로드는 배포 중인 포드가 복제본당, 포드당 1개의 CPU 및 256MB 메모리를 요청하는 Kubernetes 배포를 실행합니다. 포드가 아직 스핀업되지 않았습니다.

kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/refs/heads/main/examples/workloads/inflate.yaml

이를 적용하면 다음 스크린샷과 같이 클러스터에서 배포 및 단일 노드 시작을 볼 수 있습니다.

이 구성 요소를 조정하려면 다음 명령을 사용합니다.

kubectl scale deployment inflate --replicas 10

자세한 내용은 https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html 참조하십시오.

노드 중단 관리

스팟 인스턴스는 언제든지 회수할 수 있습니다. EC2는 대부분의 경우 최선의 2분 중단 공지를 제공하지만이 공지는 보장되지 않습니다. 경우에 따라 EC2는 사전 경고 없이 스팟 인스턴스를 즉시 종료할 수 있습니다.HyperPod는 두 시나리오를 자동으로 처리합니다.

  • 2분 전 공지: 스팟 용량을 사용할 수 있게 되면가 정상적인 포드 제거 및 제어된 용량 교체를 자동으로 재시도합니다.

  • 예고 없이(즉시 종료): 정상적인 제거 없이 노드 교체를 자동으로 재시도합니다(스팟 용량을 사용할 수 있게 되면).

작동 방식

EC2가 스팟 중단 알림을 보내면 HyperPod는 자동으로 다음을 수행합니다.

  1. 중단 신호를 감지합니다.

  2. 노드 테인트: 중단된 인스턴스에서 새 포드가 예약되지 않도록 방지합니다.

  3. 포드를 정상적으로 제거: 실행 중인 포드에 작업을 완료하거나 검사할 시간을 부여합니다(Kubernetes 관련terminationGracePeriodSeconds).

  4. 용량 대체: 자동으로 대체 인스턴스 프로비저닝을 시도합니다(가용성에 따라 스팟 또는 온디맨드).

    용량 교체는 교체 인스턴스를 자동으로 프로비저닝하여 작동합니다. 용량을 즉시 사용할 수 없는 경우 리소스에 액세스할 수 있을 때까지 시스템은 계속 확인합니다. 오토 스케일링이 아닌 인스턴스 그룹의 경우 HyperPod는 필요한 용량을 사용할 수 있을 때까지 동일한 인스턴스 그룹 내에서 스케일 업을 시도합니다. Karpenter 기반 인스턴스 그룹의 경우 기본 그룹이 수요를 수용할 수 없는 경우 Karpenter는 노드 클래스에 구성된 다른 인스턴스 그룹에 대체 메커니즘을 구현합니다. 또한 온디맨드를 대체 옵션으로 구성하여 스팟 인스턴스 그룹을 성공적으로 확장할 수 없는 경우 Karpenter가 온디맨드 인스턴스로 자동으로 전환할 수 있도록 할 수 있습니다.

  5. 워크로드 일정 조정: Kubernetes는 정상 노드에서 제거된 포드를 자동으로 다시 예약합니다.

사용량 및 청구서 찾기

HyperPod에서 스팟 인스턴스의 사용량 및 결제를 확인하려면 Cost Explorer 콘솔을 AWS 사용하면 됩니다. 결제 및 비용 관리 > 청구서로 이동

비용 리전 정보가 포함된 이미지입니다.

콘솔에서 사용량 및 결제를 탐색하려면 Billing and Cost Management > Cost Explorer로 이동합니다.

비용 및 사용량이 포함된 이미지입니다.