全部产品
Search
文档中心

Container Service for Kubernetes:FAQ GPU

更新时间:Nov 11, 2025

Topik ini menjawab pertanyaan umum mengenai GPU, termasuk optimasi kinerja, instalasi driver, dan pemecahan masalah.

Kategorisasi masalah

Deskripsi

Tautan

Galat GPU dan pemecahan masalah

Bagian ini mencakup isu terkait driver GPU, alat pemantauan seperti DCGM dan Prometheus, serta galat waktu proses seperti kegagalan inisialisasi NVML dan galat XID.

Isu cGPU (GPU terkontainerisasi)

Bagian ini mencakup konfigurasi cGPU, startup, galat waktu proses, dan isu izin terkait modul kernel.

Manajemen node dan kluster GPU

Bagian ini mencakup operasi tingkat kluster, termasuk deteksi penggunaan kartu GPU, dukungan virtualisasi, pemeliharaan node seperti peningkatan kernel, dan isolasi kartu rusak.

Mengapa konfigurasi ECC GPU dalam kluster saya tidak konsisten?

Mode Error-Correcting Code (ECC) meningkatkan stabilitas dan keandalan GPU dengan mendeteksi serta memperbaiki galat memori GPU. Namun, mengaktifkan mode ini sedikit mengurangi memori GPU yang tersedia.

Rekomendasi mode ECC:

  • Nonaktifkan ECC: Cocok untuk skenario sensitif biaya dan inferensi latensi rendah, seperti inferensi real-time online.

  • Aktifkan ECC: Cocok untuk aplikasi yang memerlukan konsistensi dan integritas data tinggi, seperti server database, sistem keuangan, komputasi ilmiah, dan komputasi kinerja tinggi (HPC).

Karena alasan tersebut, kami tidak menginisialisasi mode ECC secara seragam. Hal ini dapat menyebabkan konfigurasi ECC yang tidak konsisten di seluruh node GPU dalam sebuah kluster.

Cara mengatur mode ECC untuk node GPU

  1. Anda dapat menjalankan perintah berikut untuk memeriksa status mode ECC saat ini.

    nvidia-smi 

    Keluaran yang diharapkan:

    Fri Jun  6 11:49:05 2025       
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  Tesla T4                       On  | 00000000:00:08.0 Off |                    0 |
    | N/A   31C    P8               9W /  70W |      0MiB / 15360MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
                                                                                             
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+

    Pada keluaran tersebut, kolom Volatile Uncorr. ECC menunjukkan statusnya. Nilai 0 menunjukkan bahwa ECC diaktifkan dan tidak ada galat yang terjadi. Nilai Off menunjukkan bahwa ECC dinonaktifkan.

  2. Anda dapat menjalankan salah satu perintah berikut untuk mengaktifkan atau menonaktifkan mode ECC sesuai kebutuhan.

    • Aktifkan mode ECC untuk semua GPU pada node.

      nvidia-smi -e 1
    • Nonaktifkan mode ECC untuk semua GPU pada node.

      nvidia-smi -e 0
  3. Setelah Anda mengubah mode ECC, Anda harus me-restart sistem operasi agar perubahan tersebut berlaku.

    Penting

    Simpan semua data yang diperlukan sebelum me-restart node.

  4. Setelah restart, Anda dapat menjalankan nvidia-smi lagi untuk memeriksa status mode ECC dan memastikan bahwa mode tersebut telah diaktifkan atau dinonaktifkan. Keluaran berikut menunjukkan bahwa mode ECC dinonaktifkan:

    Fri Jun  6 11:52:15 2025       
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  Tesla T4                       On  | 00000000:00:08.0 Off |                  Off |
    | N/A   31C    P8               9W /  70W |      0MiB / 16384MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
                                                                                             
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+

Apakah Container Service for Kubernetes mendukung instans vGPU-dipercepat?

Instans vGPU-dipercepat memerlukan lisensi GRID dari NVIDIA agar berfungsi dengan benar. Untuk menggunakan instans vGPU-dipercepat, Anda harus membeli lisensi GRID dari NVIDIA dan membangun server lisensi sendiri.

Karena Alibaba Cloud tidak menyediakan server lisensi, instans vGPU-dipercepat tidak dapat digunakan secara langsung, bahkan dalam kluster yang dipercepat vGPU. Oleh karena itu, konsol Container Service for Kubernetes tidak lagi mendukung pemilihan instans vGPU-dipercepat sebagai node kluster.

