全部产品
Search
文档中心

Container Service for Kubernetes:Contoh penggunaan GPU sharing untuk berbagi GPU

更新时间:Dec 18, 2025

Topik ini menjelaskan cara men-deploy file YAML untuk membuat kontainer yang berbagi satu GPU. Setelah file tersebut di-deploy, Anda dapat menggunakan GPU sharing untuk mengisolasi memori GPU yang dialokasikan ke setiap kontainer, sehingga meningkatkan pemanfaatan resource GPU.

Daftar isi

Prasyarat

ack-ai-installer dan tool inspeksi GPU telah diinstal.

Catatan penggunaan

Untuk node GPU yang dikelola dalam kluster Container Service for Kubernetes (ACK), perhatikan hal-hal berikut saat meminta resource GPU untuk aplikasi dan menggunakan resource tersebut.

  • Jangan menjalankan aplikasi berat GPU secara langsung pada node.

  • Jangan gunakan tool seperti Docker, Podman, atau nerdctl untuk membuat kontainer dan meminta resource GPU. Misalnya, hindari menjalankan perintah docker run --gpus all atau docker run -e NVIDIA_VISIBLE_DEVICES=all serta menjalankan aplikasi berat GPU.

  • Jangan tambahkan variabel lingkungan NVIDIA_VISIBLE_DEVICES=all atau NVIDIA_VISIBLE_DEVICES=<GPU ID> ke bagian env dalam file YAML Pod. Hindari penggunaan variabel lingkungan NVIDIA_VISIBLE_DEVICES untuk meminta resource GPU bagi Pod dan menjalankan aplikasi berat GPU.

  • Jangan atur NVIDIA_VISIBLE_DEVICES=all dan jalankan aplikasi berat GPU saat membangun gambar kontainer jika variabel lingkungan NVIDIA_VISIBLE_DEVICES tidak ditentukan dalam file YAML Pod.

  • Jangan tambahkan privileged: true ke bagian securityContext dalam file YAML Pod dan jalankan aplikasi berat GPU.

Penggunaan metode di atas untuk meminta resource GPU dapat menimbulkan risiko berikut:

  • Jika salah satu metode di atas digunakan untuk meminta resource GPU pada suatu node tanpa mencatat detailnya dalam buku besar resource perangkat (device resource ledger) penjadwal, informasi alokasi resource GPU aktual mungkin tidak sesuai dengan catatan dalam buku besar tersebut. Akibatnya, penjadwal tetap dapat menjadwalkan Pod lain yang meminta resource GPU ke node yang sama, sehingga menyebabkan persaingan resource GPU antaraplikasi—misalnya, beberapa aplikasi meminta resource dari GPU yang sama—dan berpotensi menyebabkan kegagalan eksekusi akibat kekurangan resource GPU.

  • Penggunaan metode tersebut juga dapat menyebabkan masalah tak terduga lainnya, seperti masalah yang dilaporkan oleh komunitas NVIDIA.

Prosedur

  1. Jalankan perintah berikut untuk mengkueri informasi tentang GPU sharing di kluster Anda:

    kubectl inspect cgpu
    NAME                     IPADDRESS    GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.0.4  192.168.0.4  0/7                    0/7                    0/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/14 (0%)
    Catatan

    Untuk mengkueri informasi detail tentang GPU sharing, jalankan perintah kubectl inspect cgpu -d.

  2. Deploy aplikasi contoh yang telah diaktifkan GPU sharing-nya dan minta 3 GiB memori GPU untuk aplikasi tersebut.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gpu-share-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: gpu-share-sample
        spec:
          containers:
          - name: gpu-share-sample
            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 # Tentukan jumlah memori GPU yang diminta.
            workingDir: /root
          restartPolicy: Never

  3. Jalankan perintah berikut untuk mengkueri penggunaan memori GPU:

    kubectl inspect cgpu

    Output yang diharapkan

    NAME                      IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
    cn-beijing.192.168.1.105  192.168.1.105  3/14                   3/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    3/14 (21%)

    Output tersebut menunjukkan bahwa total memori GPU pada node cn-beijing.192.168.1.105 adalah 14 GiB dan 3 GiB memori GPU telah dialokasikan.

Verifikasi hasil

Anda dapat menggunakan metode berikut untuk memeriksa apakah isolasi memori GPU telah diaktifkan pada node tersebut.

  1. Login ke node master.

  2. Jalankan perintah berikut untuk mencetak log aplikasi yang telah di-deploy guna memeriksa apakah isolasi memori GPU telah diaktifkan:

    kubectl logs gpu-share-sample --tail=1

    Output yang diharapkan:

    2023-08-07 09:08:13.931003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2832 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:07.0, compute capability: 7.5)

    Output tersebut menunjukkan bahwa kontainer meminta 2.832 MiB memori GPU.

  3. Jalankan perintah berikut untuk login ke kontainer dan melihat jumlah memori GPU yang dialokasikan ke kontainer tersebut:

    kubectl exec -it gpu-share-sample nvidia-smi

    Output yang diharapkan:

    Mon Aug 7 08:52:18 2023
    +-----------------------------------------------------------------------------+
    | 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 T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   41C    P0    26W /  70W |   3043MiB /  3231MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Output tersebut menunjukkan bahwa jumlah memori GPU yang dialokasikan ke kontainer adalah 3.231 MiB.

  4. Jalankan perintah berikut untuk mengkueri total memori GPU pada node berakselerasi GPU tempat aplikasi di-deploy.

    nvidia-smi

    Output yang diharapkan:

    Mon Aug  7 09:18:26 2023 
    +-----------------------------------------------------------------------------+
    | 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 T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   40C    P0    26W /  70W |   3053MiB / 15079MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |    0      8796      C   python3                                     3043MiB |
    +-----------------------------------------------------------------------------+
    
                            

    Output tersebut menunjukkan bahwa total memori GPU pada node tersebut adalah 15.079 MiB dan 3.053 MiB memori GPU dialokasikan ke kontainer.