이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Amazon EKS에서 노드 그룹을 사용하여 AI/ML 워크로드용 컴퓨팅 리소스 관리
향후 예정된 Amazon EKS AI/ML 워크숍에 등록합니다.
이 섹션에서는 Amazon EKS 관리형 노드 그룹 또는 자체 관리형 노드를 사용하여 AI 훈련 및 추론 워크로드를 위한 가속 컴퓨팅(AWS Trainium, NVIDIA GPU)을 관리하는 방법을 다룹니다.
EKS 관리형 노드 그룹 및 자체 관리형 노드는 EC2 Auto Scaling 그룹(ASG)을 사용합니다. EKS 관리형 노드 그룹에는 노드 생성, 업데이트 및 삭제를 위한 전용 EKS API가 있으며 노드 복구 기능 및 수명 주기 종료 후크도 내장되어 있습니다. EKS 자체 관리형 노드는 EC2 API를 통해 직접 배포 및 관리됩니다.
이러한 옵션을 사용하여 인스턴스 유형, 원하는 수, 규모 조정 경계, EC2 시작 템플릿을 미리 정의합니다. 비EKS 워크로드가 있고 EC2 시작 템플릿을 통한 구성 일관성을 선호하는 경우에도 EKS 관리형 노드 그룹 또는 자체 관리형 노드를 사용하는 것이 좋습니다. EKS 노드 그룹은 가속 컴퓨팅 공간을 사전에 파악할 수 있는 훈련 및 미세 조정 워크로드에 적합합니다. 참고로 EKS Auto Mode와 Karpenter 모두 정적 용량 프로비저닝도 지원합니다. 자세한 내용은 EKS Auto Mode 및 Karpenter를 사용하여 AI/ML 워크로드용 컴퓨팅 관리 섹션을 참조하세요.
EKS 관리형 노드 그룹 및 자체 관리형 노드는 모든 가속 컴퓨팅 구매 옵션(온디맨드, 스팟, 온디맨드 용량 예약, ML용 용량 블록)을 지원합니다. 용량 유형별로 별도의 관리형 또는 자체 관리형 노드 그룹을 생성합니다. 각 노드 그룹에는 자체 시작 템플릿, 인스턴스 유형, 규모 조정 구성이 있습니다. 이를 통해 이기종 동적 프로비저닝 로직 없이 각 용량 풀에 대한 명시적인 ASG 기반 제어가 가능합니다.
EKS 관리형 노드 그룹과 자체 관리형 노드 비교
EKS 관리형 노드 그룹과 자체 관리형 노드 중에서 무엇을 선택할지는 필요한 사용자 지정 및 제어 수준에 따라 달라집니다. EKS 관리형 노드 그룹은 EC2 시작 템플릿 사용자 지정의 하위 집합을 허용하는 반면, 자체 관리형 노드는 EC2 시작 템플릿의 전체 범위를 지원합니다. 노드 수명 주기를 직접 사용자 지정하고 관리할 특별한 이유가 없는 경우 EKS 관리형 노드 그룹으로 시작하고, 특정 요구 사항으로 인해 반드시 필요한 경우에만 자체 관리형 노드로 전환합니다.
관리형 노드 그룹을 사용하는 경우: EKS가 사용자를 대신하여 AMI 선택, 노드 부트스트래핑, 롤링 업데이트, 노드 복구 및 정상적 드레이닝 워크플로를 처리하기를 원하는 경우입니다. 훈련 및 추론 워크로드에 EKS Auto Mode 또는 Karpenter를 사용하지 않으려는 경우 EKS 관리형 노드 그룹을 권장 시작점으로 사용합니다. ML용 용량 블록을 사용하는 경우 EKS 관리형 노드 그룹은 예약 종료 40분 전에 노드 그룹을 드레이닝하는 예약된 규모 조정 정책을 자동으로 생성하므로 AWS 노드 종료 핸들러 또는 자체 스케일 다운 자동화를 사용할 필요가 없습니다. 지원되는 EKS 최적화 AMI를 사용하는 경우, 커널 수준 또는 심층 EC2 시작 템플릿 사용자 지정이 필요하지 않은 경우, 그리고 Kubernetes 버전에 대한 더 간단한 노드 업그레이드 경로를 원하는 경우 EKS 관리형 노드 그룹을 사용합니다.
자체 관리형 노드 그룹을 사용하는 경우: EC2 시작 템플릿, AMI, 커널 파라미터, 컨테이너 런타임 구성 또는 사용자 지정 부트스트랩 스크립트를 완전히 제어해야 하는 경우입니다. 일반적인 ML 시나리오에는 Elastic Fabric Adapter(EFA)를 사용하는 분산 훈련을 위한 커널 및 NIC 설정 튜닝 또는 사용자 지정 노드 수명 주기 컨트롤러와의 통합이 포함됩니다. 자체 관리형 노드를 사용하면 필요한 사용자 데이터와 IAM 인스턴스 프로파일을 유연하게 제공할 수 있지만 업데이트, 예약된 규모 조정 정책, AWS 노드 종료 핸들러와 같은 수명 주기 후크에 대한 책임은 사용자에게 있습니다.
ML용 용량 블록을 사용하여 GPU 예약
기계 학습(ML)용 용량 블록을 사용하면 미래 날짜에 GPU 인스턴스를 예약하여 시간 제약이 있는 훈련 또는 추론 워크로드를 실행할 수 있습니다. 자세한 내용은 Amazon EC2 사용자 설명서의 ML용 용량 블록을 참조하세요.
EKS 관리형 노드 그룹 및 자체 관리형 노드를 통해 용량 블록 예약을 사용할 수 있습니다. EC2 시작 템플릿 구성은 두 경우 모두 동일합니다. 노드 생성 워크플로, 스케일 다운 동작, 워크로드 종료를 위한 수명 주기 후크는 프로비저닝 옵션에 따라 다릅니다.
고려 사항
-
용량 블록은 특정 Amazon EC2 인스턴스 유형 및 AWS 리전에서만 사용할 수 있습니다. 자세한 내용은 용량 블록 작업 사전 조건을 참조하세요.
-
용량 블록은 영역 단위입니다. 노드 그룹을 생성하는 동안 용량 블록 예약과 동일한 가용 영역(AZ)의 서브넷을 사용해야 합니다.
-
용량 블록 예약이 활성화되기 전에 노드 그룹을 생성하는 경우 노드 그룹 생성 중에 원하는 용량을 0으로 설정합니다.
-
정상적인 워크로드 드레이닝을 위한 시간을 확보하려면 용량 블록 예약이 종료되기 30분 이상 전에 scale-to-zero를 예약합니다. EC2는 예약 종료 시간 30분 전에 인스턴스를 종료하기 시작합니다.
ML용 용량 블록을 사용하여 노드 그룹 생성
EKS 관리형 노드 그룹 및 자체 관리형 노드는 용량 블록 예약을 대상으로 하는 사용자 지정 EC2 시작 템플릿을 사용해야 합니다. 다음은 EKS 관리형 노드 그룹 및 자체 관리형 노드의 최소 필수 필드입니다. 아래 자체 관리형 노드 단계에 표시된 대로 자체 관리형 노드에는 추가 필드가 필요합니다.
LaunchTemplateData에는 다음이 포함되어야 합니다.
-
MarketType를 "capacity-block"로 설정한 InstanceMarketOptions
-
CapacityReservationId를 용량 블록 ID로 설정한 CapacityReservationSpecification: CapacityReservationTarget. 예: cr-0123456789abcdef0.
-
용량 블록 예약의 인스턴스 유형으로 설정된 InstanceType. 예: p5.48xlarge.
이러한 요구 사항은 EKS 관리형 노드 그룹 및 자체 관리형 노드용 시작 템플릿을 생성하기 위한 아래 예제에 나와 있습니다.
- Managed node groups
-
-
다음 콘텐츠를 가진 eks-capacity-block-lt.json이라는 파일을 생성합니다:
CapacityReservationId 및 InstanceType의 내용을 용량 블록의 값으로 바꿉니다. 추가 EC2 시작 템플릿 필드에 대한 자세한 내용은 시작 템플릿을 사용한 관리형 노드 사용자 지정 및 기계 학습 워크로드용 용량 블록 사용을 참조하세요.
{
"LaunchTemplateData": {
"InstanceMarketOptions": {
"MarketType": "capacity-block"
},
"CapacityReservationSpecification": {
"CapacityReservationTarget": {
"CapacityReservationId": "cr-0123456789abcdef0"
}
},
"InstanceType": "p5.48xlarge"
}
}
-
시작 템플릿을 생성합니다.
aws ec2 create-launch-template \
--launch-template-name EKS-Capacity-Block-Launch-Template \
--launch-template-data file://eks-capacity-block-lt.json
-
시작 템플릿을 사용하여 EKS 관리형 노드 그룹을 생성합니다. 아래 명령의 자리 표시자를 환경에 적용되는 값으로 바꿉니다. 다음 명령은 --ami-type를 AL2023 EKS 최적화 NVIDIA AMI로 설정합니다. 사용 가능한 EKS 최적화 AMI에 대한 자세한 내용은 GPU 인스턴스에 대해 EKS 최적화 가속 AMI 사용 섹션을 참조하세요. EKS 관리형 노드 그룹에 사용자 지정 AMI를 사용하는 경우 시작 템플릿에서 AMI ID를 지정합니다.
용량 블록을 사용하는 EKS 관리형 노드 그룹을 생성하는 경우 다음을 수행합니다.
-
--capacity-type를 "CAPACITY_BLOCK"으로 설정합니다.
-
서브넷을 용량 예약과 동일한 가용 영역에서만 지정합니다.
-
예약이 활성화되기 전에 0이 아닌 desiredSize를 지정하면 Auto Scaling 그룹은 예약이 활성화될 때까지 시작 오류를 보고합니다. 활성화되면 인스턴스가 시작되고 ASG가 요청된 desiredSize로 스케일 업합니다.
aws eks create-nodegroup \
--cluster-name my-eks-cluster \
--nodegroup-name eks-cb-nodes \
--node-role "arn:aws:iam::111122223333:role/myNodeRole" \
--region region-code \
--subnets subnet-ExampleID1 \
--ami-type "AL2023_x86_64_NVIDIA" \
--scaling-config minSize=0,maxSize=2,desiredSize=0 \
--capacity-type "CAPACITY_BLOCK" \
--launch-template name="EKS-Capacity-Block-Launch-Template"
-
생성 시 desiredSize를 0으로 설정한 경우 다음 중 하나를 사용하여 예약이 활성화되면 노드 그룹을 스케일 업합니다.
-
스케일 업 후 노드가 클러스터에 조인하는지 확인합니다.
-
EKS는 예약 종료 전 Amazon EKS 노드 그룹 용량 스케일 다운이라는 예약된 규모 조정 정책을 자동으로 생성하여 예약 종료 40분 전에 노드 그룹을 0까지 축소합니다. 이렇게 하면 EC2가 30분 시점에 인스턴스 종료를 시작하기 전에 포드를 정상적으로 드레이닝할 수 있습니다. 이 예약된 작업을 편집하거나 삭제하지 마세요.
- Self-managed nodes
-
-
다음 콘텐츠를 가진 eks-capacity-block-lt.json이라는 파일을 생성합니다:
CapacityReservationId 및 InstanceType의 내용을 용량 블록의 값으로 바꿉니다. 추가 EC2 시작 템플릿 필드에 대한 자세한 내용은 시작 템플릿을 사용한 관리형 노드 사용자 지정 및 기계 학습 워크로드용 용량 블록 사용을 참조하세요.
IamInstanceProfile, ImageId, SecurityGroupIds, UserData, KeyName의 내용을 환경의 값으로 바꿉니다.
{
"LaunchTemplateData": {
"InstanceMarketOptions": {
"MarketType": "capacity-block"
},
"CapacityReservationSpecification": {
"CapacityReservationTarget": {
"CapacityReservationId": "cr-0123456789abcdef0"
}
},
"IamInstanceProfile": {
"Arn": "arn:aws:iam::111122223333:role/myNodeRole"
},
"ImageId": "image-id",
"InstanceType": "p5.48xlarge",
"KeyName": "key-name",
"SecurityGroupIds": "sg-05b1d815d1EXAMPLE"
],
"UserData": "user-data"
}
}
-
시작 템플릿을 생성합니다.
aws ec2 create-launch-template \
--launch-template-name EKS-Capacity-Block-Launch-Template \
--launch-template-data file://eks-capacity-block-lt.json
-
자체 관리형 Amazon Linux 노드 생성의 단계에 따라 시작 템플릿을 사용하여 Auto Scaling 그룹을 생성합니다. 예약이 아직 활성화되지 않은 경우 DesiredCapacity를 0으로 설정합니다. 서브넷을 용량 예약과 동일한 가용 영역에서만 지정합니다.
-
DesiredCapacity를 0으로 설정하여 자체 관리형 노드를 생성한 후 용량 블록 예약 시간에 맞춰 Auto Scaling 그룹에 대한 예약된 규모 조정 정책을 생성합니다. 자세한 설명은 Amazon EC2 Auto Scaling의 예약 조정을 참조하세요.
예약 종료 시간 30분 전까지 예약된 인스턴스를 사용할 수 있습니다. 포드 드레이닝 시간이 확보되도록 종료 시간 30분 이상 전에 scale-to-zero를 예약합니다.
수동으로 규모를 조정하려면 예약 시작 시간에 그리고 종료 시간 30분 이상 전에 ASG의 원하는 용량을 업데이트합니다.
-
정상적으로 포드를 드레이닝하려면 AWS 노드 종료 핸들러를 설정합니다. 이 핸들러는 EventBridge를 사용하여 Amazon EC2 Auto Scaling에서 ASG 스케일 인 수명 주기 이벤트를 감시하고 인스턴스를 사용할 수 없게 되기 전에 Kubernetes 컨트롤 플레인이 조치를 취하도록 합니다. 그렇지 않으면 포드 및 Kubernetes 객체가 보류 상태에서 멈추게 됩니다. 자세한 내용은 GitHub의 AWS 노드 종료 핸들러를 참조하세요.
노드 종료 핸들러를 설정하지 않은 경우 30분 전에 수동으로 포드를 드레인하여 정상적 드레이닝에 충분한 시간을 확보하세요.