Instans vGPU-dipercepat yang tidak didukung mencakup instans ECS dengan awalan seperti ecs.vgn5i, ecs.vgn6i, ecs.vgn7i, dan ecs.sgn7i. Untuk menggunakan instans ini, Anda harus membeli lisensi GRID dari NVIDIA dan membangun server lisensi sendiri.

Catatan
  • Anda memerlukan server lisensi untuk memperbarui lisensi driver NVIDIA untuk instans vGPU-dipercepat dalam kluster ACK.

  • Anda dapat membeli instans ECS dan mengikuti tutorial resmi NVIDIA untuk membangun server lisensi. Untuk informasi lebih lanjut, lihat NVIDIA.

Jika Anda telah menyiapkan server lisensi, Anda dapat mengikuti langkah-langkah berikut untuk menambahkan instans vGPU-dipercepat ke kluster ACK.

Tambahkan instans vGPU-dipercepat ke kluster ACK

  1. Buka Kuota Hak Istimewa dan ajukan fitur citra OS kustom.

  2. Buat citra OS kustom berdasarkan CentOS 7.x atau Alibaba Cloud Linux 2. Citra tersebut harus memiliki driver NVIDIA GRID yang terinstal dan lisensi GRID yang dikonfigurasi dengan benar. Untuk informasi lebih lanjut, lihat Buat citra kustom dari instans dan Instal driver GRID pada instans vGPU-dipercepat (Linux).

  3. Buat kelompok node. Untuk informasi lebih lanjut, lihat Buat dan kelola kelompok node.

  4. Tambahkan instans vGPU-dipercepat ke kelompok node yang dibuat pada Langkah 3. Untuk informasi lebih lanjut, lihat Tambahkan node yang sudah ada.

Next step: Update the NVIDIA driver license for vGPU-accelerated instances in an ACK cluster

Untuk informasi tentang cara memperbarui lisensi driver NVIDIA untuk instans vGPU-dipercepat dalam kluster ACK, lihat Perbarui lisensi driver NVIDIA untuk instans vGPU-dipercepat (vGPU) dalam kluster ACK.

Cara memperbarui kernel secara manual pada node GPU dalam kluster yang sudah ada

Bagian ini menjelaskan cara memperbarui kernel secara manual pada node GPU dalam kluster yang sudah ada.

Catatan
  • Perbarui kernel jika versinya lebih awal dari 3.10.0-957.21.3.

  • Konfirmasi versi kernel target dan lanjutkan dengan hati-hati.

  • Solusi ini tidak mencakup proses pembaruan kernel itu sendiri. Solusi ini hanya menjelaskan cara memperbarui driver NVIDIA setelah Anda memperbarui kernel.

  1. Tetapkan node GPU ke status tidak dapat dijadwalkan. Contoh ini menggunakan node cn-beijing.i-2ze19qyi8votgjz12345.

    kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned
  2. Kosongkan node GPU tempat Anda ingin memperbarui driver.

    kubectl drain cn-beijing.i-2ze19qyi8votgjz12345 --grace-period=120 --ignore-daemonsets=true
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 cordoned
    WARNING: Ignoring DaemonSet-managed pods: flexvolume-9scb4, kube-flannel-ds-r2qmh, kube-proxy-worker-l62sf, logtail-ds-f9vbg
    pod/nginx-ingress-controller-78d847fb96-5fkkw evicted
  3. Uninstall driver NVIDIA saat ini.

    Catatan

    Langkah ini meng-uninstall driver versi 384.111. Jika versi driver Anda berbeda, unduh paket instalasi driver yang sesuai dari situs web NVIDIA dan ganti nomor versinya sesuai kebutuhan.

    1. Login ke node GPU dan jalankan nvidia-smi untuk memeriksa versi driver.

      sudo nvidia-smi -a | grep 'Driver Version'
      Driver Version                      : 384.111
    2. Unduh paket instalasi driver NVIDIA.

      sudo cd /tmp/
      sudo curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run
      Catatan

      Anda harus menggunakan paket instalasi ini untuk meng-uninstall driver NVIDIA.

    3. Uninstall driver NVIDIA saat ini.

      sudo chmod u+x NVIDIA-Linux-x86_64-384.111.run
      sudo sh ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
  4. Perbarui kernel.

  5. Restart instans GPU.

    sudo reboot
  6. Login kembali ke node GPU dan instal paket kernel-devel yang sesuai.

    sudo yum install -y kernel-devel-$(uname -r)
  7. Buka situs web NVIDIA untuk mengunduh dan menginstal driver NVIDIA yang diperlukan. Contoh ini menggunakan versi 410.79.

    sudo cd /tmp/
    sudo curl -O https://cn.download.nvidia.cn/tesla/410.79/NVIDIA-Linux-x86_64-410.79.run
    sudo chmod u+x NVIDIA-Linux-x86_64-410.79.run
    sudo sh ./NVIDIA-Linux-x86_64-410.79.run -a -s -q
    
    # warm up GPU
    sudo nvidia-smi -pm 1 || true
    sudo nvidia-smi -acp 0 || true
    sudo nvidia-smi --auto-boost-default=0 || true
    sudo nvidia-smi --auto-boost-permission=0 || true
    sudo nvidia-modprobe -u -c=0 -m || true
  8. Periksa file /etc/rc.d/rc.local untuk memastikan berisi konfigurasi berikut. Jika tidak, tambahkan secara manual.

    sudo nvidia-smi -pm 1 || true
    sudo nvidia-smi -acp 0 || true
    sudo nvidia-smi --auto-boost-default=0 || true
    sudo nvidia-smi --auto-boost-permission=0 || true
    sudo nvidia-modprobe -u -c=0 -m || true
  9. Restart kubelet dan Docker.

    sudo service kubelet stop
    sudo service docker restart
    sudo service kubelet start
  10. Tetapkan kembali node GPU ke status dapat dijadwalkan.

    kubectl uncordon cn-beijing.i-2ze19qyi8votgjz12345
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned
  11. Verifikasi versi driver dalam pod device plugin pada node GPU.

    kubectl exec -n kube-system -t nvidia-device-plugin-cn-beijing.i-2ze19qyi8votgjz12345 nvidia-smi
    Thu Jan 17 00:33:27 2019
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 410.79       Driver Version: 410.79       CUDA Version: N/A      |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla P100-PCIE...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   27C    P0    28W / 250W |      0MiB / 16280MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+
    Catatan

    Jika Anda menjalankan perintah docker ps dan menemukan bahwa tidak ada kontainer yang dimulai pada node GPU, lihat Perbaiki isu startup kontainer pada node GPU.

