Memecahkan masalah TPU di GKE


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

Jika Anda memerlukan bantuan lainnya, hubungi Cloud Customer Care.

Kuota tidak cukup untuk memenuhi permintaan TPU

Error yang mirip dengan Insufficient quota to satisfy the request menunjukkan bahwa project Google Cloud Anda tidak memiliki kuota yang tersedia tidak cukup untuk memenuhi permintaan.

Untuk mengatasi masalah ini, periksa batas kuota project Anda dan penggunaan saat ini. Jika perlu, minta penambahan kuota TPU Anda.

Memeriksa batas kuota dan penggunaan saat ini

Untuk memeriksa batas dan penggunaan kuota Compute Engine API Anda saat ini untuk TPU, ikuti langkah-langkah berikut:

  1. Buka halaman Kuota di Konsol Google Cloud:

    Buka Quotas

  2. Di kotak Filter , lakukan hal berikut:

    1. Pilih properti Layanan, masukkan Compute Engine API, lalu tekan Enter.

    2. Pilih properti Jenis, lalu pilih Kuota.

    3. Pilih properti Dimension (e.g. locations) dan masukkan region: diikuti dengan nama region tempat Anda berencana membuat TPU di GKE. Misalnya, masukkan region:us-west4 jika Anda berencana untuk membuat node TPU di zona us-west4-a. Kuota TPU bersifat regional, sehingga semua zona dalam region yang sama menggunakan kuota TPU yang sama.

Jika tidak ada kuota yang cocok dengan filter yang Anda masukkan, berarti project belum diberi kuota yang ditentukan untuk region yang diinginkan, dan Anda harus meminta peningkatan kuota TPU.

Terjadi error saat mengaktifkan penyediaan otomatis node di kumpulan node TPU

Error berikut terjadi saat Anda mengaktifkan penyediaan otomatis node di cluster GKE yang tidak mendukung TPU.

Pesan errornya mirip dengan yang berikut ini:

ERROR: (gcloud.container.clusters.create) ResponseError: code=400,
  message=Invalid resource: tpu-v4-podslice.

Untuk mengatasi masalah ini, upgrade cluster GKE Anda ke versi 1.27.6 atau yang lebih baru.

GKE tidak menyediakan node TPU secara otomatis

Bagian berikut menjelaskan kasus saat GKE tidak menyediakan node TPU secara otomatis dan cara memperbaikinya.

Batasi kesalahan konfigurasi

GKE tidak menyediakan node TPU secara otomatis jika batas penyediaan otomatis yang Anda tetapkan untuk cluster terlalu rendah. Anda mungkin melihat error berikut dalam skenario berikut:

  • Jika kumpulan node TPU ada, tetapi GKE tidak dapat meningkatkan skala node karena melanggar batas resource, Anda dapat melihat pesan error berikut saat menjalankan perintah kubectl get events:

    11s Normal NotTriggerScaleUp pod/tpu-workload-65b69f6c95-ccxwz pod didn't
    trigger scale-up: 1 node(s) didn't match Pod's node affinity/selector, 1 max
    cluster cpu, memory limit reached
    

    Selain itu, dalam skenario ini, Anda dapat melihat pesan peringatan yang mirip dengan berikut ini di Konsol Google Cloud:

    "Your cluster has one or more unschedulable Pods"
    
  • Saat GKE mencoba menyediakan kumpulan node TPU yang melebihi batas resource secara otomatis, log visibilitas penskalaan otomatis cluster akan menampilkan pesan error berikut:

    messageId: "no.scale.up.nap.pod.zonal.resources.exceeded"
    

    Selain itu, dalam skenario ini, Anda dapat melihat pesan peringatan yang mirip dengan berikut ini di Konsol Google Cloud:

    "Can't scale up because node auto-provisioning can't provision a node pool for
    the Pod if it would exceed resource limits"
    

Untuk mengatasi masalah ini, tingkatkan jumlah maksimum chip TPU, inti CPU, dan memori dalam cluster.

