Memecahkan masalah GPU di GKE


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

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Penginstalan driver GPU

Bagian ini memberikan informasi pemecahan masalah untuk penginstalan driver perangkat NVIDIA otomatis di GKE.

Penginstalan driver gagal di node Ubuntu

Jika Anda menggunakan node Ubuntu yang telah memasang GPU L4 atau GPU H100, driver GPU default yang diinstal GKE mungkin tidak sama dengan atau lebih baru dari versi yang diperlukan untuk GPU tersebut. Akibatnya, Pod plugin perangkat GPU tetap terjebak dalam status Tertunda dan beban kerja GPU Anda di node tersebut mungkin mengalami masalah.

Untuk mengatasi masalah ini, sebaiknya upgrade ke versi GKE berikut yang menginstal driver GPU versi 535 sebagai driver default:

  • 1.26.15-gke.1483000 dan yang lebih baru
  • 1.27.15-gke.1039000 dan yang lebih baru
  • 1.28.11-gke.1044000 dan yang lebih baru
  • 1.29.6-gke.1073000 dan yang lebih baru
  • 1.30.2-gke.1124000 dan yang lebih baru

Atau, Anda dapat menginstal driver versi 535 atau yang lebih baru secara manual dengan menjalankan perintah berikut:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml

Plugin perangkat GPU gagal dengan error CrashLoopBackOff

Masalah berikut terjadi jika Anda menggunakan metode penginstalan driver manual di node pool sebelum 25 Januari 2023, lalu mengupgrade node pool ke versi GKE yang mendukung penginstalan driver otomatis. Kedua workload penginstalan ada secara bersamaan dan mencoba menginstal versi driver yang bertentangan di node Anda.

Penampung init plugin perangkat GPU gagal dengan status Init:CrashLoopBackOff. Log untuk penampung mirip dengan yang berikut ini:

failed to verify installation: failed to verify GPU driver installation: exit status 18

Untuk mengatasi masalah ini, coba metode berikut:

  • Hapus DaemonSet penginstalan driver manual dari cluster Anda. Tindakan ini akan menghapus workload penginstalan yang bertentangan dan memungkinkan GKE menginstal driver ke node Anda secara otomatis.

    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    
  • Terapkan ulang manifes DaemonSet penginstalan driver manual ke cluster Anda. Pada 25 Januari 2023, kami memperbarui manifes untuk mengabaikan node yang menggunakan penginstalan driver otomatis.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    
  • Nonaktifkan penginstalan driver otomatis untuk node pool Anda. DaemonSet penginstalan driver yang ada akan berfungsi seperti yang diharapkan setelah operasi update selesai.

    gcloud container node-pools update POOL_NAME \
        --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=disabled \
        --cluster=CLUSTER_NAME \
        --location=LOCATION
    

    Ganti kode berikut:

    • POOL_NAME: nama node pool.
    • GPU_TYPE: jenis GPU yang sudah digunakan node pool.
    • GPU_COUNT: jumlah GPU yang sudah dipasang ke node pool.
    • CLUSTER_NAME: nama cluster GKE yang berisi node pool.
    • LOCATION: lokasi Compute Engine cluster.

Error: "Image container cos-nvidia-installer:fixed tidak ada dengan kebijakan pull Never." atau "Image container ubuntu-nvidia-installer:fixed tidak ada dengan kebijakan pull Never."

Masalah ini terjadi saat Pod nvidia-driver-installer berada dalam status PodInitializing dan perangkat plugin GPU atau Pod penginstal driver GPU melaporkan error berikut. Pesan error tertentu bergantung pada sistem operasi yang berjalan di node Anda:

COS

Container image "cos-nvidia-installer:fixed" is not present with pull policy of Never.

Ubuntu

Container image "gke-nvidia-installer:fixed" is not present with pull policy of Never.

Masalah ini dapat terjadi saat pengumpulan sampah menghapus image driver NVIDIA yang dimuat sebelumnya untuk mengosongkan ruang di node. Saat Pod driver dibuat ulang atau penampung dimulai ulang, GKE tidak akan dapat menemukan image yang dimuat sebelumnya.

Untuk mengurangi masalah pembersihan sampah saat Anda menjalankan COS, upgrade node GKE ke salah satu versi berikut yang berisi perbaikan:

  • 1.25.15-gke.1040000 dan yang lebih baru
  • 1.26.10-gke.1030000 dan yang lebih baru
  • 1.27.6-gke.1513000 dan yang lebih baru
  • 1.28.3-gke.1061000 dan yang lebih baru