Perbaiki isu startup kontainer pada node GPU

Pada node GPU dengan versi Kubernetes tertentu, Anda mungkin menemukan bahwa tidak ada kontainer yang dimulai setelah Anda me-restart kubelet dan Docker.

sudo service kubelet stop
Redirecting to /bin/systemctl stop kubelet.service
sudo service docker stop
Redirecting to /bin/systemctl stop docker.service
sudo service docker start
Redirecting to /bin/systemctl start docker.service
sudo service kubelet start
Redirecting to /bin/systemctl start kubelet.service

sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Jalankan perintah berikut untuk memeriksa driver Cgroup untuk Docker.

sudo docker info | grep -i cgroup
Cgroup Driver: cgroupfs

Keluaran tersebut menunjukkan bahwa driver Cgroup adalah `cgroupfs`.

Ikuti langkah-langkah berikut untuk memperbaiki isu tersebut.

  1. Buat cadangan file /etc/docker/daemon.json. Kemudian, jalankan perintah berikut untuk memperbarui /etc/docker/daemon.json.

    sudo cat >/etc/docker/daemon.json <<-EOF
    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "/usr/bin/nvidia-container-runtime",
                "runtimeArgs": []
            }
        },
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "100m",
            "max-file": "10"
        },
        "oom-score-adjust": -1000,
        "storage-driver": "overlay2",
        "storage-opts": ["overlay2.override_kernel_check=true"],
        "live-restore": true
    }
    EOF
  2. Restart Docker dan kubelet.

    sudo service kubelet stop
    Redirecting to /bin/systemctl stop kubelet.service
    sudo service docker restart
    Redirecting to /bin/systemctl restart docker.service
    sudo service kubelet start
    Redirecting to /bin/systemctl start kubelet.service
  3. Konfirmasi bahwa driver Cgroup untuk Docker adalah systemd.

    sudo docker info | grep -i cgroup
    Cgroup Driver: systemd

Apa yang harus saya lakukan jika penambahan node ECS Bare Metal Instance gagal?

Instans ECS Bare Metal (ecs.ebmgn7) mendukung multi-instans GPU (MIG). Untuk mencegah pengaturan MIG yang sudah ada memengaruhi penerapan node, sistem mereset semua pengaturan MIG yang ada setiap kali node jenis ini ditambahkan ke kluster. Waktu reset ini bervariasi. Jika reset memakan waktu terlalu lama, skrip penambahan node mungkin timeout, sehingga operasi gagal.

