기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 cordonNODE_NAME# Example: kubectl cordon hyperpod-i-014a41a7001adca60
노드에서 워크로드 포드 드레이닝
시스템 포드를 유지하면서 모든 워크로드 포드를 제거하도록 노드를 드레이닝합니다.
# Drain the node (ignore DaemonSets and evict pods) kubectl drainNODE_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 --nameyour-eks-cluster--regionus-east-2# Check MIG labels kubectl get nodeNODE_NAME-o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe nodeNODE_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-XXXXX 및 nvidia-device-plugin-XXXXX를 클러스터의 실제 포드 이름으로 바꾸고 NODE_NAME를 노드 이름으로 바꿉니다.
SageMaker AI 콘솔 사용
MIG를 사용하여 새 클러스터 생성
-
Amazon SageMaker AI > HyperPod 클러스터 > 클러스터 관리 > HyperPod 클러스터 생성으로 이동합니다.
-
EKS에서 오케스트레이션 선택
-
사용자 지정 설정을 선택하고 GPU 운영자가 기본적으로 활성화되어 있는지 확인합니다.
-
인스턴스 그룹 섹션에서 그룹 추가를 클릭합니다.
-
인스턴스 그룹을 구성하고 고급 구성으로 이동하여 GPU 파티션 사용 토글을 활성화하고 드롭다운에서 원하는 MIG 구성을 선택합니다.
-
인스턴스 그룹 추가를 클릭하고 나머지 클러스터 구성을 완료합니다.
-
제출을 클릭하여 클러스터를 생성합니다.
기존 클러스터에서 MIG 구성 업데이트
-
Amazon SageMaker AI > HyperPod 클러스터 > 클러스터 관리로 이동합니다.
-
기존 클러스터를 선택하고 수정하려는 인스턴스 그룹에서 편집을 클릭합니다.
-
고급 구성에서 아직 활성화되지 않은 경우 GPU 파티션 사용을 전환하고 드롭다운에서 다른 MIG 구성을 선택합니다.
-
변경 사항 저장을 클릭합니다.