Menyiapkan partisi GPU di Amazon SageMaker HyperPod - Amazon SageMaker AI

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyiapkan partisi GPU di Amazon SageMaker HyperPod

Prasyarat

  • HyperPod Cluster Amazon EKS dengan instans GPU yang didukung

  • Operator GPU NVIDIA diinstal

  • Izin IAM yang sesuai untuk manajemen klaster

Membuat Cluster dengan Konfigurasi MIG

Menggunakan 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

Menggunakan 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" }

Menambahkan operator GPU ke cluster yang ada

Instal Operator GPU

Ganti {$AWS_REGION} dengan wilayah cluster Anda (misalnya, us-east-1, us-west-2).

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

Verifikasi Instalasi (Tunggu 2-3 menit)

Periksa semua pod operator GPU yang sedang berjalan:

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

Pod yang diharapkan:

  • gpu-operator-* - 1 contoh (pengontrol cluster)

  • nvidia-device-plugin-daemonset-* - 1 per node GPU (semua instance GPU)

  • nvidia-mig-manager-* - 1 per node berkemampuan MiG (A100/H100)

Hapus Plugin Perangkat Lama

Nonaktifkan yang ada nvidia-device-plugin:

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

Verifikasi Sumber Daya GPU

Konfirmasi node menunjukkan kapasitas GPU. Ini harus menampilkan: nvidia.com/gpu: 8 (atau jumlah GPU Anda yang sebenarnya).

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

Memperbarui Konfigurasi MIG

Mempersiapkan Node Sebelum Pembaruan MIG

Sebelum memperbarui konfigurasi MIG pada grup instans Anda, Anda harus menyiapkan node untuk mencegah gangguan beban kerja. Ikuti langkah-langkah ini untuk menguras beban kerja dengan aman dari node yang akan dikonfigurasi ulang.

Langkah 1: Identifikasi Node dalam Grup Instance

Pertama, identifikasi semua node yang termasuk dalam grup instance yang ingin Anda perbarui:

# 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

Perintah ini mengembalikan daftar semua node dalam kelompok contoh tertentu. Catat setiap nama node untuk langkah-langkah berikut.

Langkah 2: Cordon dan Tiriskan Setiap Node

Untuk setiap node yang diidentifikasi pada Langkah 1, lakukan tindakan berikut:

Cordon Node

Cordoning mencegah pod baru dijadwalkan pada node:

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

Kuras Pod Beban Kerja dari Node

Kuras node untuk mengusir semua pod beban kerja sambil mempertahankan pod sistem:

# 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

Opsi Perintah Dijelaskan:

  • --ignore-daemonsets- Memungkinkan operasi pembuangan untuk dilanjutkan bahkan jika DaemonSet polong ada

  • --delete-emptydir-data- Menghapus pod menggunakan volume emptyDir (diperlukan agar pengeringan berhasil)

  • --force- Memaksa penghapusan pod yang tidak dikelola oleh pengontrol (gunakan dengan hati-hati)

  • --grace-period=300- Memberikan pod 5 menit untuk mengakhiri dengan anggun

penting
  • Operasi pembuangan dapat memakan waktu beberapa menit tergantung pada jumlah polong dan masa tenggang penghentiannya

  • Pod sistem dalam namespace berikut akan tetap berjalan:kube-system,,cert-manager,kubeflow,hyperpod-inference-system,kube-public,mpi-operator,gpu-operator,aws-hyperpod, jupyter-k8s-systemhyperpod-observability, kueue-system dan keda

  • DaemonSet pod akan tetap berada di node (mereka diabaikan oleh desain)

Langkah 3: Verifikasi Tidak Ada Pod Beban Kerja yang Berjalan

Setelah menguras, verifikasi bahwa tidak ada pod beban kerja yang tersisa di node (tidak termasuk ruang nama sistem):

# 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"

Output yang Diharapkan: Jika node dikeringkan dengan benar, perintah ini seharusnya tidak mengembalikan hasil (atau hanya menampilkan baris header). Jika ada pod yang masih berjalan, selidiki mengapa mereka tidak diusir dan hapus secara manual jika perlu.

Langkah 4: Verifikasi Status Kesiapan Node

Sebelum melanjutkan dengan pembaruan MIG, konfirmasikan bahwa semua node ditutup:

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

Node harus ditampilkan SchedulingDisabled di kolom STATUS, menunjukkan bahwa mereka ditutup dan siap untuk pembaruan MIG.

Memperbarui Profil MIG pada Cluster yang Ada

Anda dapat mengubah profil MIG pada cluster yang ada:

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" }'
catatan

Jika pekerjaan sudah berjalan pada node, partisi MIG akan gagal. Pengguna akan mendapatkan pesan kesalahan untuk menguras node sebelum mencoba kembali partisi MIG.

Memverifikasi Konfigurasi MIG

Setelah pembuatan atau pembaruan cluster, verifikasi konfigurasi 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:"

Perintah Umum untuk Debugging Konfigurasi MIG

Gunakan perintah berikut untuk memecahkan masalah dan memvalidasi konfigurasi MIG di klaster Anda:

# 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
catatan

Ganti nvidia-driver-XXXXX dan nvidia-device-plugin-XXXXX dengan nama pod yang sebenarnya dari klaster Anda, dan NODE_NAME dengan nama node Anda.

Menggunakan Konsol SageMaker AI

Membuat Cluster Baru dengan MIG

  1. Arahkan ke Amazon SageMaker AI > HyperPod Clusters > Cluster Management > Create HyperPod cluster

  2. Pilih Diatur oleh EKS

  3. Pilih Pengaturan khusus dan verifikasi Operator GPU diaktifkan secara default

  4. Di bawah Bagian grup instans, klik Tambahkan grup

  5. Konfigurasikan grup instans dan arahkan ke Konfigurasi Lanjutan untuk mengaktifkan sakelar Gunakan partisi GPU dan pilih konfigurasi MIG yang Anda inginkan dari dropdown

  6. Klik Tambahkan grup Instance dan selesaikan konfigurasi cluster yang tersisa

  7. Klik Kirim untuk membuat klaster

Memperbarui Konfigurasi MIG pada Cluster yang Ada

  1. Arahkan ke Amazon SageMaker AI > HyperPod Clusters > Cluster Management

  2. Pilih klaster yang ada dan klik Edit pada grup instans yang ingin Anda ubah

  3. Dalam konfigurasi lanjutan, alihkan Gunakan partisi GPU jika belum diaktifkan dan pilih konfigurasi MIG yang berbeda dari dropdown

  4. Klik Simpan perubahan