Amazon SageMaker HyperPod에서 GPU 파티션 설정 - Amazon SageMaker AI

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

Amazon SageMaker HyperPod에서 GPU 파티션 설정

사전 조건

  • 지원되는 GPU 인스턴스가 있는 HyperPod Amazon EKS 클러스터

  • NVIDIA GPU Operator 설치됨

  • 클러스터 관리를 위한 적절한 IAM 권한

MIG 구성을 사용하여 클러스터 생성

사용AWS CLI

aws sagemaker create-cluster \ --cluster-name my-mig-cluster \ --orchestrator 'Eks={ClusterArn=arn:aws:eks:region:account:cluster/cluster-name}' \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket", "OnCreate": "on_create_script.sh" }, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-1g.5gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role", "ThreadsPerCore": 1 }' \ --vpc-config '{ "SecurityGroupIds": ["sg-12345"], "Subnets": ["subnet-12345"] }' \ --node-provisioning-mode Continuous

사용CloudFormation

{ "ClusterName": "my-mig-cluster", "InstanceGroups": [ { "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-2g.10gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" } ], "Orchestrator": { "Eks": { "ClusterArn": "arn:aws:eks:region:account:cluster/cluster-name" } }, "NodeProvisioningMode": "Continuous" }

기존 클러스터에 GPU 연산자 추가

GPU 연산자 설치

를 클러스터 리전(예: us-east-1, us-west-2){$AWS_REGION}으로 바꿉니다.

helm install gpuo helm_chart/HyperPodHelmChart/charts/gpu-operator \ -f helm_chart/HyperPodHelmChart/charts/gpu-operator/regional-values/values-{$AWS_REGION}.yaml \ -n kube-system

설치 확인(2~3분 대기)

모든 GPU 운영자 포드가 실행 중인지 확인합니다.

kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"

예상 포드:

  • gpu-operator-* - 인스턴스 1개(클러스터 컨트롤러)

  • nvidia-device-plugin-daemonset-* - GPU 노드당 1개(모든 GPU 인스턴스)

  • nvidia-mig-manager-* - MIG 지원 노드당 1개(A100/H100)

이전 디바이스 플러그인 제거

기존 nvidia-device-plugin을 비활성화합니다.

helm upgrade dependencies helm_chart/HyperPodHelmChart \ --set nvidia-device-plugin.devicePlugin.enabled=false \ -n kube-system

GPU 리소스 확인

노드에 GPU 용량이 표시되는지 확인합니다. nvidia.com/gpu: 8(또는 실제 GPU 수)이 표시되어야 합니다.

kubectl describe nodes | grep "nvidia.com/gpu"

MIG 구성 업데이트

MIG 업데이트 전에 노드 준비

인스턴스 그룹에서 MIG 구성을 업데이트하기 전에 워크로드 중단을 방지하기 위해 노드를 준비해야 합니다. 다음 단계에 따라 재구성할 노드에서 워크로드를 안전하게 드레이닝합니다.

1단계: 인스턴스 그룹의 노드 식별

먼저 업데이트하려는 인스턴스 그룹에 속하는 모든 노드를 식별합니다.

# List all nodes in the instance group kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME # Example: kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=p4d-group

이 명령은 지정된 인스턴스 그룹의 모든 노드 목록을 반환합니다. 다음 단계의 각 노드 이름을 기록해 둡니다.

2단계: 각 노드의 코드 및 드레이닝

1단계에서 식별된 각 노드에 대해 다음 작업을 수행합니다.

노드 코드

코딩은 노드에서 새 포드가 예약되지 않도록 합니다.

# Cordon a single node kubectl cordon NODE_NAME # Example: kubectl cordon hyperpod-i-014a41a7001adca60

노드에서 워크로드 포드 드레이닝

시스템 포드를 유지하면서 모든 워크로드 포드를 제거하도록 노드를 드레이닝합니다.

# Drain the node (ignore DaemonSets and evict pods) kubectl drain NODE_NAME \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300 # Example: kubectl drain hyperpod-i-014a41a7001adca60 \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300

명령 옵션 설명:

  • --ignore-daemonsets - DaemonSet 포드가 있더라도 드레이닝 작업을 진행할 수 있습니다.

  • --delete-emptydir-data - emptyDir 볼륨을 사용하여 포드를 삭제합니다(드레이닝이 성공하는 데 필요).

  • --force - 컨트롤러에서 관리하지 않는 포드를 강제로 삭제합니다(주의하여 사용).

  • --grace-period=300 - 포드가 정상적으로 종료될 수 있도록 5분을 부여합니다.

