Halaman ini menunjukkan cara menyelesaikan masalah terkait GPU di Google Kubernetes Engine (GKE).
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 memiliki GPU L4, H100, atau H200 yang terpasang, 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 workload GPU Anda di node tersebut mungkin mengalami masalah.
Untuk mengatasi masalah ini pada GPU L4 dan H100, 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
Untuk mengatasi masalah ini pada GPU H200, Anda harus menginstal driver versi 550 atau yang lebih baru secara manual dengan menjalankan perintah berikut:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R550.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 dan kemudian 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 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 secara otomatis ke node Anda.
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 terpasang 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 pengumpul sampah menghapus image driver NVIDIA yang telah dimuat sebelumnya untuk mengosongkan ruang di node. Jika Pod driver dibuat ulang atau container-nya dimulai ulang, GKE tidak akan dapat menemukan image yang telah dimuat sebelumnya.
Untuk mengurangi masalah pengumpulan sampah saat Anda menjalankan COS, upgrade node GKE Anda 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 mengatasi masalah ini di Ubuntu, Anda dapat menjalankan penampung
dengan hak istimewa yang berinteraksi dengan host untuk memastikan penyiapan yang benar
driver GPU NVIDIA. 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 lain yang mungkin terjadi adalah saat image driver NVIDIA hilang
setelah node di-reboot 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 terlebih dahulu image container nvidia-installer-driver
di node dan memindahkannya dari boot disk 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 container 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 persaingan 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
Untuk mengetahui informasi selengkapnya, baca Catatan Rilis GPUDirect-TCPXO.
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 diinisialisasi dengan benar, sehingga menyebabkan kegagalan menginisialisasi GPU.
Untuk memperbaiki masalah ini, upgrade driver NVIDIA ke versi driver 525.110.11 atau yang lebih baru.
Mereset GPU pada VM A3
Beberapa masalah mungkin mengharuskan Anda mereset GPU di VM A3.
Untuk mereset GPU, ikuti langkah-langkah berikut:
Hapus Pod yang meminta resource GPU dari node tempat Anda perlu mereset GPU.
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.Hubungkan ke VM yang mendukung node.
Di sesi SSH, reset GPU:
/home/kubernetes/bin/nvidia/bin/nvidia-smi --gpu-reset
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
GPU di Confidential GKE Nodes
Bagian berikut menunjukkan cara mengidentifikasi dan memperbaiki masalah pada GPU yang berjalan di Confidential GKE Node.
Workload GPU tidak dijadwalkan di Confidential GKE Node
Node GKE Rahasia mengharuskan Anda menginstal driver GPU secara manual yang sesuai dengan jenis GPU yang Anda pilih dan versi GKE Anda.
Jika Pod GPU Anda tidak dijadwalkan di Node GKE Rahasia dan tetap dalam status Pending
, jelaskan DaemonSet penginstalan driver:
kubectl --namespace=kube-system get daemonset nvidia-driver-installer -o yaml
Jika output menampilkan error NotFound
,
instal driver.
Jika DaemonSet berjalan, output-nya akan mirip dengan berikut ini:
apiVersion: apps/v1
kind: DaemonSet
# lines omitted for clarity
spec:
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: nvidia-driver-installer
template:
metadata:
creationTimestamp: null
labels:
k8s-app: nvidia-driver-installer
name: nvidia-driver-installer
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-accelerator
operator: Exists
- key: cloud.google.com/gke-gpu-driver-version
operator: DoesNotExist
- key: cloud.google.com/gke-confidential-nodes-instance-type
operator: In
values:
- TDX
Di output ini, verifikasi bahwa kolom nodeAffinity
berisi kunci
cloud.google.com/gke-confidential-nodes-instance-type
. Jika output
tidak berisi kunci ini, DaemonSet penginstalan driver tidak mendukung
Node GKE Rahasia.
Deploy DaemonSet yang mendukung GPU di Confidential GKE Node:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/nvidia-driver-installer/cos/daemonset-confidential.yaml
Setelah menginstal driver, periksa apakah workload GPU Anda dimulai dengan berhasil.
Error: Gagal mengalokasikan vektor perangkat
Pesan error berikut dalam log container GPU Anda menunjukkan bahwa GPU telah dilepas dari instance VM node:
Failed to allocate device vector A (error code unknown error)!
Pelepasan ini dapat terjadi karena error hardware atau karena masalah pada kunci enkripsi.
Untuk mengatasi masalah ini, mulai ulang instance node. Operasi ini mengganggu, dan memengaruhi semua beban kerja di node tersebut. Untuk memulai ulang instance, lakukan langkah-langkah berikut:
Dapatkan nama node yang menjalankan Pod GPU:
kubectl get pod POD_NAME -o yaml | grep "nodeName"
Ganti
POD_NAME
dengan nama Pod yang gagal.Outputnya mirip dengan hal berikut ini:
nodeName: gke-cluster-1-default-pool-b7asdfbt-fd3e
Reset instance Compute Engine:
gcloud compute instances reset NODE_NAME
Ganti
NODE_NAME
dengan nama node dari output langkah sebelumnya.gcloud CLI akan mencari VM dengan nama tersebut di project aktif Anda. Jika Anda melihat perintah untuk memilih zona, tentukan
Y
.Periksa apakah beban kerja GPU Anda berjalan tanpa error.
Error: Dekripsi gagal dengan error -74
Pesan error berikut di log node Anda menunjukkan bahwa kunci enkripsi untuk GPU hilang:
Decryption failed with error -74
Error ini terjadi saat daemon persistensi NVIDIA, yang berjalan di instance VM node, gagal. Jika Anda melihat pesan error ini, reset instance:
gcloud compute instances reset NODE_NAME
Ganti NODE_NAME
dengan nama node yang gagal.
gcloud CLI akan mencari VM dengan nama tersebut di project aktif Anda. Jika Anda melihat perintah untuk memilih zona, tentukan Y
.
Jika mereset instance tidak menyelesaikan masalah ini, hubungi Cloud Customer Care atau kirimkan bug produk. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan dukungan.
Menemukan error XID
Daemonset gpu-device-plugin
berjalan dalam namespace kube-system
dan bertanggung jawab atas hal berikut:
- Penjadwalan workload GPU: mengalokasikan resource GPU ke Pod.
- Pemeriksaan kondisi GPU: memantau kondisi GPU Anda.
- Pengumpulan metrik GPU: mengumpulkan metrik terkait GPU, seperti siklus tugas dan penggunaan memori.
gpu-device-plugin
menggunakan NVIDIA Management Library (NVML) untuk mendeteksi error XID. Jika terjadi error XID, Pod gpu-device-plugin
yang berjalan di node yang terpengaruh akan mencatat error tersebut. Anda akan menemukan dua jenis log error XID:
- Error XID non-kritis:
- Format log:
Skip error Xid=%d as it is not Xid Critical
- Artinya: Error ini dianggap tidak kritis. Masalah ini dapat disebabkan oleh berbagai masalah software atau hardware.
- Tindakan: GKE tidak melakukan tindakan otomatis untuk error XID non-kritis.
- Format log:
- Error XID kritis:
- Format log:
XidCriticalError: Xid=%d, All devices will go unhealthy
- Artinya: Error ini menunjukkan masalah hardware GPU.
- Tindakan:
- GKE menandai resource GPU node sebagai tidak responsif.
- GKE mencegah workload GPU dijadwalkan di node.
- Jika perbaikan otomatis node diaktifkan, GKE akan membuat ulang node.
- Format log:
Masalah GPUDirect-TCPX(O)
Bagian ini memberikan informasi pemecahan masalah untuk masalah GPUDirect-TCPX(O).
Catatan rilis dan petunjuk upgrade
Untuk pengguna baru, Memaksimalkan bandwidth jaringan GPU di cluster mode Standard memberikan panduan tentang cara menggunakan GPUDirect-TCPX(O). Untuk pengguna lama, baca Catatan Rilis GPUDirect-TCPXO untuk mengetahui informasi rilis dan petunjuk upgrade, karena versi baru dirilis secara berkelanjutan.
Men-debug dengan log NCCL
Jika Anda tidak dapat menyelesaikan masalah dengan NCCL, kumpulkan log NCCL dengan informasi debug. Log ini berisi informasi berharga tentang operasi NCCL dan dapat membantu Anda menemukan sumber masalah. Jika Anda tidak dapat menyelesaikan masalah, kumpulkan log ini sebelum Anda membuka kasus dengan Cloud Customer Care. Log ini dapat membantu Cloud Customer Care menyelesaikan masalah Anda dengan lebih cepat.
Untuk membuat dan mengumpulkan log, selesaikan langkah-langkah berikut:
Tetapkan variabel lingkungan berikut di dalam manifes aplikasi atau Pod Anda:
NCCL_DEBUG=INFO NCCL_DEBUG_SUBSYS=INIT,NET,ENV,COLL,GRAPH NCCL_DEBUG_FILE=/DIRECTORY/FILE_NAME.%h.%p
Untuk mengetahui informasi selengkapnya tentang variabel lingkungan ini, baca mengumpulkan log debug NCCL.
Untuk membuat data bagi log Anda, jalankan NCCL test. Cara menjalankan pengujian ini bergantung pada jenis cluster yang Anda gunakan. Untuk cluster GKE, Anda dapat men-deploy dan menjalankan pengujian NCCL dengan Penjadwalan yang Mendeteksi Topologi (TAS). Setelah Anda menjalankan pengujian NCCL, NCCL akan otomatis membuat log di semua node yang berpartisipasi.
Kumpulkan log dari semua node. Verifikasi bahwa Anda telah mengumpulkan log NCCL dari semua node dengan memverifikasi bahwa log berisi informasi berikut:
- Nama host semua VM yang terlibat dalam workload.
- PID semua proses yang relevan di VM.
- Peringkat semua GPU yang digunakan oleh beban kerja di setiap VM.
Jika Anda tidak yakin di mana file log berada, contoh berikut menunjukkan tempat NCCL membuat file log saat variabel
NCCL_DEBUG_FILE
disetel ke/tmp/nccl_log.%h.%p
. Anda memiliki dua VM bernamaa3plus-vm-1
dana3plus-vm-2
, dan setiap VM menjalankan delapan proses dalam container workload. Dalam skenario ini, NCCL membuat file log berikut di direktori/tmp
dalam container beban kerja di setiap VM:- Di
a3plus-vm-1
: delapan file log bernamanccl_log.a3plus-vm-1.PID
, denganPID
adalah ID proses. - Di
a3plus-vm-2
: delapan file log bernamanccl_log.a3plus-vm-2.PID
.
Tinjau log. Entri log NCCL memiliki format berikut:
HOSTNAME:PID:TID [RANK] NCCL_MESSAGE
Entri log ini berisi nilai-nilai berikut:
HOSTNAME
: nama host VM. Nilai ini mengidentifikasi VM mana yang digunakan saat NCCL membuat entri log.PID
: PID. Nilai ini mengidentifikasi proses mana yang menghasilkan entri log.TID
: ID thread. Nilai ini mengidentifikasi thread mana dalam proses yang digunakan saat NCCL membuat entri log.RANK
: ID peringkat lokal. Nilai ini mengidentifikasi GPU mana yang digunakan saat NCCL membuat entri log. Peringkat diberi nomor dari 0-N, dengan N adalah jumlah total GPU yang terlibat dalam proses. Misalnya, jika workload Anda berjalan dengan delapan GPU per VM, maka setiap VM harus memiliki delapan nilai peringkat yang berbeda (0-7).NCCL_MESSAGE
: pesan deskriptif yang memberikan informasi lebih lanjut tentang peristiwa dan menyertakan stempel waktu saat NCCL membuat log.
Contoh:
gke-a3plus-mega-np-2-aa33fe53-7wvq:1581:1634 [1] NCCL INFO 00:09:24.631392: NET/FasTrak plugin initialized.
Contoh ini memiliki nilai berikut:
gke-a3plus-mega-np-2-aa33fe53-7wvq
: nama host.1581
: ID proses.1634
: ID thread.1
: ID peringkat lokal.NCCL INFO 00:09:24.631392: NET/FasTrak plugin initialized.
: pesan yang menjelaskan apa yang terjadi.
Jika Anda membuka kasus dukungan, kemas log yang Anda kumpulkan, bersama dengan output pengujian NCCL, ke dalam file zip. Sertakan file zip saat Anda mengirimkan kasus dukungan ke Cloud Customer Care.
Untuk berhenti mengumpulkan log debug NCCL, hapus variabel yang Anda tambahkan di langkah 1.
Langkah berikutnya
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Layanan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engine
untuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-engine
channel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka bug atau permintaan fitur menggunakan issue tracker publik.