Dokumen ini menjelaskan cara menggunakan pengirisan dinamis di Google Kubernetes Engine (GKE). Dengan slicing dinamis, Anda dapat mengonfigurasi sub-blok TPU yang disediakan ke dalam topologi yang berbeda. Kemampuan ini mengurangi kebutuhan untuk membuat ulang kumpulan node, meningkatkan toleransi fault dengan memungkinkan pemulihan otomatis saat terjadi kegagalan, dan mengoptimalkan pemanfaatan resource.
Dokumen ini ditujukan untuk engineer AI/ML dan administrator platform yang ingin mengoptimalkan pemanfaatan TPU, mengurangi waktu penyediaan, dan meningkatkan toleransi kesalahan untuk workload inferensi dan pelatihan skala besar.
Sebelum membaca dokumen ini, pastikan Anda memahami hal-hal berikut:
- TPU di GKE.
- TPU Cluster Director. Pengirisan dinamis adalah fitur TPU yang diaktifkan oleh TPU Cluster Director.
- Semua reservasi mode Semua Kapasitas. Fitur pengirisan dinamis tersedia secara eksklusif di TPU yang menggunakan mode Semua Kapasitas.
Apa itu pengelompokan dinamis?
Pengirisan dinamis memberikan fleksibilitas dalam mengelola kapasitas Cloud TPU dengan memungkinkan Anda memisahkan penyediaan TPU. Pengirisan dinamis melibatkan proses berikut:
- Anda menyediakan
sumber daya sebagai unit yang lebih kecil yang disebut
sub-blok. Sub-blok adalah unit penyusun logis mendasar dari kapasitas Ironwood (TPU7x).
Untuk Ironwood (TPU7x), ini merepresentasikan grup 16 node VM TPU dengan topologi
4x4x4dari chip TPU yang saling terhubung. Dalam konteks mode Semua Kapasitas TPU dan slicing dinamis, node pool dipetakan langsung ke sub-blok. - Pengirisan dinamis kemudian menggabungkan sub-blok ini menjadi irisan yang lebih besar.
Manfaat pengirisan dinamis
Pengelompokan dinamis membantu Anda mencapai hal berikut:
- Mengurangi waktu penyediaan: penyediaan sub-blok secara individual menghasilkan penyediaan keseluruhan yang lebih cepat karena meminimalkan dampak dari satu kegagalan.
- Mengurangi waktu pemulihan: jika terjadi kegagalan chip TPU, unit kegagalan terkecil adalah sub-blok. Pengelompokan dinamis mengisolasi sub-blok yang rusak sehingga workload dapat dijadwalkan ulang pada sub-blok yang berfungsi dengan lebih cepat daripada memulihkan seluruh slice besar.
- Membentuk ulang kapasitas: jika Anda memiliki beragam persyaratan workload, Anda tidak perlu menghapus dan membuat ulang kumpulan node untuk perubahan topologi, yang diperlukan tanpa pengirisan dinamis. Sebagai gantinya, Anda dapat mengonfigurasi ulang node pool yang disediakan secara dinamis agar sesuai dengan bentuk yang ditentukan.
Elemen utama pengirisan dinamis
Pengirisan dinamis memperkenalkan konsep utama berikut:
- Penyediaan inkremental node pool: pengirisan dinamis menggunakan penyediaan inkremental, yang merupakan model penyediaan node pool yang toleran terhadap kesalahan. Model ini mengonversi semua kapasitas TPU Anda menjadi node pool grup 16 node VM TPU.
- Pengontrol slice: pengontrol Resource Kustom Kubernetes yang berjalan dalam bidang kontrol GKE yang mengelola slicing dinamis. Pengontrol slice mengelola siklus proses resource kustom Slice, yang merepresentasikan slice dinamis. Pengontrol slice menangani pembuatan, pemantauan berkelanjutan, dan penghapusan Slice. Saat Anda menggunakan penjadwal, penjadwal akan mengarahkan pembuatan dan penghapusan resource kustom Slice.
- Resource kustom slice: menggabungkan sub-blok ini secara dinamis berdasarkan topologi TPU yang diminta. Proses ini mengandalkan konfigurasi ulang dinamis jaringan OCS untuk menghubungkan kumpulan node TPU, yang membantu memastikan performa yang dioptimalkan. Anda dapat memeriksa progres atau kondisi pembentukan slice dinamis dengan memeriksa kolom status resource kustom Slice.
Persyaratan
Untuk menggunakan pengelompokan dinamis di GKE, Anda harus memenuhi persyaratan berikut:
- Gunakan cluster Standard dalam versi 1.35.0-gke.274500 atau yang lebih baru, di saluran Cepat.
- Gunakan versi Ironwood (TPU7x).
- Gunakan image Container-Optimized OS untuk node Anda.
- Untuk menggunakan penyediaan inkremental, gunakan pemesanan mode Semua Kapasitas. Semua Mode kapasitas adalah fitur yang diaktifkan oleh TPU Cluster Director.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan 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 perintah
gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda memiliki cluster Standard yang ada dalam versi 1.35.0-gke.274500 atau yang lebih baru, di saluran Rapid. Untuk membuat cluster baru, lihat Membuat cluster regional.
- Pastikan Anda memiliki kuota yang cukup untuk Ironwood (TPU7x) di region Anda.
- Jika Anda berencana menjalankan workload multislice, instal JobSet v0.10.1 atau yang lebih baru
- Minta kapasitas TPU dalam mode Semua Kapasitas.
Batasan
- Satu slice harus menggunakan sub-blok dalam blok TPU yang sama dalam reservasi. Untuk menggunakan sub-blok di seluruh blok TPU, gunakan TPU Multislice.
- Pengirisan dinamis tidak mendukung topologi yang lebih kecil dari
4x4x4.
Menggunakan pengelompokan dinamis di GKE dengan Kueue
Bagian ini menjelaskan alur kerja untuk menggunakan pengelompokan dinamis di GKE.
- Melihat topologi dan status respons pemesanan mode Semua Kapasitas.
- Aktifkan pengontrol slice di cluster Anda.
- Buat node pool TPU.
- Konfigurasi Kueue untuk membuat resource kustom Slice.
- Menjalankan workload pada slicing dinamis dengan Kueue.
- Pembersihan.
Aktifkan pengontrol slice
Untuk menggunakan pengelompokan dinamis, aktifkan pengontrol pengelompokan di cluster Anda.
Perbarui cluster Anda:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --enable-slice-controllerGanti kode berikut:
CLUSTER_NAME: nama cluster Anda.LOCATION: region dengan kapasitas TPU yang tersedia.
Dapatkan kredensial agar Anda dapat berkomunikasi dengan cluster menggunakan perintah
kubectl:gcloud config set container/cluster CLUSTER_NAME gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONDi output perintah berikut, verifikasi bahwa nilai
slices.accelerator.gke.ioada:kubectl get crd slices.accelerator.gke.ioOutputnya mirip dengan hal berikut ini:
slices.accelerator.gke.io 2026-01-09T23:58:02Z
Membuat node pool dengan penyediaan inkremental
Bagian ini menjelaskan cara membuat kumpulan node TPU dengan penyediaan inkremental. GKE mengonversi semua kapasitas TPU Anda menjadi node pool grup 16 node VM TPU, atau sub-blok. GKE menyediakan node pool ini meskipun tidak dapat menemukan semua 16 VM yang sehat dengan menempatkan node di bagian yang sehat dari mesin host dan menyediakan mesin yang tidak sehat secara bertahap saat diperbaiki.
Anda dapat menargetkan node pool agar termasuk dalam salah satu opsi berikut:
- Blok TPU tertentu, yang ditampilkan dalam pemesanan mode Semua Kapasitas. Penargetan blok memungkinkan GKE membuat node pool di sub-blok yang tersedia dalam blok yang ditentukan.
- Sub-blok tertentu, atau grup 16 node tertentu dari VM TPU, untuk kontrol yang lebih terperinci.
Membuat kebijakan beban kerja
Untuk membuat node pool slice TPU dengan Ironwood (TPU7x), Anda harus membuat
kebijakan beban kerja terlebih dahulu dengan kolom accelerator-topology-mode yang ditetapkan ke provision_only. Setelan ini akan memicu proses penyediaan inkremental.
Buat kebijakan beban kerja:
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--project=PROJECT_ID \
--region=REGION \
--type=HIGH_THROUGHPUT \
--accelerator-topology=4x4x4 \
--accelerator-topology-mode=provision_only
Ganti kode berikut:
WORKLOAD_POLICY_NAME: nama untuk kebijakan workload Anda.PROJECT_ID: Google Cloud project ID Anda.REGION: region untuk kebijakan workload.
Dalam perintah ini, lakukan hal berikut::
- Selalu setel kolom
accelerator-topologyke4x4x4agar sesuai dengan jumlah total chip dalam satu sub-blok. - Selalu tetapkan kolom
accelerator-topology-modekeprovision_onlyuntuk memastikan proses penyediaan inkremental dipicu. Jika kolomprovision_onlydisetel, node pool akan menyediakan node TPU tanpa membentuk link ICI atau OCS.
Menargetkan node pool Anda agar termasuk dalam blok atau sub-blok
Anda dapat menargetkan sub-blok atau blok tertentu dalam reservasi mode Semua Kapasitas.
- Menargetkan blok: setiap node pool menggunakan kapasitas dari blok yang ditentukan. GKE menempatkan node pool dalam sub-blok yang tersedia di blok tersebut. Anda harus membuat node pool sebanyak jumlah sub-blok dalam blok yang ingin Anda gunakan.
Menargetkan sub-blok: setiap node pool dipetakan ke sub-blok tertentu yang tersedia. Saat menggunakan penargetan sub-blok, GKE akan membuat node pool jika setidaknya ada satu VM yang berfungsi dengan baik. Penyediaan inkremental memastikan bahwa semua node ditempatkan dalam sub-blok yang ditentukan.
Blokir
Untuk mengambil nama blok dalam reservasi dan jumlah sub-blok yang tersedia dalam blok, selesaikan langkah-langkah berikut dalam dokumen Melihat topologi dan status kondisi semua reservasi Mode Kapasitas:
Identifikasi nama blok dengan mencantumkan semua blok reservasi dan menyalin nilai di kolom
name:. Nilai ini adalah nama blok atauBLOCK_NAMEdalam dokumen ini.Tentukan jumlah node pool yang akan dibuat dengan mendeskripsikan blok pemesanan dan mengidentifikasi nilai di kolom
reservationSubBlockCount. Nilai ini adalah jumlah sub-blok yang tersedia. Misalnya, nilaireservationSubBlockCount: 4menunjukkan bahwa blok memiliki empat sub-blok yang tersedia, dan Anda perlu membuat empat kumpulan node terpisah.
Menetapkan jalur reservasi:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME"Ganti kode berikut:
RESERVATION_NAME: nama reservasi TPU Anda.BLOCK_NAME: nama blok.
Buat node pool untuk setiap sub-blok yang diidentifikasi pada langkah sebelumnya. Misalnya, jika jumlahnya adalah
4, jalankan perintah ini empat kali. Gunakan nama unik untuk setiap node pool.gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}Ganti kode berikut:
NODE_POOL_NAME: nama node pool baru.CLUSTER_NAME: nama cluster GKE Anda.WORKLOAD_POLICY_NAME: nama kebijakan workload yang Anda buat.ZONE: zona untuk node pool, misalnya,us-central1-a.
Sub-blok
Untuk mengambil nama blok dan ID sub-blok yang tersedia, selesaikan langkah-langkah berikut dalam dokumen Melihat topologi dan status kondisi reservasi Semua Mode Kapasitas:
Untuk mengidentifikasi nama blok, cantumkan semua blok reservasi dan salin nilai di kolom
name:. Nilai ini adalah nama blok atauBLOCK_NAMEpada dokumen ini.Untuk mengidentifikasi nama sub-blok, cantumkan semua sub-blok dari suatu blok dan salin nilai di kolom
name:untuk setiap entri di bagianreservationSubBlocks. Nilai ini adalah nama sub-blok atauSUBBLOCK_NAMEdalam dokumen ini.
Menetapkan jalur reservasi:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUBBLOCK_NAME"Ganti kode berikut:
RESERVATION_NAME: nama reservasi TPU Anda.BLOCK_NAME: nama blok.SUBBLOCK_NAME: nama sub-blok.
Buat node pool:
gcloud container node-pools create NODE_POOL_NAME \ --project=PROJECT_ID \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}Ganti kode berikut:
NODE_POOL_NAME: nama unik untuk node pool baru Anda, misalnya,sub-block-pool-1.PROJECT_ID: Google Cloud project ID Anda.CLUSTER_NAME: nama cluster GKE Anda.ZONE: zona untuk node pool, misalnya,us-central2-b.WORKLOAD_POLICY_NAME: nama kebijakan workload yang Anda buat.
Pada tahap ini, node dibuat, tetapi link Inter-Chip Interconnect (ICI)-nya belum aktif. Oleh karena itu, Anda tidak dapat menjalankan workload di node pool ini secara langsung.
Untuk mengaktifkan semua link ICI yang diperlukan untuk membentuk slice dan memungkinkan penjadwalan beban kerja, buat slice dinamis menggunakan salah satu metode berikut:
- Buat Slice custom resource. Sebagai gantinya, Anda menggunakan resource kustom Slice untuk menentukan topologi yang ditentukan, yang diaktifkan oleh pengontrol slice.
- Menjadwalkan workload GKE dengan Kueue dan TAS. Kueue secara otomatis menangani pembuatan dan penghapusan resource kustom Slice. Hindari memodifikasi secara manual resource kustom Slice yang dibuat oleh Kueue.
Membuat slice dinamis dengan Kueue dan TAS
Di bagian ini, Anda akan menjadwalkan workload GKE dengan Kueue dan TAS.
Menginstal resource JobSet dan Kueue untuk pengirisan dinamis
Instal JobSet:
helm install jobset oci://registry.k8s.io/jobset/charts/jobset \ --version 0.10.1 \ --namespace jobset-system \ --create-namespace \ --set controller.resources.requests.cpu=4 \ --set controller.resources.requests.memory=16GiInstal Kueue:
helm install kueue oci://registry.k8s.io/kueue/charts/kueue \ --version 0.16.1 \ --namespace kueue-system \ --create-namespace \ --wait \ --set controllerManager.replicas=3 \ --set controllerManager.manager.resources.requests.cpu=16 \ --set controllerManager.manager.resources.requests.memory=64GiInstal pengontrol slice Kueue:
kubectl apply -f https://gist.githubusercontent.com/mwysokin/cd90010d0d375b3bf57c536905692547/raw/506c36dd070f4ac222ba8a5e58ba28bbfcfa8ed3/kueue-slice-controller-v0.8.0-130.yamlUntuk mengonfigurasi Kueue untuk pengelompokan dinamis, simpan manifes berikut sebagai
dynamic-slice-topology.yaml:apiVersion: kueue.x-k8s.io/v1beta1 kind: Topology metadata: name: superslice-topology spec: levels: # Label to identify the physical block a sub-block belongs to. # Only sub-blocks from the same block can form a slice. - nodeLabel: cloud.google.com/gce-topology-block # Label to identify individual TPU sub-blocks (4x4x4 topology). - nodeLabel: cloud.google.com/gke-tpu-partition-4x4x4-id # Standard Kubernetes label for individual nodes. # Required to assign Pods to specific VMs. - nodeLabel: kubernetes.io/hostname --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: superslice-rf spec: nodeLabels: cloud.google.com/gke-tpu-accelerator: tpu7x topologyName: superslice-topology --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: superslice-ac spec: controllerName: accelerator.gke.io/slice --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: cq spec: namespaceSelector: {} admissionChecks: - superslice-ac resourceGroups: - coveredResources: - google.com/tpu flavors: - name: superslice-rf resources: - name: google.com/tpu nominalQuota: "999999" # modeling unlimited quota --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: name: lq namespace: default spec: clusterQueue: cqTerapkan manifes
dynamic-slice-topology.yaml:kubectl apply -f dynamic-slice-topology.yamlDalam manifes ini, Anda mengonfigurasi Kueue untuk pengirisan dinamis dengan menentukan resource berikut:
- Topologi slice dinamis Ironwood (TPU7x) (
superslice-topology): topologi menentukan tingkat yang dipertimbangkan Kueue saat menjadwalkan workload slice dinamis. Level ini adalah sebagai berikut:- Label
cloud.google.com/gce-topology-block: tingkat ini diperlukan untuk memahami sub-blok mana yang termasuk dalam blok mana, karena hanya sub-blok dari blok yang sama yang dapat membentuk slice. - Label
cloud.google.com/gke-tpu-partition-4x4x4-id: tingkat ini merepresentasikan sub-blok Ironwood (TPU7x) individual (topologi4x4x4). - label
kubernetes.io/hostname: tingkat ini diperlukan untuk menetapkan Pod ke VM tertentu dan untuk mengamati label dan taint-nya.
- Label
- Ironwood (TPU7x) SuperSlice ResourceFlavor (
superslice-rf): ResourceFlavor untuk sub-blok Ironwood (TPU7x) mencakup labelcloud.google.com/gke-tpu-accelerator: tpu7xagar cocok dengan node yang memiliki mesin Ironwood (TPU7x). - SuperSlice AdmissionCheck (
superslice-ac): pemeriksaan penerimaan ini memberi tahu Kueue untuk tidak menjadwalkan workload hingga pengontrol slice GKE mengonfirmasi bahwa slice telah aktif. Pemeriksaan penerimaan pertama-tama ditentukan, lalu ditambahkan keClusterQueueyang menangani workload pengirisan dinamis. - ClusterQueue (
cq) dan LocalQueue (lq): kolom ini mengelola resourcegoogle.com/tpu.cqClusterQueue mencakup pemeriksaan penerimaansuperslice-ac.nominalQuotauntukgoogle.com/tpudapat dikonfigurasi dengan dua cara:- Kuota spesifik: tetapkan
nominalQuotaagar sesuai dengan kapasitas yang ada untuk pengelolaan kuota dan pembagian yang adil. - Kuota tidak terbatas: tetapkan
nominalQuotake nilai yang sangat tinggi seperti"999999", untuk memodelkan kuota tidak terbatas. Untuk berfokus pada TAS dan pengelompokan dinamis, konfigurasi ini melewati fungsi pengelolaan kuota Kueue.
- Kuota spesifik: tetapkan
- Topologi slice dinamis Ironwood (TPU7x) (
Menentukan pilihan kesehatan sub-blok
Selain kondisi dan kesiapan node standar, GKE mengekspos status spesifik
setiap sub-blok menggunakan label cloud.google.com/gke-tpu-partition-4x4x4-state.
Label ini memungkinkan GKE memperhitungkan faktor-faktor yang memengaruhi pembentukan slice, seperti status link TPU.
Anda dapat menentukan nilai label cloud.google.com/gke-tpu-partition-4x4x4-state sebagai berikut:
HEALTHY: infrastruktur dalam kondisi baik.DEGRADED: infrastruktur sub-blok dalam kondisi menurun, misalnya, karena penurunan kualitas link OCS. Sub-blok masih dapat membentuk slice, tetapi performa keseluruhan mungkin lebih rendah dibandingkan dengan sub-blok yang sehat. Jika Anda dapat mentoleransi potensi penurunan performa, Anda dapat mengonfigurasi workload untuk menggunakan sub-blokDEGRADEDdengan menggunakan afinitas node, seperti yang ditunjukkan dalam Contoh 3.UNHEALTHY: sub-blok tidak berfungsi dengan baik dan tidak dapat membentuk slice.
Webhook Pengontrol Slice Kueue memvalidasi apakah workload menyertakan persyaratan kesehatan sub-blok tertentu. Jika tidak ada preferensi yang ditunjukkan, webhook akan menyisipkan afinitas node default.
Perilakunya adalah sebagai berikut:
- Jika
nodeSelectorataunodeAffinityyang menargetkan labelcloud.google.com/gke-tpu-partition-4x4x4-stateada, label tersebut tidak akan berubah. Jika tidak ada konfigurasi label seperti itu, webhook akan menyuntikkan afinitas node default berikut untuk memastikan hanya sub-blok yang tersedia yang digunakan:
nodeSelector: cloud.google.com/gke-tpu-partition-4x4x4-state: "HEALTHY"
Bagian berikut mencakup contoh saat label
cloud.google.com/gke-tpu-partition-4x4x4-state dikonfigurasi untuk menentukan
konfigurasi kesehatan sub-blok yang berbeda.
Menjalankan workload pengujian pada pengirisan dinamis dengan Kueue
Bagian ini menjelaskan cara men-deploy workload pada pengirisan dinamis dengan Kueue dan TAS. Contoh ini mencakup tiga contoh yang menunjukkan cara membuat workload slice dinamis dan workload yang terdiri dari beberapa slice. Workload dikirimkan sebagai JobSet.
Contoh 1: Workload tunggal menggunakan slice dinamis tunggal
Contoh berikut menjelaskan cara membuat beban kerja menggunakan slice dengan topologi
4x12x16, yang terdiri dari 12 sub-blok. Jumlah Pod dihitung sebagai: (4 * 12 * 16) / 4 chip per node = 192 Pod.
Simpan manifes berikut sebagai
big-super-slice.yaml:apiVersion: jobset.x-k8s.io/v1alpha2 kind: JobSet metadata: name: big-super-slice labels: kueue.x-k8s.io/queue-name: lq annotations: spec: replicatedJobs: - name: job-jax replicas: 1 template: spec: parallelism: 192 # pods per slice calculation: 4*12*16 / 4 = 192 completions: 192 backoffLimit: 10 template: metadata: annotations: cloud.google.com/gke-tpu-slice-topology: 4x12x16 spec: tolerations: - key: "google.com/tpu" operator: "Equal" value: "present" effect: "NoSchedule" nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu7x cloud.google.com/gke-tpu-partition-4x4x4-state: "HEALTHY" containers: - name: jax image: python:latest command: - bash - -c - | printenv pip install "jax[tpu]" -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("Global device count:", jax.device_count(), "Local device count:", jax.local_device_count())' resources: limits: google.com/tpu: 4 restartPolicy: NeverDalam manifes ini, anotasi berikut memberi tahu Kueue karakteristik slice dan topologi untuk mengonfigurasi berikut:
cloud.google.com/gke-tpu-slice-topology: menentukan"4x12x16"sebagai topologi slice dinamis. Persyaratan untuk topologi akseleratortpu7xmencakup aturan berikut:- Topologi minimum adalah
4x4x4. - Topologi harus berupa string tiga dimensi dalam format
AxBxC. Contoh,4x8x8. - Setiap dimensi (A, B, dan C) harus kelipatan empat.
- Dimensi harus diurutkan dalam urutan tidak menurun: A <= B <= C. Misalnya,
4x8x4tidak valid; seharusnya4x4x8. - Hasil perkalian dimensi (ABC) tidak boleh melebihi 9.216.
- Topologi slice terbesar yang didukung dapat mencakup hingga 32 sub-blok. Misalnya,
8x16x16dengan 32 sub-blok,8x12x20dengan 30 sub-blok, atau12x12x12dengan 27 sub-blok berada dalam batas yang diterima.
- Topologi minimum adalah
cloud.google.com/gke-tpu-accelerator: tpu7x: menjadwalkan Pod di VM yang menjalankan Ironwood (TPU7x).kueue.x-k8s.io/queue-name: menetapkan JobSet ke Kueue LocalQueue.
Terapkan manifes
big-super-slice.yaml:kubectl apply -f big-super-slice.yamlSetelah Anda menerapkan manifes, Kueue akan membuat
JobSetbernamabig-super-slice. Kemudian, Kueue mencoba membentuk satu slice dinamis dengan topologi4x12x16. Setelah slice aktif, Kueue akan menerima workload, dan 192 Pod dijadwalkan di node untuk membentuk slice dinamis yang menjalankan workload Anda.
Contoh 2: Workload dengan lebih dari satu replika
Contoh berikut menunjukkan cara membuat beban kerja yang menggunakan dua slice dinamis, yang masing-masing terdiri dari empat sub-blok.
Simpan manifes berikut sebagai
two-super-slices.yaml:apiVersion: jobset.x-k8s.io/v1alpha2 kind: JobSet metadata: name: two-super-slices labels: kueue.x-k8s.io/queue-name: lq annotations: spec: replicatedJobs: - name: job-jax replicas: 2 template: spec: parallelism: 64 # Pods per slice calculation: (4*8*8) / 4 = 64 completions: 64 backoffLimit: 10 template: metadata: annotations: cloud.google.com/gke-tpu-slice-topology: 4x8x8 spec: tolerations: - key: "google.com/tpu" operator: "Equal" value: "present" effect: "NoSchedule" nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu7x cloud.google.com/gke-tpu-partition-4x4x4-state: "HEALTHY" containers: - name: jax image: python:latest command: - bash - -c - | printenv pip install "jax[tpu]" -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("Global device count:", jax.device_count(), "Local device count:", jax.local_device_count())' resources: limits: google.com/tpu: 4 restartPolicy: NeverTerapkan manifes
two-super-slices.yaml:kubectl apply -f two-super-slices.yaml
Dalam manifes ini, Anda menetapkan replicas: 2 di kolom replicatedJobs.
Setelah Anda menerapkan manifes, Kueue akan mencoba membentuk dua slice terpisah dengan topologi 4x8x8. Kueue membuat slice dinamis untuk setiap replika yang ditentukan dalam jobset.spec.replicatedJobs[].replicas.
Jika n replika ditentukan, Kueue akan membuat n slice dinamis untuk beban kerja
dan menunggu hingga semua slice menjadi aktif sebelum mengizinkan beban kerja.
Contoh 3: Beban kerja dengan slice dinamis tunggal dan NodeAffinity
Mulai dari Kueue 0.15, Kueue mendukung NodeAffinity untuk pemilihan node TAS.
Fungsi ini dapat digunakan untuk memungkinkan node HEALTHY dan DEGRADED
menjadi bagian dari slice dinamis. Contoh berikut menunjukkan cara mengonfigurasi
beban kerja dengan slice dinamis tunggal dan NodeAffinity:
Simpan manifes berikut sebagai
slice-8x8x8-na.yaml:apiVersion: jobset.x-k8s.io/v1alpha2 kind: JobSet metadata: name: slice-8x8x8-na labels: kueue.x-k8s.io/queue-name: lq spec: replicatedJobs: - name: rj1 replicas: 1 template: spec: parallelism: 128 completions: 128 backoffLimit: 10 template: metadata: annotations: cloud.google.com/gke-tpu-slice-topology: 8x8x8 spec: tolerations: - key: "google.com/tpu" operator: "Equal" value: "present" effect: "NoSchedule" nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu7x affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-tpu-partition-4x4x4-state operator: In values: - "HEALTHY" - "DEGRADED" containers: - name: jax image: python:latest command: - bash - -c - | printenv pip install "jax[tpu]" -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("Global device count:", jax.device_count(), "Local device count:", jax.local_device_count())' resources: limits: google.com/tpu: 4 restartPolicy: NeverTerapkan manifes
slice-8x8x8-na.yaml:kubectl apply -f slice-8x8x8-na.yamlSetelah Anda menerapkan manifes, Kueue akan membuat
JobSetbernamaslice-8x8x8-na. Kemudian, Kueue mencoba membentuk satu slice dinamis dengan topologi8x8x8, yang memungkinkan nodeHEALTHYdanDEGRADEDdisertakan karena NodeAffinity yang ditentukan. Setelah slice aktif, Kueue akan menerima workload, dan 128 Pod akan dijadwalkan di node yang membentuk slice dinamis.
Memantau status slice
Untuk memeriksa status slice dinamis, jalankan perintah berikut:
kubectl describe slice SLICE_NAME
Ganti SLICE_NAME dengan nama slice Anda. Nama
slice biasanya berasal dari nama JobSet dan indeks replika. Untuk
Contoh 1, slice yang dibuat oleh Kueue akan memiliki nama yang mirip dengan
default-jobset-big-super-slice-yyyyy-job-jax-0.
Outputnya mirip dengan hal berikut ini:
Name: test-slice
Namespace:
Labels: <none>
Annotations: <none>
API Version: accelerator.gke.io/v1beta1
Kind: Slice
Metadata:
Creation Timestamp: 2026-02-12T23:44:28Z
Finalizers:
accelerator.gke.io/slice-finalizer
Generation: 1
Resource Version: 1770939905695871008
UID: 6dbbfe14-4486-4462-864d-e078d0ca8b5b
Spec:
Partition Ids:
5eae6a4f59d59cf30a9bf49de618eb2b
Topology: 4x4x4
Type: tpu7x
Status:
Conditions:
Last Transition Time: 2026-02-12T23:45:05Z
Message:
Reason: ACTIVE
Status: True
Type: Ready
Last Transition Time: 2026-02-12T23:45:05Z
Message: NodeLabelingCompleted
Reason: NodeLabelIsAdded
Status: True
Type: NodeLabeled
Events: <none>
Nama slice mematuhi aturan berikut untuk memastikan kompatibilitas dengan konvensi penamaan resource Compute Engine yang mendasarinya:
- Template:
{namespace}-jobset-{jobset.metadata.name}-kueueHash[5-character]-{jobset.spec.replicatedJobs[].name}-sliceIndex. - Panjang: nama terdiri dari 54 karakter atau kurang. Pengontrol menambahkan tanda hubung dan hash cluster 8 karakter untuk membuat nama resource Compute Engine, yang memiliki batas 63 karakter.
- Format: nama cocok dengan ekspresi reguler
^[a-z]([-a-z0-9]*[a-z0-9])?$. Nama tersebut memiliki karakteristik berikut:- Dimulai dengan huruf kecil.
- Hanya berisi huruf kecil, angka, dan tanda hubung (-).
- Diakhiri dengan huruf kecil atau angka (tidak boleh diakhiri dengan tanda hubung).
Pembersihan
Untuk menghindari tagihan yang tidak terduga, hapus slice Anda sebelum menghapus kumpulan node.
Hapus JobSet. Tindakan ini akan memicu Kueue untuk menghapus resource kustom Slice terkait.
kubectl delete jobset JOBSET_NAMEGanti
JOBSET_NAMEdengan nama JobSet Anda, misalnya,big-super-slice.Hapus TPU node pool:
gcloud container node-pools delete NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION
(Opsional) Menggunakan pengirisan dinamis dengan penjadwal Anda sendiri
Dokumen ini berfokus pada penggunaan Kueue dan TAS. Namun, Anda juga dapat mengelola pengirisan dinamis dengan penjadwal kustom Anda sendiri. Jika Anda memilih untuk menggunakan penjadwal lain, ikuti informasi referensi Slice custom resource.
Langkah berikutnya
- Pelajari TPU Cluster Director lebih lanjut.
- Pelajari cara Mengelola peristiwa pemeliharaan dengan TPU dalam mode Semua Kapasitas.