ML용 용량 블록을 사용하여 자체 관리형 노드 생성 - Amazon EKS

ML용 용량 블록을 사용하여 자체 관리형 노드 생성

기계 학습용 용량 블록(ML)을 사용하면 향후 날짜에 GPU 인스턴스를 예약하여 단기간의 ML 워크로드를 지원할 수 있습니다. 자세한 내용을 알아보려면 Amazon EC2-Linux 인스턴스용 사용 설명서의 ML용 용량 블록을 참조하세요.

고려 사항

중요
  • 용량 블록은 특정 Amazon EC2 인스턴스 유형 및 AWS 리전에서만 사용할 수 있습니다. 호환성 정보는 Amazon EC2-Linux 인스턴스용 사용 설명서의 용량 블록 작업 사전 조건을 참조하세요.

  • 현재 용량 블록은 Karpenter에서 사용할 수 없습니다.

  • 용량 예약이 활성화되기 전에 자체 관리형 노드 그룹을 생성하는 경우 원하는 용량을 0으로 설정합니다.

  • 노드를 부드럽게 드레인하는 데 충분한 시간을 할애하려면 용량 블록 예약 종료 시각 30분 전까지 0으로 규모를 조정하도록 스케일링을 예약하는 것이 좋습니다.

  • Pods가 정상적으로 드레이닝되도록 하려면 예제 단계에 설명된 대로 AWS 노드 종료 처리기를 설정하는 것이 좋습니다.

자체 관리형 노드가 있는 용량 블록 사용

