All Products
Search
Document Center

:Menggunakan kolam node untuk mengontrol cGPU

Last Updated:Jul 02, 2025

Container Service for Kubernetes (ACK) memungkinkan Anda menggunakan kolam node untuk mengontrol cGPU. Dengan cara ini, Anda dapat membuat kebijakan berbagi GPU dan isolasi memori yang lebih fleksibel. Topik ini menjelaskan cara menggunakan dua kolam node berlabel dalam klaster ACK Pro untuk mengontrol kemampuan berbagi GPU dan isolasi memori dari cGPU.

Skenario penggunaan

  • Hanya klaster khusus ACK yang berisi node dengan akselerasi GPU yang mendukung komponen ack-cgpu. Klaster terkelola ACK yang berisi node dengan akselerasi GPU tidak mendukung komponen ack-cgpu.

  • Untuk menginstal ack-cgpu di klaster ACK Pro, lihat Mengelola Komponen Berbagi GPU.

Prasyarat

Sebelum memulai, pastikan langkah-langkah berikut telah selesai:

  • Instal Komponen ack-cgpu.

  • Kolam node telah dikonfigurasi.

    Anda dapat menyesuaikan nama kolam node. Dalam contoh ini, digunakan dua kolam node bernama cgpu dan cgpu-no-isolation.

    Nama kolam node

    Berbagi GPU

    Isolasi memori

    Label

    cgpu

    Diaktifkan

    Diaktifkan

    • cgpu=true

    • cgpu.disable.isolation=false

    cgpu-no-isolation

    Diaktifkan

    Dinonaktifkan

    • cgpu=true

    • cgpu.disable.isolation=true

Informasi latar belakang

Saat menggunakan cGPU dalam klaster ACK, Anda mungkin menemui skenario berikut:

  • Jumlah Memori GPU yang dapat dialokasikan untuk Job A sudah ditentukan dalam skrip. Dalam hal ini, klaster ACK hanya perlu mengaktifkan berbagi GPU untuk Job A. Isolasi memori tidak diperlukan.

  • Jumlah Memori GPU yang dapat dialokasikan untuk Job B tidak ditentukan dalam skrip. Dalam hal ini, klaster ACK harus mengaktifkan baik berbagi GPU maupun isolasi memori untuk Job B.

Bagaimana cara mengonfigurasi klaster ACK untuk mendukung kedua skenario tersebut?

Untuk menyelesaikan masalah ini, Anda dapat menggunakan kolam node untuk mengontrol cGPU. Buat dua kolam node sebagai berikut:

  • Buat kolam node yang hanya mendukung berbagi GPU. Kolam node ini digunakan untuk menjalankan Job A.

  • Buat kolam node lain yang mendukung baik berbagi GPU maupun isolasi memori. Kolam node ini digunakan untuk menjalankan Job B.

Catatan penggunaan

Saat menggunakan kolam node untuk mengontrol cGPU, perhatikan batasan berikut:

  • Jika pekerjaan tidak dikonfigurasi dengan pemilih node, pod dari pekerjaan tersebut mungkin dijadwalkan ke kolam node lain. Ini dapat menyebabkan kesalahan eksekusi pekerjaan.

    Penting

    Disarankan untuk mengonfigurasi pemilih node untuk setiap pekerjaan.

  • Saat label node diubah, misalnya, label node diubah dari cgpu.disable.isolation=false menjadi cgpu.disable.isolation=true, Anda harus me-restart pod gpushare-device-plugin pada node agar konfigurasi tersebut berlaku.

    Untuk melakukannya, hapus pod gpushare-device-plugin pada node tersebut. Kemudian, ACK secara otomatis akan membuat pod baru. Langkah-langkahnya adalah sebagai berikut:

    1. Jalankan perintah berikut untuk menanyakan pod gpushare-device-plugin dalam klaster ACK:

      kubectl get po -n kube-system  -l name=gpushare-device-plugin-ds -o wide

      Output yang diharapkan:

      NAME                              READY   STATUS    RESTARTS   AGE   IP              NODE                        NOMINATED NODE   READINESS GATES
      gpushare-device-plugin-ds-6r8gs   1/1     Running   0          18h   192.168.7.157   cn-shanghai.192.168.7.157   <none>           <none>
      gpushare-device-plugin-ds-pjrvn   1/1     Running   0          15h   192.168.7.158   cn-shanghai.192.168.7.158   <none>           <none>
    2. Dalam contoh ini, node cn-shanghai.192.168.7.157 digunakan. Jalankan perintah berikut untuk menghapus pod gpushare-device-plugin pada node ini:

      kubectl delete po gpushare-device-plugin-ds-6r8gs -n kube-system

