All Products
Search
Document Center

:Mengelola cGPU menggunakan node pools

Last Updated:Jun 21, 2026

Penggunaan node pools untuk mengelola cGPU memungkinkan penerapan kebijakan fleksibel dalam berbagi GPU dan isolasi memori. Topik ini menjelaskan cara membuat dua node pool dengan label tertentu dalam klaster khusus untuk mengontrol kemampuan tersebut.

Skenario

  • Fitur yang dijelaskan dalam topik ini hanya didukung di klaster khusus, bukan di klaster yang dikelola.

  • Untuk menginstal komponen ack-cgpu di klaster ACK Pro, lihat Mengelola komponen ack-cgpu.

Prasyarat

Pastikan Anda telah menyelesaikan tugas-tugas berikut:

  • Instal komponen ack-cgpu.

  • Rencanakan node pools Anda.

    Anda dapat menggunakan nama kustom untuk node pools Anda. Topik ini menggunakan cgpu dan cgpu-no-isolation sebagai contoh.

    Node pool

    GPU sharing

    Memory isolation

    Labels

    cgpu

    Enabled

    Enabled

    • cgpu=true

    • cgpu.disable.isolation=false

    cgpu-no-isolation

    Enabled

    Disabled

    • cgpu=true

    • cgpu.disable.isolation=true

Latar Belakang

Saat menggunakan GPU sharing di Container Service for Kubernetes (ACK), Anda mungkin menghadapi skenario berikut:

  • Untuk Training Job A, kode aplikasi sudah menentukan memori GPU yang dapat digunakan. Oleh karena itu, klaster hanya perlu menyediakan GPU sharing, bukan isolasi memori.

  • Untuk Training Job B, kode aplikasi tidak menentukan memori GPU yang dapat digunakan. Dalam kasus ini, klaster harus menyediakan GPU sharing dan isolasi memori.

Bagaimana Anda dapat mendukung kedua skenario tersebut dalam satu klaster?

Penggunaan node pools untuk mengelola cGPU mendukung kedua skenario tersebut. Anda hanya perlu membuat dua node pool:

  • Node pool yang hanya menyediakan GPU sharing, tanpa isolasi memori. Pool ini ditujukan untuk pekerjaan seperti Training Job A.

  • Node pool yang menyediakan GPU sharing dan isolasi memori. Pool ini ditujukan untuk pekerjaan seperti Training Job B.

Catatan Penggunaan

Saat menggunakan node pools untuk mengelola cGPU, perhatikan hal-hal berikut:

  • Jika suatu pekerjaan tidak memiliki nodeSelector yang ditentukan, Pod-nya dapat dijadwalkan ke node pool mana pun, yang dapat menyebabkan hasil yang tidak diinginkan.

    Penting

    Selalu tentukan nodeSelector untuk setiap pekerjaan.

  • Jika label node berubah (misalnya, dari cgpu.disable.isolation=false menjadi cgpu.disable.isolation=true), Anda harus me-restart Pod gpushare-device-plugin pada node tersebut agar konfigurasi isolasi memori berlaku.

    Untuk me-restart plugin tersebut, hapus Pod gpushare-device-plugin yang ada. ACK kemudian secara otomatis membuat Pod baru. Ikuti langkah-langkah berikut:

    1. Jalankan perintah berikut untuk menampilkan daftar Pod gpushare-device-plugin di klaster:

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

      Output berikut diharapkan muncul:

      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. Sebagai contoh, untuk menghapus Pod pada node cn-shanghai.192.168.7.157, jalankan perintah berikut:

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

Langkah 1: Membuat node pools

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama klaster Anda. Di panel navigasi kiri, klik Nodes > Node Pools.

  3. Di pojok kanan atas, klik Create Node Pool.

  4. Pada halaman Create Node Pool, konfigurasikan parameter untuk node pool tersebut.

    Untuk informasi lebih lanjut tentang parameter-parameter tersebut, lihat Create an ACK managed cluster. Daftar berikut menjelaskan beberapa parameter utama:

    • Quantity: Jumlah awal node dalam node pool. Atur ke 0 jika Anda tidak ingin membuat node sekarang.

    • Operating System: Pilih sistem operasi untuk node, seperti CentOS 7.x atau Alibaba Cloud Linux 2.x.

    • Node Labels: Label yang akan diterapkan pada node dalam node pool ini.

    • ECS Tags: Tag yang akan diterapkan pada instance ECS yang mendasarinya.

    • Custom Resource Group: Kelompok sumber daya untuk node dalam node pool ini.

    Pada bagian Node Labels, tambahkan label spesifik untuk setiap node pool.

    • Node pool cgpu: cgpu=true dan cgpu.disable.isolation=false

    • Node pool cgpu-no-isolation: cgpu=true dan cgpu.disable.isolation=true

    Konfigurasi berikut menggunakan node pool cgpu-no-isolation sebagai contoh.

  5. Klik Confirm.

    Pada halaman Node Pools, status Status bernilai Initializing menunjukkan bahwa node pool sedang dibuat. Setelah pembuatan selesai, Status berubah menjadi Active.

