PyTorch adalah kerangka pembelajaran mesin yang banyak digunakan untuk mengimplementasikan pekerjaan pelatihan terdistribusi multi-mesin dan multi-GPU. Di Kubernetes, Anda dapat menggunakan PyTorchJob untuk mengirimkan pekerjaan pembelajaran mesin dalam kerangka PyTorch. Topik ini menjelaskan cara menggunakan KubeQueue untuk mengelola pekerjaan pada instance Fleet dan menerapkan fitur gang scheduling saat menetapkan sumber daya pada instance Fleet.
Arsitektur
Untuk mendukung pelatihan terdistribusi multi-mesin dan multi-GPU serta memastikan bahwa pod dari pekerjaan pelatihan berjalan sesuai harapan, beban kerja harus mematuhi semantik gang scheduling selama proses penjadwalan. Semua beban kerja dari pekerjaan pelatihan harus berjalan bersama atau tidak ada yang boleh berjalan. Instance Fleet menggunakan KubeQueue dan ACK Scheduler untuk menjadwalkan PyTorchJob lintas beberapa kluster, memastikan bahwa semantik gang yang dideklarasikan dalam PyTorchJob dipertahankan selama penjadwalan.
Prasyarat
Suite AI Cloud-Native telah diinstal di sub-kluster. Anda hanya perlu menerapkan Arena.
Kebijakan Resource Access Management (RAM) AliyunAdcpFullAccess telah dilampirkan ke pengguna RAM. Untuk informasi lebih lanjut, lihat Memberikan Izin kepada Pengguna RAM.
Alat baris perintah AMC telah diinstal. Untuk informasi lebih lanjut, lihat Gunakan AMC.
(Opsional) Jika pemesanan sumber daya diaktifkan untuk kluster, instance Fleet menggunakan pemesanan sumber daya untuk memastikan hasil penjadwalan instance Fleet sama dengan hasil penjadwalan sub-kluster. Jika pemesanan sumber daya dinonaktifkan, instance Fleet mengevaluasi sumber daya dan menjadwalkan pekerjaan dengan membandingkan total sumber daya tersisa dari semua node di sub-kluster dengan total sumber daya yang dibutuhkan. Bagian berikut menjelaskan cara mengaktifkan pemesanan sumber daya.
CatatanUntuk mengaktifkan pemesanan sumber daya, versi Kubernetes kluster harus 1.28 atau lebih baru dan versi scheduler harus 6.8.0 atau lebih baru.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Di halaman Add-ons, temukan komponen Kube Scheduler, klik Configuration untuk masuk ke halaman Kube Scheduler Parameters, atur parameter enableReservation menjadi true, lalu klik OK.
(Opsional) Langkah 1: Gunakan ack-kube-queue untuk menambahkan antrian pekerjaan dan mengelola kuota
Dalam Fleet multi-kluster, Anda dapat menggunakan ElasticQuotaTree untuk mengelola kuota dan mengonfigurasi antrian. Ini membantu Anda menambahkan sejumlah besar pekerjaan dalam skenario multi-pengguna.
Contoh kode berikut menunjukkan cara mengirimkan ElasticQuotaTree.
Administrator kluster dapat mengirimkan ElasticQuotaTree pada instance Fleet untuk mengonfigurasi antrian pekerjaan. Dalam contoh ini, kuota di namespace
defaultdikonfigurasi, mencakup total 10.000 CPU, 10.000 GiB memori, 10.000 GPU, dan 1 pekerjaan.apiVersion: scheduling.sigs.k8s.io/v1beta1 kind: ElasticQuotaTree metadata: name: elasticquotatree # Hanya satu ElasticQuotaTree yang didukung. namespace: kube-system # Grup kuota elastis hanya berlaku jika Anda membuat grup di namespace kube-system. spec: root: name: root # Jumlah maksimum sumber daya untuk root harus sama dengan jumlah minimum sumber daya untuk root. max: cpu: 999900 memory: 400000Gi kube-queue/max-jobs: 10000000000 nvidia.com/gpu: 100000 min: cpu: 999900 memory: 400000Gi kube-queue/max-jobs: 10000000000 nvidia.com/gpu: 100000 children: - name: child-2 max: # Hanya satu pekerjaan yang dapat dikeluarkan dari antrian pada satu waktu. kube-queue/max-jobs: 1 cpu: 10000 nvidia.com/gpu: 10000 memory: 10000Gi namespaces: # Konfigurasikan namespace. - defaultJalankan perintah berikut pada instance Fleet untuk melihat ElasticQuotaTree dan antrian yang dibuat oleh KubeQueue:
kubectl get queue -n kube-queueOutput yang diharapkan:
NAME AGE root-child-2-v5zxz 15d root-kdzw7 15d
Langkah 2: Kirim PyTorchJob untuk penjadwalan multi-kluster
Kirim PropagationPolicy pada instance Fleet dan atur Kebijakan Kustom ke Gang.
Gunakan hanya kebijakan gang scheduling
Saat menggunakan fitur gang scheduling, tentukan parameter
customSchedulingType=GangdalamPropagationPolicyyang dikirimkan.apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: example-policy # Namespace default adalah `default`. spec: propagateDeps: true # Jadwalkan ulang pekerjaan ketika pekerjaan gagal berjalan. failover: application: decisionConditions: tolerationSeconds: 30 purgeMode: Immediately placement: replicaScheduling: replicaSchedulingType: Divided # Gunakan gang scheduling. customSchedulingType: Gang resourceSelectors: - apiVersion: kubeflow.org/v1 kind: PyTorchJobGunakan ElasticQuotaTree dan gang scheduling
Tentukan parameter
customSchedulingType=GangdalamPropagationPolicyyang dikirimkan, dan atur.Spec.Suspension.Schedulingmenjaditrue. Dengan cara ini, pekerjaan dapat ditambahkan ke antrian untuk penjadwalan.apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: example-policy # Namespace default adalah `default`. spec: suspension: scheduling: true propagateDeps: true # Batalkan penjadwalan pekerjaan ketika pekerjaan gagal berjalan. failover: application: decisionConditions: tolerationSeconds: 30 purgeMode: Immediately placement: replicaScheduling: replicaSchedulingType: Divided # Gunakan gang scheduling. customSchedulingType: Gang resourceSelectors: - apiVersion: kubeflow.org/v1 kind: PyTorchJobContoh kode berikut menunjukkan cara mengirimkan PyTorchJob pada instance Fleet.
Langkah 3: Lihat status pekerjaan
Jalankan perintah berikut pada instance Fleet untuk memeriksa status PyTorchJob:
kubectl get pytorchjobOutput yang diharapkan:
NAME STATE AGE pytorch-test Created 3m44sJalankan perintah berikut pada instance Fleet untuk memeriksa kluster terkait mana PyTorchJob dijadwalkan:
kubectl describe pytorchjob pytorch-testOutput yang diharapkan:
Normal ScheduleBindingSucceed 4m59s default-scheduler Binding has been scheduled successfully. Result: {cfxxxxxx:0,[{master 1} {worker 2}]}Jalankan perintah berikut pada instance Fleet untuk memeriksa status PyTorchJob di kluster terkait:
kubectl amc get pytorchjob -MOutput yang diharapkan:
NAME CLUSTER STATE AGE ADOPTION pytorch-test cfxxxxxx Running 6m23s YJalankan perintah berikut pada instance Fleet untuk memeriksa status pod:
kubectl amc get pod -MOutput yang diharapkan:
NAME CLUSTER READY STATUS RESTARTS AGE pytorch-test-master-0 cfxxxxxx 1/1 Running 0 7m16s pytorch-test-worker-0 cfxxxxxx 1/1 Running 0 7m16s pytorch-test-worker-1 cfxxxxxx 1/1 Running 0 7m16sJalankan perintah berikut pada instance Fleet untuk melihat detail PyTorchJob di kluster terkait:
kubectl amc get pytorchjob pytorch-test -m ${member clusterid} -oyaml