Langkah 1: Buat kolam node

  1. Masuk ke Konsol ACK.

  2. Di panel navigasi sisi kiri Konsol ACK, klik Clusters.

  3. Pada halaman Clusters, temukan klaster yang ingin Anda kelola dan klik nama klaster atau klik Details di kolom Actions. Halaman detail klaster akan muncul.

  4. Di panel navigasi sisi kiri halaman detail, pilih Nodes > Node Pools.

  5. Dalam kotak dialog Create Node Pool, atur parameter.

    Untuk informasi lebih lanjut, lihat Buat Klaster Terkelola ACK. Daftar berikut menjelaskan beberapa parameter:

    • Quantity: Tentukan jumlah awal node dalam kolam node. Jika Anda tidak ingin menambahkan node ke kolam node, atur parameter ini ke 0.

    • Operating System: Pilih sistem operasi node. CentOS 7.x dan Alibaba Cloud Linux 2.x didukung.

    • Node Label: Anda dapat menambahkan label ke node.

    • ECS Label: Anda dapat menambahkan label ke instance Elastic Compute Service (ECS).

    • Custom Resource Group: Anda dapat menentukan grup sumber daya tempat node dalam kolam node termasuk.

    Di bagian Node Label, Anda dapat menambahkan label tertentu ke node dalam kolam node.

    • Tambahkan label berikut ke node dalam kolam node cgpu: cgpu=true dan cgpu.disable.isolation=false.

    • Tambahkan label berikut ke node dalam kolam node cgpu-no-isolation: cgpu=true dan cgpu.disable.isolation=true.

    Gambar berikut menunjukkan label yang ditambahkan ke node dalam kolam node cgpu-no-isolation.Node Label

  6. Klik Confirm Order.

    Pada halaman Node Pools, periksa kolom Status kolam node. Jika kolam node berada dalam status Initializing, itu menunjukkan bahwa kolam node sedang dibuat. Setelah kolam node dibuat, state kolam node berubah menjadi Active.

Catatan

Jika Anda ingin menambahkan node dengan akselerasi GPU ke kolam node, Anda dapat memperluas kolam node. Untuk informasi lebih lanjut, lihat Kelola Kolam Node.

Langkah 2: Kirim pekerjaan

Kirim dua pekerjaan bernama cgpu-test dan cgpu-test-no-isolation. Anda harus mengatur nodeSelector dalam file YAML kedua pekerjaan tersebut.

  • cgpu-test: Jumlah Memori GPU yang dapat dialokasikan untuk pekerjaan ini tidak ditentukan dalam skrip pekerjaan. Oleh karena itu, isolasi memori diperlukan untuk menjalankan pekerjaan ini. Template YAML berikut adalah contohnya:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: cgpu-test
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: cgpu-test
        spec:
          nodeSelector:
            cgpu.disable.isolation: "false" # Tambahkan pemilih node untuk memilih kolam node cgpu.
          containers:
          - name: cgpu-test
            image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                # Pod meminta total 3 GiB memori GPU.
                aliyun.com/gpu-mem: 3
            workingDir: /root
          restartPolicy: Never
    Catatan
    • nodeSelector: memilih kolam node cgpu.

    • cgpu.disable.isolation=false: menjadwalkan pekerjaan ke node dalam kolam node cgpu.

    • aliyun.com/gpu-mem: menentukan jumlah memori GPU yang diminta oleh pekerjaan.

  • cgpu-test-no-isolation: Jumlah memori yang dapat dialokasikan untuk pekerjaan per GPU ditentukan dalam skrip pekerjaan. Oleh karena itu, isolasi memori tidak diperlukan untuk menjalankan pekerjaan ini. Template YAML berikut adalah contohnya:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: cgpu-test-no-isolation
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: cgpu-test-no-isolation
        spec:
          nodeSelector:
            cgpu.disable.isolation: "true" # Tambahkan pemilih node untuk memilih kolam node cgpu.
          containers:
          - name: cgpu-test-no-isolation
            image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                # Pod meminta total 3 GiB memori GPU.
                aliyun.com/gpu-mem: 3
    Catatan
    • nodeSelector: menentukan label yang digunakan untuk memilih kolam node cgpu-no-isolation.

    • cgpu.disable.isolation=true: label yang digunakan untuk menjadwalkan pekerjaan ke node dalam kolam node cgpu-no-isolation.

    • aliyun.com/gpu-mem: menentukan jumlah memori GPU yang diminta oleh pekerjaan.