Catatan

Jika Anda perlu menambahkan node GPU, Anda dapat melakukan scale out terhadap node pool tersebut. Untuk informasi lebih lanjut, lihat Create and manage node pools.

Langkah 2: Mengirimkan pekerjaan

Kirimkan dua pekerjaan, cgpu-test dan cgpu-test-no-isolation. Anda harus menentukan nodeSelector dalam file YAML untuk setiap pekerjaan.

  • cgpu-test: Ukuran memori GPU yang tersedia tidak diatur dalam kode pekerjaan ini, sehingga memerlukan isolasi memori cGPU agar berjalan dengan benar. File YAML contoh berikut menunjukkan konfigurasinya:

    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 nodeSelector untuk memilih node pool 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 ini meminta total 3 GiB memori GPU.
                aliyun.com/gpu-mem: 3
            workingDir: /root
          restartPolicy: Never
    Catatan
    • nodeSelector: Menentukan node pool cgpu.

    • cgpu.disable.isolation: "false": Menjadwalkan pekerjaan ke node dalam node pool cgpu.

    • aliyun.com/gpu-mem: Menetapkan jumlah memori GPU dalam satuan GiB.

  • cgpu-test-no-isolation: Kode pekerjaan ini mengelola penggunaan memori GPU-nya sendiri, sehingga tidak memerlukan isolasi memori cGPU. File YAML contoh berikut menunjukkan konfigurasinya:

    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 nodeSelector untuk memilih node pool cgpu-no-isolation.
          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 ini meminta total 3 GiB memori GPU.
                aliyun.com/gpu-mem: 3
    Catatan
    • nodeSelector: Menentukan node pool cgpu-no-isolation.

    • cgpu.disable.isolation: "true": Menjadwalkan pekerjaan ke node dalam node pool cgpu-no-isolation.

    • aliyun.com/gpu-mem: Menetapkan jumlah memori GPU dalam satuan GiB.

Langkah 3: Memverifikasi hasil

  1. Jalankan perintah berikut untuk memeriksa status pekerjaan:

    kubectl get po

    Output berikut diharapkan muncul:

    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, yang memerlukan isolasi memori, untuk memeriksa memori GPU yang tersedia bagi kontainer.

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

    Output berikut diharapkan muncul:

    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      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Total memori yang terlihat oleh kontainer adalah 3.226 MiB, jauh lebih kecil daripada total 16 GiB kartu fisik. Hal ini mengonfirmasi bahwa isolasi memori cGPU sedang berlaku.

  3. Jalankan perintah nvidia-smi di Pod cgpu-test-no-isolation-0, yang tidak memerlukan isolasi memori, untuk memeriksa memori GPU yang tersedia bagi kontainer.

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

    Output berikut diharapkan muncul:

    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      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Total memori yang terlihat oleh kontainer adalah 16.130 MiB, yang merupakan total memori kartu GPU 16 GiB. Hal ini mengonfirmasi bahwa isolasi memori cGPU dinonaktifkan. Dalam skenario ini, aplikasi dalam kontainer harus menentukan kuota memori yang diizinkan dari variabel lingkungan berikut. Jalankan perintah berikut untuk menanyakan ukuran memori GPU yang diizinkan.

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

    Output berikut diharapkan muncul:

    ALIYUN_COM_GPU_MEM_CONTAINER=3    # Jumlah memori dalam satuan GiB yang boleh digunakan kontainer ini pada kartu GPU. Dalam kasus ini, 3 GiB.
    ALIYUN_COM_GPU_MEM_DEV=15      # Total memori kartu GPU.
    ...
  4. Bandingkan output nvidia-smi dari Pod cgpu-test-no-isolation-0 dan cgpu-test-0.

    Output untuk cgpu-test-no-isolation-0 menunjukkan seluruh memori kartu GPU, sedangkan output untuk cgpu-test-0 hanya menunjukkan bagian memori yang dialokasikan. Hal ini menunjukkan bahwa node pools merupakan cara yang efektif untuk mengelola kemampuan cGPU.