Jika penambahan node dari keluarga instans ini gagal, Anda dapat menjalankan perintah berikut pada host node:

sudo cat /var/log/ack-deploy.log

Periksa apakah keluaran berisi galat berikut:

command timeout: timeout 300 nvidia-smi --gpu-reset

Jika galat ini muncul, kegagalan disebabkan oleh reset MIG. Anda dapat menambahkan kembali node tersebut. Untuk informasi lebih lanjut, lihat Tambahkan node yang sudah ada.

Apa yang harus saya lakukan jika muncul "Failed to initialize NVML: Unknown Error" saat menjalankan kontainer GPU pada Alibaba Cloud Linux 3?

Gejala

Saat Anda menjalankan nvidia-smi dalam kontainer GPU, galat berikut dilaporkan.

sudo nvidia-smi

Failed to initialize NVML: Unknown Error

Penyebab

Saat Anda menggunakan systemd pada Alibaba Cloud Linux 3, operasi seperti systemctl daemon-reload dan systemctl daemon-reexec memperbarui konfigurasi terkait cgroup. Hal ini dapat mengganggu operasi normal perangkat GPU NVIDIA dalam kontainer. Untuk detail lebih lanjut, lihat isu komunitas 1671 dan 48.

Solusi

Jika isu ini terjadi, Anda dapat mencoba solusi berikut.

  • Kasus 1: Jika Pod aplikasi Anda meminta sumber daya GPU dengan mengatur variabel lingkungan NVIDIA_VISIBLE_DEVICES=all untuk kontainer, evaluasi apakah Anda dapat menambahkan hak istimewa ke kontainer tersebut. Contoh berikut menunjukkan cara menambahkan hak istimewa.

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-gpu-pod
    spec:
      containers:
        - name: test-gpu-pod
          image: centos:7
          command:
          - sh
          - -c
          - sleep 1d
          securityContext: # Tambahkan hak istimewa ke kontainer.
            privileged: true
  • Kasus 2: Untuk aplikasi yang menggunakan penjadwalan GPU bersama, kami merekomendasikan menggunakan Alibaba Cloud Linux 2 atau CentOS 7.

  • Kasus 3: Buat ulang Pod aplikasi. Sebelum melakukan tindakan ini, evaluasi dampak potensial terhadap bisnis Anda. Solusi ini tidak menjamin bahwa isu tidak akan terjadi kembali.

  • Kasus 4: Jika solusi di atas tidak berlaku, evaluasi apakah bisnis Anda dapat menggunakan sistem operasi berbeda, seperti Alibaba Cloud Linux 2 atau CentOS 7.

Apa yang harus saya lakukan jika kartu GPU menjadi tidak tersedia akibat galat XID 119 atau XID 120?

Gejala

Saat Anda menggunakan GPU, kartu tersebut mungkin menjadi tidak tersedia. Misalnya, saat Anda menggunakan GPU pada sistem Linux, pesan galat mungkin menunjukkan bahwa kartu GPU gagal diinisialisasi. Setelah Anda menjalankan perintah sh nvidia-bug-report.sh, Anda mungkin melihat pesan galat XID 119 atau XID 120 dalam log yang dihasilkan. Gambar berikut menunjukkan contoh galat XID 119:

123

Catatan

Untuk informasi tentang galat XID lainnya, kunjungi NVIDIA Common XID Errors.

Penyebab

Isu tersebut mungkin terjadi karena adanya pengecualian pada komponen GSP. Anda dapat memperbarui driver NVIDIA ke versi terbaru. Jika isu tetap berlanjut setelah pembaruan, kami merekomendasikan agar Anda menonaktifkan komponen GSP.

Catatan

Untuk informasi lebih lanjut tentang GSP, lihat Bab 42. Firmware GSP dalam dokumentasi resmi NVIDIA.

Solusi

Bagian berikut menjelaskan cara menonaktifkan GSP dalam berbagai skenario.

Menambahkan node baru

Anda dapat membuat kelompok node baru atau mengedit konfigurasi kelompok node yang sudah ada. Dalam Konfigurasi Lanjutan, tambahkan tag ack.aliyun.com/disable-nvidia-gsp=true ke kelompok node. Saat Anda menambahkan node baru, ACK secara otomatis menerapkan konfigurasi yang diperlukan untuk menonaktifkan GSP pada node tersebut.