Langkah 3: Periksa hasilnya

  1. Jalankan perintah berikut untuk menanyakan status pekerjaan:

    kubectl get po

    Output yang diharapkan:

    NAME                       READY   STATUS    RESTARTS   AGE
    cgpu-test-0                1/1     Running   0          5m55s
    cgpu-test-no-isolation-0   1/1     Running   0          6m42s
  2. Jalankan perintah nvidia-smi di pod cgpu-test-0 (memerlukan isolasi memori) untuk menanyakan jumlah memori GPU yang dapat digunakan oleh pod:

    kubectl exec cgpu-test-0 nvidia-smi

    Output yang diharapkan:

    Mon Nov  2 11:33:10 2020
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | 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 V100-SXM2...  On   | 00000000:00:07.0 Off |                    0 |
    | N/A   34C    P0    54W / 300W |   3039MiB /  3226MiB |      1%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Output menunjukkan bahwa 3.226 MiB memori GPU dapat digunakan oleh kontainer. Total memori GPU adalah 16 GiB. Ini menunjukkan bahwa isolasi memori GPU diaktifkan.

  3. Jalankan perintah nvidia-smi di pod cgpu-test-no-isolation-0 (tidak memerlukan isolasi memori GPU) untuk menanyakan jumlah memori GPU yang dapat digunakan oleh kontainer dalam pod:

    kubectl exec cgpu-test-no-isolation-0 nvidia-smi

    Output yang diharapkan:

    Mon Nov  2 11:39:59 2020
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | 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 V100-SXM2...  On   | 00000000:00:07.0 Off |                    0 |
    | N/A   37C    P0    56W / 300W |   1929MiB / 16130MiB |      1%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Output menunjukkan bahwa 16.130 MiB memori GPU dapat ditemukan oleh kontainer. Total memori GPU adalah 16 GiB. Ini menunjukkan bahwa isolasi memori GPU dinonaktifkan. Dalam hal ini, Anda harus menanyakan variabel lingkungan berikut untuk memeriksa jumlah memori GPU yang dapat digunakan oleh kontainer dalam pod. Jalankan perintah berikut untuk memeriksa jumlah memori GPU yang dapat digunakan oleh kontainer dalam pod:

    kubectl exec cgpu-test-no-isolation-0 env | grep ALIYUN

    Output yang diharapkan:

    ALIYUN_COM_GPU_MEM_CONTAINER=3    # Jumlah memori GPU yang dapat digunakan oleh kontainer dalam pod. Jumlahnya adalah 3 GiB dalam contoh ini.
    ALIYUN_COM_GPU_MEM_DEV=15      # Jumlah total memori yang disediakan oleh GPU.
    ...
  4. Setelah Anda menjalankan perintah nvidia-smi, bandingkan hasil yang dikembalikan dari pod cgpu-test-no-isolation-0 dan pod cgpu-test-0.

    Hasil dari pod cgpu-test-no-isolation-0 menunjukkan jumlah total memori GPU dan hasil dari pod cgpu-test-0 hanya menunjukkan jumlah memori GPU yang diminta oleh pod. Ini menunjukkan bahwa Anda dapat menggunakan kolam node untuk mengontrol cGPU untuk berbagi GPU dan isolasi memori.