Memecahkan masalah TPU di GKE


Halaman ini menunjukkan cara menyelesaikan masalah terkait TPU di Google Kubernetes Engine (GKE).

Menjadwalkan error saat men-deploy Pod yang menggunakan TPU di GKE

Masalah berikut terjadi saat GKE tidak menjadwalkan Pod baru.

Pesan errornya mirip dengan yang berikut ini:

Cannot schedule pods: Preemption is not helpful for scheduling.

Error message: 0/2 nodes are available: 2 node(s) had untolerated taint
{google.com/tpu: present}. preemption: 0/2 nodes are available: 2 Preemption is
not helpful for scheduling

Untuk menyelesaikan masalah ini, lakukan tindakan berikut:

Pastikan Anda memiliki setidaknya satu node pool CPU di cluster sehingga Pod penting sistem dapat berjalan di node non-TPU. Untuk mempelajari lebih lanjut, lihat Men-deploy Pod ke node pool tertentu.

Inisialisasi TPU gagal

Masalah berikut terjadi saat GKE tidak menyediakan workload TPU baru.

Pesan errornya mirip dengan yang berikut ini:

TPU platform initialization failed: FAILED_PRECONDITION: Couldn't mmap: Resource
temporarily unavailable.; Unable to create Node RegisterInterface for node 0,
config: device_path: "/dev/accel0" mode: KERNEL debug_data_directory: ""
dump_anomalies_only: true crash_in_debug_dump: false allow_core_dump: true;
could not create driver instance

Untuk mengatasi masalah ini, pastikan Anda menjalankan container TPU dalam mode dilindungi atau meningkatkan ulimit di dalam container.

Deadlock penjadwalan

Dua atau beberapa penjadwalan Tugas mungkin gagal dalam deadlock. Misalnya, dalam skenario saat semua hal berikut terjadi:

  • Anda memiliki dua Tugas (Tugas A dan Tugas B) dengan aturan afinitas Pod. GKE menjadwalkan slice TPU untuk kedua Tugas dengan topologi TPU v4-32.
  • Anda memiliki dua slice TPU v4-32 di cluster.
  • Cluster Anda memiliki kapasitas yang cukup untuk menjadwalkan Tugas dan, secara teori, setiap Tugas dapat dijadwalkan dengan cepat di setiap slice TPU.
  • Scheduler Kubernetes menjadwalkan satu Pod dari Tugas A pada satu slice, lalu menjadwalkan satu Pod dari Tugas B di slice yang sama.

Dalam hal ini, dengan mempertimbangkan aturan afinitas Pod untuk Tugas A, scheduler akan mencoba menjadwalkan semua Pod yang tersisa untuk Tugas A dan Tugas B, pada tiap slice TPU. Akibatnya, GKE tidak akan dapat sepenuhnya menjadwalkan Tugas A atau Tugas B. Oleh karena itu, status kedua Tugas akan tetap Tertunda.

Untuk mengatasi masalah ini, gunakan anti-afinitas Pod dengan cloud.google.com/gke-nodepool sebagai topologyKey, seperti ditunjukkan dalam contoh berikut:

apiVersion: batch/v1
kind: Job
metadata:
 name: pi
spec:
 parallelism: 2
 template:
   metadata:
     labels:
       job: pi
   spec:
     affinity:
       podAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
             matchExpressions:
             - key: job
               operator: In
               values:
               - pi
           topologyKey: cloud.google.com/gke-nodepool
       podAntiAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
             matchExpressions:
             - key: job
               operator: NotIn
               values:
               - pi
           topologyKey: cloud.google.com/gke-nodepool
           namespaceSelector:
             matchExpressions:
             - key: kubernetes.io/metadata.name
               operator: NotIn
               values:
               - kube-system
     containers:
     - name: pi
       image: perl:5.34.0
       command: ["sleep",  "60"]
     restartPolicy: Never
 backoffLimit: 4

Kuota tidak cukup untuk memenuhi permintaan TPU

Peristiwa penjadwalan pod atau penskalaan node dapat menunjukkan kapasitas kuota habis, meskipun project Google Cloud Anda memiliki kuota TPU yang tersedia.

Untuk mengatasi masalah ini, mintalah peningkatan kuota TPU dengan menghubungi perwakilan akun Google Cloud Anda. Cloud TPU dan GKE menggunakan kuota berikut saat menyediakan TPU:

  • Semua resource Cloud TPU yang disediakan menggunakan Cloud TPU API akan mengurangi kuota tpus.googleapis.com.
  • Setiap resource GKE yang disediakan menggunakan Compute Engine API akan mengurangi kuota compute.googleapis.com.