Untuk informasi lebih lanjut tentang titik masuk operasi dan item konfigurasi kelompok node, lihat Buat dan kelola kelompok node.

image

Catatan

Langkah-langkah untuk menonaktifkan GSP dapat meningkatkan latensi penambahan node.

Menambahkan node yang sudah ada

  1. Anda dapat membuat kelompok node baru atau mengedit konfigurasi kelompok node tempat Anda ingin menambahkan node. Dalam Konfigurasi Lanjutan, tambahkan tag ack.aliyun.com/disable-nvidia-gsp=true ke kelompok node. Setelah Anda menambahkan node yang sudah ada ke kelompok node, ACK secara otomatis menerapkan konfigurasi yang diperlukan untuk menonaktifkan GSP pada node tersebut.

    Untuk informasi lebih lanjut tentang titik masuk operasi dan item konfigurasi kelompok node, lihat Buat dan kelola kelompok node.

    image

    Catatan

    Langkah-langkah untuk menonaktifkan GSP dapat meningkatkan latensi penambahan node ke kluster.

  2. Tambahkan node yang sudah ada ke kelompok node. Untuk informasi lebih lanjut tentang titik masuk operasi dan catatan terkait, lihat Tambahkan node yang sudah ada.

Mengelola node yang sudah ada dalam kluster

Anda dapat menonaktifkan GSP pada node yang sudah ada dengan cara berikut.

Nonaktifkan GSP menggunakan tag kelompok node

  1. Tambahkan tag ack.aliyun.com/disable-nvidia-gsp=true ke kelompok node milik node tersebut.

    Untuk informasi lebih lanjut tentang titik masuk operasi dan item konfigurasi kelompok node, lihat Edit kelompok node.

    image

  2. Hapus node dari kluster, tetapi jangan lepas instans ECS-nya. Untuk informasi lebih lanjut, lihat Hapus node.

  3. Tambahkan kembali node yang dihapus ke kluster sebagai node yang sudah ada. Untuk informasi lebih lanjut tentang titik masuk operasi dan catatan terkait, lihat Tambahkan node yang sudah ada.

Login ke node untuk menonaktifkan GSP secara manual

Jika Anda tidak dapat menonaktifkan GSP pada node Anda dengan menghapus lalu menambahkannya kembali ke kluster, Anda dapat login ke node dan melakukan langkah-langkah untuk menonaktifkan GSP secara manual. Untuk informasi lebih lanjut, lihat FAQ.

Catatan

NVIDIA memperkenalkan GSP pada versi driver 510. Misalnya, jika Anda login ke node dan memperbarui driver secara manual dari versi 470 ke 525, Anda tidak perlu menonaktifkan GSP untuk versi 470. Namun, bug GSP mungkin dipicu setelah Anda memperbarui ke versi 525. Setelah pembaruan driver selesai, lihat FAQ untuk melakukan langkah-langkah menonaktifkan GSP secara manual.

Cara mengisolasi GPU rusak secara manual dalam kluster?

Saat Anda menggunakan penjadwalan GPU bersama, GPU rusak dalam kluster dapat menyebabkan Job gagal. Jika Job dijalankan ulang, Job tersebut mungkin dijadwalkan ke GPU rusak yang sama dan gagal lagi. Untuk mencegah kegagalan berulang, Anda dapat menandai GPU rusak tersebut secara manual. Penjadwal tidak akan lagi menggunakan GPU yang ditandai, sehingga memberikan isolasi kesalahan.

Catatan
  • Versi penjadwal dan kluster Anda harus memenuhi persyaratan berikut:

    • Untuk kluster yang menjalankan Kubernetes 1.24 atau lebih baru, versi penjadwal harus 1.xx.x-aliyun-6.4.3.xxx atau lebih baru.

    • Untuk kluster yang menjalankan Kubernetes 1.22, versi penjadwal harus 1.22.15-aliyun-6.2.4.xxx atau lebih baru.

  • Kluster harus menggunakan penjadwalan GPU bersama.

Untuk menandai GPU rusak, Anda dapat mengirimkan ConfigMap khusus ke kluster seperti pada contoh berikut:

apiVersion: v1
kind: ConfigMap
metadata:
  name: <node-name>-device-status   # Ganti <node-name> dengan nama node sebenarnya.
  namespace: kube-system
data:
  devices: |
    - deviceId: 0          # Jalankan nvidia-smi untuk mendapatkan nomor ordinal GPU.
      deviceType: gpu
      healthy: false