Untuk menyelesaikan langkah-langkah ini:

  1. Menghitung kebutuhan resource untuk jenis dan jumlah mesin TPU tertentu. Perhatikan bahwa Anda perlu menambahkan resource untuk kumpulan node non-TPU, seperti beban kerja sistem.
  2. Dapatkan deskripsi TPU, CPU, dan memori yang tersedia untuk jenis dan zona mesin tertentu. Gunakan gcloud CLI:

    gcloud compute machine-types describe MACHINE_TYPE \
        --zone COMPUTE_ZONE
    

    Ganti kode berikut:

    • MACHINE_TYPE: Jenis mesin yang akan ditelusuri.
    • COMPUTE_ZONE: Nama zona komputasi.

    Outputnya mencakup baris deskripsi yang mirip dengan berikut ini:

      description: 240 vCPUs, 407 GB RAM, 4 Google TPUs
      ```
    
  3. Hitung jumlah total CPU dan memori dengan mengalikan jumlah ini dengan jumlah node yang diperlukan. Misalnya, jenis mesin ct4p-hightpu-4t menggunakan 240 core CPU dan RAM 407 GB dengan 4 chip TPU. Dengan asumsi bahwa Anda memerlukan 20 chip TPU, yang sesuai dengan lima node, Anda harus menentukan nilai berikut:

    • --max-accelerator=type=tpu-v4-podslice,count=20.
    • CPU = 1200 (240 kali 5)
    • memory = 2035 (407 kali 5)

    Anda harus menentukan batas dengan beberapa margin untuk mengakomodasi node non-TPU seperti workload sistem.

  4. Perbarui batas cluster:

    gcloud container clusters update CLUSTER_NAME \
        --max-accelerator type=TPU_ACCELERATOR \
        count=MAXIMUM_ACCELERATOR \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY
    

    Ganti kode berikut:

    • CLUSTER_NAME: Nama cluster.
    • TPU_ACCELERATOR: Nama akselerator TPU.
    • MAXIMUM_ACCELERATOR: Jumlah maksimum chip TPU dalam cluster.
    • MAXIMUM_CPU: Jumlah maksimum core dalam cluster.
    • MAXIMUM_MEMORY: Jumlah maksimum gigabyte memori di cluster.

Kesalahan konfigurasi workload

Error ini terjadi karena kesalahan konfigurasi beban kerja. Berikut adalah beberapa penyebab error yang paling umum:

  • Label cloud.google.com/gke-tpu-accelerator dan cloud.google.com/gke-tpu-topology salah atau tidak ada dalam spesifikasi Pod. GKE tidak akan menyediakan kumpulan TPU node, dan penyediaan otomatis node tidak akan dapat meningkatkan skala cluster.
  • Spesifikasi Pod tidak menentukan google.com/tpu dalam persyaratan resource-nya.

Untuk mengatasi masalah ini, lakukan salah satu langkah berikut:

  1. Pastikan tidak ada label yang tidak didukung di pemilih node beban kerja Anda. Misalnya, pemilih node untuk label cloud.google.com/gke-nodepool akan mencegah GKE membuat kumpulan node tambahan untuk Pod Anda.
  2. Pastikan spesifikasi template Pod, tempat workload TPU Anda berjalan, menyertakan nilai berikut:
    • Label cloud.google.com/gke-tpu-accelerator dan cloud.google.com/gke-tpu-topology di nodeSelector-nya.
    • google.com/tpu dalam permintaannya.

Untuk mempelajari cara men-deploy workload TPU di GKE, lihat Menjalankan beban kerja yang menampilkan jumlah chip TPU yang tersedia di kumpulan node TPU.

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

Masalah berikut terjadi ketika GKE tidak dapat menjadwalkan Pod yang meminta TPU pada node TPU. Misalnya, hal ini dapat terjadi jika beberapa Pod non-TPU sudah dijadwalkan pada node TPU.

Pesan error yang dimunculkan sebagai peristiwa FailedScheduling di Pod mirip dengan pesan berikut:

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 mengatasi masalah ini, lakukan langkah 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 ketika GKE tidak dapat menyediakan workload TPU baru karena kurangnya izin untuk mengakses perangkat TPU.

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

Izin ditolak selama pembuatan cluster di us-central2

Jika Anda mencoba membuat cluster di us-central2 (satu-satunya region tempat TPU v4 tersedia), Anda mungkin akan melihat pesan error yang mirip dengan berikut ini:

ERROR: (gcloud.container.clusters.create) ResponseError: code=403,
message=Permission denied on 'locations/us-central2' (or it may not exist).

Error ini terjadi karena wilayah us-central2 adalah wilayah pribadi.

Untuk mengatasi masalah ini, ajukan kasus dukungan atau hubungi tim akun Anda untuk meminta us-central2 ditampilkan dalam project Google Cloud.

Kuota tidak mencukupi selama pembuatan kumpulan node TPU di us-central2

Jika Anda mencoba membuat kumpulan node TPU di us-central2 (satu-satunya wilayah tempat TPU v4 tersedia), Anda mungkin perlu meningkatkan kuota terkait GKE berikut saat pertama kali membuat node pool TPU v4:

  • Kuota Persistent Disk SSD (GB) di us-central2: Boot disk setiap node Kubernetes memerlukan ukuran 100 GB secara default. Oleh karena itu, kuota ini harus ditetapkan setidaknya setinggi hasil dari jumlah maksimum node GKE yang Anda perkirakan akan dibuat di us-central2 dan 100 GB (maximum_nodes X 100 GB).
  • Kuota alamat IP yang sedang digunakan di us-central2: Setiap node Kubernetes menggunakan satu alamat IP. Oleh karena itu, kuota ini harus ditetapkan setidaknya setinggi jumlah maksimum node GKE yang diperkirakan akan dibuat di us-central2.

Subnet tidak ada selama pembuatan cluster GKE

Jika Anda mencoba membuat cluster di us-central2 (satu-satunya region tempat TPU v4 tersedia), Anda mungkin akan melihat pesan error yang mirip dengan berikut ini:

ERROR: (gcloud.container.clusters.create) ResponseError: code=404,
message=Not found: project <PROJECT> does not have an auto-mode subnetwork
for network "default" in region <REGION>.

Jaringan VPC diperlukan untuk menyediakan konektivitas ke node GKE Anda. Namun, di region tertentu seperti us-central2, subnet default mungkin tidak dibuat, bahkan saat Anda menggunakan jaringan VPC default dalam mode otomatis (untuk pembuatan subnet).

Untuk mengatasi masalah ini, pastikan Anda telah membuat subnet kustom di region tersebut sebelum membuat cluster GKE. Subnet ini tidak boleh tumpang tindih dengan subnet lain yang dibuat di region lain pada jaringan VPC yang sama.

Langkah selanjutnya

Jika Anda memerlukan bantuan lainnya, hubungi Cloud Customer Care.