Panduan ini menunjukkan cara mengoptimalkan penyediaan TPU untuk workload pelatihan skala kecil dan menengah menggunakan mode penyediaan mulai fleksibel. Dalam panduan ini, Anda menggunakan mulai fleksibel untuk men-deploy beban kerja yang terdiri dari node pool slice TPU.
Panduan ini ditujukan untuk engineer Machine Learning (ML), Admin dan operator platform, serta spesialis Data dan AI yang tertarik untuk menggunakan kemampuan orkestrasi container Kubernetes dalam menjalankan beban kerja batch. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami rujuk dalam konten, lihat Peran dan tugas pengguna GKE Enterprise umum. Trusted Cloud by S3NS
Harga mulai fleksibel
Mulai fleksibel direkomendasikan jika workload Anda memerlukan penyediaan dinamis sumber daya sesuai kebutuhan, hingga tujuh hari dengan reservasi jangka pendek, tanpa pengelolaan kuota yang rumit, dan akses yang hemat biaya. Mulai fleksibel didukung oleh Dynamic Workload Scheduler dan ditagih menggunakan harga Dynamic Workload Scheduler:
- Diskon (hingga 53%) untuk vCPU, GPU, dan TPU.
- Anda membayar sesuai penggunaan.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
- Verifikasi bahwa Anda memiliki cluster Autopilot atau cluster Standard yang menjalankan versi 1.33.0-gke.1712000 atau yang lebih baru.
- Pastikan Anda memahami batasan mulai fleksibel.
- Saat menggunakan cluster Standar, pastikan Anda mempertahankan setidaknya satu node pool tanpa mengaktifkan flex-start agar cluster berfungsi dengan benar.
- Pastikan Anda memiliki kuota untuk TPU preemptible di lokasi node Anda.
Membuat node pool dengan flex-start
Untuk membuat node pool dengan flex-start yang diaktifkan pada cluster Standar yang ada, gunakan gcloud CLI.
Jika Anda menggunakan cluster dalam mode Autopilot, lewati bagian ini dan buka bagian Menjalankan workload batch.
Anda dapat membuat node pool slice TPU host tunggal atau multi-host dengan flex-start:
Membuat node pool dengan flex-start:
Host tunggal
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION_NAME \ --node-locations=NODE_ZONES \ --machine-type=MACHINE_TYPE \ --reservation-affinity=none \ --enable-autoscaling \ --flex-start \ --num-nodes 0 \ --min-nodes=0 \ --max-nodes=1
Ganti kode berikut:
NODE_POOL_NAME
: nama yang Anda pilih untuk node pool.CLUSTER_NAME
: nama cluster.LOCATION_NAME
: region komputasi untuk bidang kontrol cluster.NODE_ZONES
: daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.MACHINE_TYPE
: jenis mesin yang akan digunakan untuk node. Untuk mengetahui informasi selengkapnya tentang jenis mesin yang kompatibel dengan TPU, gunakan tabel di Memilih versi TPU.
Multi-host
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION_NAME \ --node-locations=NODE_ZONES \ --machine-type=MACHINE_TYPE \ --tpu-topology=TPU_TOPOLOGY \ --flex-start \ --enable-autoscaling \ --num-nodes=0 \ --max-nodes=2 \ --reservation-affinity=none \ --no-enable-autorepair
Ganti kode berikut:
NODE_POOL_NAME
: nama yang Anda pilih untuk node pool.CLUSTER_NAME
: nama cluster.LOCATION_NAME
: region komputasi untuk bidang kontrol cluster.NODE_ZONES
: daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.MACHINE_TYPE
: jenis mesin yang akan digunakan untuk node. Misalnya, Anda dapat menggunakanct6e-standard-4t
untuk TPU Trillium. Untuk mempelajari jenis mesin yang tersedia lebih lanjut, lihat Memilih versi TPU.TPU_TOPOLOGY
: topologi fisik untuk slice TPU. Format topologi bergantung pada versi TPU. Untuk mempelajari topologi TPU lebih lanjut, gunakan tabel di Memilih topologi.
Perintah sebelumnya menggunakan flag wajib berikut saat Anda membuat node pool dengan flex-start:
--enable-autoscaling
: Penyediaan flex-start hanya menyediakan resource komputasi yang diperlukan saat workload Anda berjalan. Anda harus menetapkan parameter berikut:--num-nodes=0
--min-nodes=0
--max-nodes
ditetapkan ke jumlah virtual machine yang diperlukan slice TPU Anda.Misalnya, perintah pembuatan node pool Anda dapat menyertakan parameter berikut:
... --machine-type=ct6e-standard-4t \ --tpu-topology=4x4 \ --enable-autoscaling \ --num-nodes=0 \ --max-nodes=4 \
Perintah ini menetapkan kolom
--max-nodes
ke4
karena topologi4x4
terdiri dari 16 chip dan setiap VMct6e-standard-4t
memiliki 4 chip.
Penskala otomatis cluster melakukan penskalaan hingga jumlah node yang diperlukan beban kerja Anda. Setelah beban kerja Anda selesai, autoscaler cluster akan menurunkan skala ke nol node.
--reservation-affinity=none
: flex-start tidak menggunakan atau memerlukan reservasi.
Verifikasi status mulai fleksibel di node pool:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
Jika flex-start diaktifkan di node pool, kolom
flexStart
akan disetel keTrue
.
Menjalankan workload batch
Di bagian ini, Anda akan membuat Job yang menjadwalkan node TPU dengan flex-start. Pengontrol Job di Kubernetes membuat satu atau beberapa Pod dan memastikan bahwa Pod tersebut berhasil menjalankan tugas tertentu.Di Trusted Cloud konsol, luncurkan sesi Cloud Shell dengan mengklik
Activate Cloud Shell. Sesi akan terbuka di panel bawah konsol Trusted Cloud .
Buat file bernama
dws-flex-start.yaml
:Host tunggal
Gunakan manifes berikut untuk file
dws-flex-start.yaml
:apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["3600s"] # Sleep for 1 hour resources: requests: google.com/tpu: NUM_CHIPS limits: google.com/tpu: NUM_CHIPS restartPolicy: OnFailure
Multi-host
Gunakan manifes berikut untuk file
dws-flex-start.yaml
:apiVersion: v1 kind: Service metadata: name: headless-svc spec: clusterIP: None selector: job-name: job-1 --- apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: backoffLimit: 0 completions: 2 parallelism: 2 completionMode: Indexed template: spec: subdomain: headless-svc restartPolicy: Never nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY containers: - name: tpu-job image: python:3.10 ports: - containerPort: 8471 # Default port using which TPU VMs communicate - containerPort: 8431 # Port to export TPU runtime metrics, if supported. securityContext: privileged: true command: - bash - -c - | pip install 'jax[tpu]' -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("TPU cores:", jax.device_count())' resources: requests: google.com/tpu: NUM_CHIPS limits: google.com/tpu: NUM_CHIPS
Ganti kode berikut:
ACCELERATOR_TYPE
: jenis akselerator TPU yang Anda gunakan saat membuat node pool. Misalnya,tpu-v4-podslice
atautpu-v5-lite-podslice
.TPU_TOPOLOGY
: topologi fisik untuk slice TPU. Misalnya, nilainya mungkin4x4x4
atau2x2
, bergantung pada versi TPU.NUM_CHIPS
: jumlah chip TPU di setiap VM adalah satu, empat, atau delapan. Untuk mempelajari lebih lanjut, lihat Versi TPU.
Terapkan manifes
dws-flex-start.yaml
:kubectl apply -f dws-flex-start.yaml
Pastikan bahwa Job berjalan di node yang sama:
kubectl get pods
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
Pembersihan
Agar tidak dikenai biaya pada akun Anda untuk resource yang Anda gunakan di halaman ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource. Trusted Cloud by S3NS
Menghapus project
- In the Trusted Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource satu per satu
Hapus Tugas:
kubectl delete job -l "job-name in (job-1,job-2)"
Hapus node pool:
gcloud container node-pools delete NODE_POOL_NAME \ --location LOCATION_NAME
Hapus cluster:
gcloud container clusters delete CLUSTER_NAME
Langkah berikutnya
- Pelajari lebih lanjut TPU di GKE.
- Pelajari lebih lanjut penyediaan otomatis node.
- Pelajari lebih lanjut praktik terbaik untuk menjalankan workload batch di GKE.