Jika node Anda menjalankan Ubuntu, belum ada perbaikan yang tersedia untuk masalah pengumpulan sampah ini. Untuk memitigasi masalah ini di Ubuntu, Anda dapat menjalankan penampung berhak istimewa yang berinteraksi dengan host untuk memastikan penyiapan driver GPU NVIDIA yang benar. Untuk melakukannya, jalankan sudo /usr/local/bin/nvidia-container-first-boot dari node Anda atau terapkan manifes berikut:

apiVersion: v1
kind: Pod
metadata:
  name: gke-nvidia-installer-fixup
spec:
  nodeSelector:
    cloud.google.com/gke-os-distribution: ubuntu
  hostPID: true
  containers:
  - name: installer
    image: ubuntu
    securityContext:
      privileged: true
    command:
      - nsenter
      - -at
      - '1'
      - --
      - sh
      - -c
      - "/usr/local/bin/nvidia-container-first-boot"
  restartPolicy: Never

Penyebab potensial lainnya dari masalah ini adalah saat image driver NVIDIA hilang setelah node dimulai ulang atau pemeliharaan host. Hal ini dapat terjadi pada node rahasia, atau node dengan GPU, yang menggunakan penyimpanan SSD lokal sementara. Dalam situasi ini, GKE memuat ulang image container nvidia-installer-driver di node dan memindahkannya dari disk booting ke SSD lokal saat booting pertama.

Untuk mengonfirmasi bahwa ada peristiwa pemeliharaan host, gunakan filter log berikut:

resource.type="gce_instance"
protoPayload.serviceName="compute.googleapis.com"
log_id("cloudaudit.googleapis.com/system_event")

Untuk mengurangi masalah pemeliharaan host, upgrade versi GKE Anda ke salah satu versi berikut:

  • 1.27.13-gke.1166000 dan yang lebih baru
  • 1.29.3-gke.1227000 dan yang lebih baru
  • 1.28.8-gke.1171000 dan yang lebih baru

Error: gagal mengonfigurasi direktori penginstalan driver GPU: gagal membuat overlay lib64: gagal membuat direktori /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: bukan direktori.

Anda mengalami error ini dari penampung penginstal driver GPU di dalam plugin perangkat GPU saat fastsocket NCCL diaktifkan:

failed to configure GPU driver installation dirs: failed to create lib64 overlay: failed to create dir /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: not a directory.

Masalah ini hanya terjadi pada cluster dan node yang menjalankan GKE 1.28 dan 1.29.

Masalah ini disebabkan oleh kondisi perlombaan fastsocket NCCL dengan penginstal driver GPU.

Untuk mengurangi masalah ini, upgrade versi GKE Anda ke salah satu versi berikut:

  • 1.28.8-gke.1206000 dan yang lebih baru
  • 1.29.3-gke.1344000 dan yang lebih baru

Error: Gagal mendapatkan perangkat untuk nvidia0: perangkat nvidia0 tidak ditemukan.

Error berikut menunjukkan bahwa XID 62 dan RmInitAdapter gagal untuk GPU dengan minor 0:

Failed to get device for nvidia0: device nvidia0 not found.

Driver NVIDIA versi 525.105.17 memiliki bug yang dapat menyebabkan error komunikasi (XID) dan mencegah GPU melakukan inisialisasi dengan benar, yang menyebabkan kegagalan untuk melakukan inisialisasi GPU.

Untuk memperbaiki masalah ini, upgrade driver NVIDIA ke driver versi 525.110.11 atau yang lebih baru.

Mereset GPU di VM A3

Beberapa masalah mungkin mengharuskan Anda mereset GPU di VM A3.

Untuk mereset GPU, ikuti langkah-langkah berikut:

  1. Hapus Pod yang meminta resource GPU dari node tempat Anda perlu mereset GPU.

  2. Nonaktifkan plugin perangkat GPU di node:

    kubectl get nodes \
        --selector=kubernetes.io/hostname=NODE_NAME \
        --no-headers | awk '{print $1}' \
        | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=true
    

    Ganti NODE_NAME dengan nama node.

  3. Hubungkan ke VM yang mendukung node.

  4. Dalam sesi SSH, reset GPU:

    /home/kubernetes/bin/nvidia/bin/nvidia-smi --gpu-reset
    
  5. Aktifkan kembali plugin perangkat GPU:

    kubectl get nodes --selector=kubernetes.io/hostname=NODE_NAME \
        --no-headers \| awk '{print $1}' \
        | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=false \
        --overwrite
    

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.