ConfigMap harus berada dalam namespace kube-system. Nama ConfigMap harus berupa nama node yang meng-host GPU rusak, dengan akhiran -device-status. Di bidang data, deviceId adalah nomor ordinal GPU yang diperoleh dari perintah nvidia-smi, deviceType adalah gpu, dan healthy adalah false. Setelah Anda mengirimkan konfigurasi tersebut, penjadwal akan mengisolasi GPU yang sesuai.

Atasi pesan "Failed to initialize NVML: Unknown Error" dalam kontainer GPU

Gejala

Saat Anda menjalankan nvidia-smi dalam kontainer GPU, Anda mungkin menerima galat berikut. Isu ini terjadi pada node yang menjalankan Ubuntu 22.04 atau Red Hat Enterprise Linux (RHEL) 9.3 64-bit.

sudo nvidia-smi

Failed to initialize NVML: Unknown Error

Penyebab

Menjalankan operasi seperti systemctl daemon-reload atau systemctl daemon-reexec pada node memperbarui konfigurasi cgroup. Perubahan ini dapat memengaruhi operasi normal perangkat GPU NVIDIA dalam kontainer.

Isu ini memengaruhi Pod yang meminta sumber daya GPU dengan cara berikut:

  • Pod menentukan sumber daya aliyun.com/gpu-mem dalam resources.limits.

  • Pod mengatur variabel lingkungan NVIDIA_VISIBLE_DEVICES untuk kontainer agar mengakses sumber daya GPU pada node.

  • Pod menggunakan citra kontainer yang secara default telah mengatur variabel lingkungan NVIDIA_VISIBLE_DEVICES, dan Pod tersebut perlu mengakses sumber daya GPU pada node.

Catatan
  • Pod yang meminta sumber daya GPU dengan menentukan sumber daya nvidia.com/gpu dalam resources.limits tidak terpengaruh.

  • Komponen NVIDIA Device Plugin dan ack-gpu-exporter secara default mengatur variabel lingkungan NVIDIA_VISIBLE_DEVICES=all untuk Pod.

Solusi

  • Anda dapat membuat ulang Pod aplikasi untuk memperbaiki sementara isu ini. Sebelum melakukan operasi ini, evaluasi dampak potensial terhadap layanan Anda. Jika isu muncul kembali, Anda harus membuat ulang Pod tersebut lagi.

  • Jika Pod aplikasi Anda meminta sumber daya GPU dengan mengatur variabel lingkungan NVIDIA_VISIBLE_DEVICES=all, tambahkan hak akses privileged ke kontainer aplikasi. Contoh konfigurasi berikut menunjukkan hal tersebut:

    Penting

    Penggunaan hak akses privileged menimbulkan risiko keamanan. Sebagai alternatif, Anda dapat membuat ulang Pod aplikasi. Membuat ulang Pod merupakan perbaikan sementara dan tidak mencegah isu terjadi kembali.

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-gpu-pod
    spec:
      containers:
        - name: test-gpu-pod
          image: centos:7
          command:
          - sh
          - -c
          - sleep 1d
          securityContext: # Tambahkan hak istimewa ke kontainer.
            privileged: true

Cara mencegah file /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json terus bertambah besar pada node GPU

Gejala

File /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json pada node GPU terus bertambah besar.

Analisis

Prasyarat: Versi nvidia-container-toolkit pada node lebih awal dari 1.16.2.

Penyebab: Isu ini disebabkan oleh panggilan `exec` yang sering ke kontainer pada node GPU, misalnya ketika Pod dikonfigurasi dengan probe `exec`. Setiap kali operasi `exec` dipanggil, runtime kontainer NVIDIA mencetak log informasi.

Hasil: File /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json terus bertambah besar dan mengonsumsi ruang disk.

Solusi

Anda dapat login ke node dan menjalankan skrip berikut:

#!/bin/bash
set -e

export CONFIG=/etc/nvidia-container-runtime/config.toml
export CONTAINER_ROOT_PATH="/run/containerd/io.containerd.runtime.v2.task/k8s.io"

if [ -f $CONFIG ];then
    # Ubah tingkat log dalam konfigurasi nvidia-container-runtime dari "info" menjadi "error".
	sed -i 's@^log-level = "info"@log-level = "error"@g' $CONFIG
    # Kosongkan isi file log.json kontainer.
	find $CONTAINER_ROOT_PATH -mindepth 2 -maxdepth 2 -name log.json -type f -exec sh -c 'echo "" > "{}"' \;
fi