Amazon EKS와 함께 용량 블록을 사용하여 자체 관리형 노드를 프로비저닝하고 규모를 조정할 수 있습니다. 다음 단계는 일반적인 예제 개요를 제공합니다. AWS CloudFormation 템플릿 예제에서 프로덕션 워크로드에 필요한 모든 측면을 다루지는 않습니다. 일반적으로 부트스트래핑 스크립트를 사용하여 노드를 클러스터에 조인하고, Amazon EKS 가속화 AMI를 지정하고, 클러스터에 조인하기 위한 적절한 인스턴스 프로필을 지정해야 합니다. 자세한 내용은 자체 관리형 Amazon Linux 노드 생성 단원을 참조하십시오.

  1. 워크로드에 적용할 수 있는 시작 템플릿을 생성합니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서Use Capacity Blocks for machine learning workloads를 참조하세요.

    LaunchTemplateData에 다음이 포함되어 있는지 확인합니다.

    • MarketType"capacity-block"로 설정한 InstanceMarketOptions

    • CapacityReservationId가 용량 블록으로 설정된 CapacityReservationSpecification: CapacityReservationTarget(예: cr-02168da1478b509e0 )

    • 해당 iam-instance-profile-arn으로 설정된 Arn가 있는 IamInstanceProfile

    • ImageId 해당 image-id로 설정

    • InstanceType이 용량 블록을 지원하는 인스턴스 유형으로 설정(예: p5.48xlarge)

    • SecurityGroupIds는 해당 ID로 설정합니다(예: sg-05b1d815d1EXAMPLE).

    • 자체 관리형 노드 그룹을 위해 UserData가 해당 user-data로 설정

      다음은 용량 블록을 대상으로 하는 시작 템플릿을 생성하는 CloudFormation 템플릿의 발췌문입니다.

      NodeLaunchTemplate: Type: "aws::EC2::LaunchTemplate" Properties: LaunchTemplateData: InstanceMarketOptions: MarketType: "capacity-block" CapacityReservationSpecification: CapacityReservationTarget: CapacityReservationId: "cr-02168da1478b509e0" IamInstanceProfile: Arn: iam-instance-profile-arn ImageId: image-id InstanceType: p5.48xlarge KeyName: key-name SecurityGroupIds: - sg-05b1d815d1EXAMPLE UserData: user-data

      용량 블록은 영역 단위이므로 예약이 이루어진 가용 영역의 서브넷을 전달해야 합니다.

  2. 시작 템플릿을 사용하여 자체 관리형 노드 그룹을 생성합니다. 용량 예약이 활성화되기 전에 이 작업을 수행하는 경우 원하는 용량을 0으로 설정합니다. 노드 그룹을 생성할 때는 용량이 예약된 가용 영역에 해당하는 서브넷만 지정하도록 해야 합니다.

    다음은 워크로드에 적용할 수 있는 템플릿을 생성할 때 참조할 수 있는 샘플 CloudFormation 템플릿입니다. 이 예제에서는 이전 단계에 표시된 AWS::Amazon EC2::LaunchTemplate 리소스 중 LaunchTemplateIdVersion을 가져옵니다. 또한 동일한 템플릿의 다른 곳에 선언된 DesiredCapacity MaxSize, MinSizeVPCZoneIdentifier의 값도 가져옵니다.

    NodeGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity LaunchTemplate: LaunchTemplateId: !Ref NodeLaunchTemplate Version: !GetAtt NodeLaunchTemplate.LatestVersionNumber MaxSize: !Ref NodeAutoScalingGroupMaxSize MinSize: !Ref NodeAutoScalingGroupMinSize VPCZoneIdentifier: !Ref Subnets Tags: - Key: Name PropagateAtLaunch: true Value: !Sub ${ClusterName}-${NodeGroupName}-Node - Key: !Sub kubernetes.io/cluster/${ClusterName} PropagateAtLaunch: true Value: owned
  3. 노드 그룹이 성공적으로 생성되면 생성된 노드 그룹의 NodeInstanceRole을(를) 기록해야 합니다. 노드 그룹이 규모를 조정할 때 새 노드가 클러스터에 가입하고 Kubernetes이(가) 노드를 인식할 수 있도록 하려면 이 정보가 필요합니다. 자세한 내용은 자체 관리형 Amazon Linux 노드 생성의 AWS Management Console 지침을 참조하세요.

  4. 용량 블록 예약 시간에 맞춰 Auto Scaling 그룹에 대해 예약된 규모 조정 정책을 생성하는 것이 좋습니다. 자세한 정보는 Amazon EC2 Auto Scaling 사용 설명서의 Amazon EC2 Auto Scaling 예정 스케일링을 참조하세요.

    용량 블록 종료 시간 30분 전까지 예약한 모든 인스턴스를 사용할 수 있습니다. 해당 시점에 계속 실행 중인 인스턴스는 종료되기 시작합니다. 노드를 부드럽게 드레인하는 데 충분한 시간을 할애하려면 용량 블록 예약 종료 시각 30분 전까지 0으로 규모를 조정하도록 스케일링을 예약하는 것이 좋습니다.

    용량 예약이 Active이(가)될 때마다 수동으로 규모를 조정하려면 용량 블록 예약을 시작할 때 Auto Scaling 그룹의 원하는 용량을 업데이트해야 합니다. 또한 용량 블록 예약 종료 시각 30분 전까지 수동으로 스케일 다운해야 합니다.

  5. 노드 그룹은 이제 워크로드와 Pods을(를) 처리할 준비가 되었으며 일정을 계획할 수 있습니다.

  6. Pods을(를) 부드럽게 드레이닝하려면 AWS 노드 종료 핸들러를 설정하는 것이 좋습니다. 이 핸들러는 EventBridge를 사용하여 Amazon EC2 Auto Scaling에서 "ASG 스케일 인" 수명 주기 이벤트를 감시하고 인스턴스가 사용할 수 없게 되기 전에 Kubernetes 컨트롤 플레인이 필요한 조치를 취하도록 할 수 있습니다. 그렇지 않으면 Pods 및 Kubernetes 객체가 보류 상태에서 멈추게 됩니다. 자세한 내용은 GitHub의 AWS 노드 종료 핸들러를 참조하세요.

    노드 종료 핸들러를 설정하지 않은 경우, 30분 전에 수동으로 Pods의 드레인을 시작하여 부드럽게 드레이닝할 수 있는 충분한 시간을 확보하는 것이 좋습니다.