중요
  • 드레이닝 작업은 포드 수와 종료 유예 기간에 따라 몇 분 정도 걸릴 수 있습니다.

  • kube-system, , , , , , , , , cert-managerkubeflowhyperpod-inference-systemkube-publicmpi-operatorgpu-operatoraws-hyperpod, jupyter-k8s-system, kueue-system및 네임스페이스의 시스템 포드는 계속 실행됩니다hyperpod-observability. keda

  • DaemonSet 포드는 노드에 남아 있습니다(설계상 무시됨).

3단계: 실행 중인 워크로드 포드가 없는지 확인

드레이닝 후 노드에 워크로드 포드가 남아 있지 않은지 확인합니다(시스템 네임스페이스 제외).

# Check for any remaining pods outside system namespaces kubectl get pods --all-namespaces --field-selector spec.nodeName=NODE_NAME \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda" # Example: kubectl get pods --all-namespaces --field-selector spec.nodeName=hyperpod-i-014a41a7001adca60 \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda"

예상 출력: 노드가 제대로 드레이닝된 경우이 명령은 결과를 반환하지 않아야 합니다(또는 헤더 행만 표시). 아직 실행 중인 포드가 있는 경우 제거되지 않은 이유를 조사하고 필요한 경우 수동으로 삭제합니다.

4단계: 노드 준비 상태 확인

MIG 업데이트를 진행하기 전에 모든 노드가 연결되었는지 확인합니다.

# Check node status - should show "SchedulingDisabled" kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME

노드는 STATUS 열SchedulingDisabled에 표시되어야 하며, 이는 노드가 코드화되어 MIG 업데이트 준비가 되었음을 나타냅니다.

기존 클러스터에서 MIG 프로파일 업데이트

기존 클러스터에서 MIG 프로파일을 변경할 수 있습니다.

aws sagemaker update-cluster \ --cluster-name my-mig-cluster \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-3g.20gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" }'
참고

노드에서 작업이 이미 실행 중인 경우 MIG 파티셔닝이 실패합니다. MIG 파티셔닝을 다시 시도하기 전에 노드를 비우는 오류 메시지가 표시됩니다.

MIG 구성 확인

클러스터 생성 또는 업데이트 후 MIG 구성을 확인합니다.

# Update kubeconfig aws eks update-kubeconfig --name your-eks-cluster --region us-east-2 # Check MIG labels kubectl get node NODE_NAME -o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe node NODE_NAME | grep -A 10 "Allocatable:"

MIG 구성을 디버깅하기 위한 공통 명령

다음 명령을 사용하여 클러스터의 MIG 구성 문제를 해결하고 검증합니다.

# Check GPU Operator status kubectl get pods -n gpu-operator-resources # View MIG configuration kubectl exec -n gpu-operator-resources nvidia-driver-XXXXX -- nvidia-smi mig -lgi # Check device plugin configuration kubectl logs -n gpu-operator-resources nvidia-device-plugin-XXXXX # Monitor node events kubectl get events --field-selector involvedObject.name=NODE_NAME
참고

nvidia-driver-XXXXXnvidia-device-plugin-XXXXX를 클러스터의 실제 포드 이름으로 바꾸고 NODE_NAME를 노드 이름으로 바꿉니다.

SageMaker AI 콘솔 사용

MIG를 사용하여 새 클러스터 생성

  1. Amazon SageMaker AI > HyperPod 클러스터 > 클러스터 관리 > HyperPod 클러스터 생성으로 이동합니다.

  2. EKS에서 오케스트레이션 선택

  3. 사용자 지정 설정을 선택하고 GPU 운영자가 기본적으로 활성화되어 있는지 확인합니다.

  4. 인스턴스 그룹 섹션에서 그룹 추가를 클릭합니다.

  5. 인스턴스 그룹을 구성하고 고급 구성으로 이동하여 GPU 파티션 사용 토글을 활성화하고 드롭다운에서 원하는 MIG 구성을 선택합니다.

  6. 인스턴스 그룹 추가를 클릭하고 나머지 클러스터 구성을 완료합니다.

  7. 제출을 클릭하여 클러스터를 생성합니다.

기존 클러스터에서 MIG 구성 업데이트

  1. Amazon SageMaker AI > HyperPod 클러스터 > 클러스터 관리로 이동합니다.

  2. 기존 클러스터를 선택하고 수정하려는 인스턴스 그룹에서 편집을 클릭합니다.

  3. 고급 구성에서 아직 활성화되지 않은 경우 GPU 파티션 사용을 전환하고 드롭다운에서 다른 MIG 구성을 선택합니다.

  4. 변경 사항 저장을 클릭합니다.