All Products
Search
Document Center

Container Service for Kubernetes:Bekerja dengan GPU sharing

Last Updated:Sep 05, 2026

GPU sharing memungkinkan beberapa Pod berjalan pada kartu GPU yang sama dalam kluster ACK Lingjun managed. Bergantung pada apakah beban kerja Anda memerlukan batasan memori yang ketat, pilih salah satu dari dua mode berikut:

Mode

Node Label

Cara kerja

Memori GPU diisolasi?

Gunakan saat

Sharing tanpa isolasi

ack.node.gpu.schedule=share

Pod berbagi GPU; memori tidak dipartisi di antara mereka

Tidak

Beban kerja yang mengelola batas memori sendiri (misalnya, aplikasi Java dengan -Xmx)

Berbagi dengan Isolasi (eGPU)

ack.node.gpu.schedule=egpu_mem hanya untuk isolasi memori GPU, atau ack.node.gpu.schedule=egpu_core_mem untuk isolasi memori GPU dan daya komputasi

Pod berbagi GPU; setiap Pod mendapatkan batas memori keras yang diterapkan oleh modul eGPU

Ya

Beberapa kontainer pada satu GPU di mana satu kontainer tidak boleh menghabiskan sumber daya yang lain

GPU sharing di pool node Lingjun hanya berlaku pada node yang memiliki salah satu label tersebut.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Membuat kluster ACK Lingjun managed dengan minimal satu node Lingjun berakselerasi GPU. Lihat Buat kluster Lingjun dengan ACK diaktifkan.

  • Membuat pool node Lingjun. Lihat Buat pool node Lingjun.

  • Mengaktifkan kemampuan KuberGPU (eGPU) di kluster bare metal Lingjun Anda.

  • Add-on ack-ai-installer telah terinstal di Kluster Pro terkelola ACK Anda. Saat Anda men-deploy suite AI cloud-native, pilih Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling) untuk menginstal Komponen.

  • Add-on GPU sharing diinstal secara default di kluster ACK Lingjun managed. Untuk mengaktifkan GPU sharing pada suatu node, tambahkan label GPU sharing ke node tersebut.

Aktifkan GPU sharing tanpa isolasi

Gunakan mode ini jika beban kerja Anda menyediakan batas memori GPU sendiri. Dalam kasus ini, penggunaan modul isolasi GPU untuk mengisolasi memori aplikasi dapat menyebabkan masalah seperti konflik resource, sehingga penjadwalan GPU bersama mendukung opsi untuk tidak menginstal modul isolasi pada node tersebut. Dalam GPU sharing tanpa isolasi, beberapa Pod berjalan pada kartu GPU yang sama. Gangguan antar-Pod pada kartu tersebut, seperti persaingan untuk memori GPU, tidak ditangani dan diserahkan ke lapisan aplikasi.

Langkah 1: Beri label pada node

  1. Konfirmasi bahwa node tersebut adalah node Lingjun dengan memeriksa keberadaan file /etc/lingjun_metadata di node tersebut. Jika file tersebut ada, jalankan nvidia-smi untuk memverifikasi ketersediaan GPU. Jika output normal, node tersebut adalah node Lingjun yang mendukung GPU sharing dan Anda dapat melanjutkan ke langkah berikutnya. Jika file tersebut tidak ada, node tersebut bukan node Lingjun, sehingga GPU sharing tidak dapat diaktifkan. Buat node Lingjun terlebih dahulu. Lihat Ikhtisar pool node Lingjun.

  2. Tambahkan label GPU sharing ke node tersebut:

    kubectl label node <NODE_NAME> ack.node.gpu.schedule=share

    Atau, atur label tersebut di Konsol menggunakan fitur node labels.

Langkah 2: Kirim pekerjaan GPU-sharing

  1. Buat file bernama tensorflow.yaml dengan konten berikut:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist-share
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: tensorflow-mnist-share
        spec:
          containers:
          - name: tensorflow-mnist-share
            image: registry.cn-beijing.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:
                aliyun.com/gpu-mem: 4  # Meminta 4 GiB memori GPU
            workingDir: /root
          restartPolicy: Never

    Bidang kunci adalah aliyun.com/gpu-mem: 4 di bawah resources.limits, yang meminta 4 GiB memori GPU untuk Pod tersebut.

  2. Kirim pekerjaan tersebut:

    kubectl apply -f tensorflow.yaml

Langkah 3: Verifikasi GPU sharing tanpa isolasi

  1. Dapatkan nama Pod:

    kubectl get pod | grep tensorflow
  2. Jalankan nvidia-smi di dalam Pod:

    kubectl exec -ti tensorflow-mnist-share-xxxxx -- nvidia-smi

    Output yang diharapkan:

    Wed Jun 14 06:45:56 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.105.01   Driver Version: 515.105.01   CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | 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 V100-SXM2...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   35C    P0    59W / 300W |    334MiB / 16384MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Bidang utama yang perlu diperiksa:

    • Memory-Usage menampilkan 334MiB / 16384MiB — Pod melihat seluruh memori GPU sebesar 16.384 MiB, bukan hanya 4 GiB yang diminta. Hal ini mengonfirmasi bahwa isolasi tidak aktif. Contoh ini menggunakan kartu GPU V100 dan Pod meminta 4 GiB memori GPU. Nilai aktual bergantung pada lingkungan Anda.

    • Jika modul isolasi GPU diinstal, bidang memori akan hanya menampilkan 4 GiB yang diminta.

Mode ini tidak menerapkan batas memori di tingkat driver GPU. Aplikasi Anda membaca memori GPU yang dapat digunakan dari dua variabel lingkungan, seperti yang ditunjukkan pada output berikut. Untuk menyatakan alokasi sebagai persentase dari total memori kartu, bagi kedua nilai tersebut: 4 / 16 = 0,25 (25% dari total memori GPU).
ALIYUN_COM_GPU_MEM_CONTAINER=4   # Memori GPU yang dialokasikan untuk Pod ini (GiB)
ALIYUN_COM_GPU_MEM_DEV=16        # Total memori GPU per kartu (GiB)

Aktifkan GPU sharing dengan isolasi (eGPU)

Gunakan mode ini untuk menerapkan batas memori GPU keras antar-Pod pada kartu GPU yang sama. Solusi industri seperti NVIDIA vGPU, MPS, vCUDA, dan eGPU memungkinkan penggunaan GPU dengan granularitas lebih halus, dan bagian ini menggunakan modul isolasi eGPU sebagai contoh. Dalam GPU sharing dengan isolasi, beberapa Pod berjalan pada kartu GPU yang sama, dan gangguan antar-Pod pada kartu tersebut juga ditangani.

Langkah 1: Beri label pada node

  1. Konfirmasi bahwa node tersebut adalah node Lingjun dengan memeriksa keberadaan file /etc/lingjun_metadata di node tersebut. Jika file tersebut ada, jalankan nvidia-smi untuk memverifikasi aksesibilitas GPU. Jika file tersebut tidak ada, node tersebut bukan node Lingjun dan Anda tidak dapat mengaktifkan GPU sharing untuknya. Buat pool node Lingjun terlebih dahulu. Lihat Ikhtisar pool node Lingjun.

  2. Tambahkan label GPU sharing ke node tersebut. Pilih nilai label berdasarkan jenis isolasi yang Anda butuhkan:

    Nilai label

    Yang diaktifkan

    egpu_mem

    Hanya isolasi memori GPU

    egpu_core_mem

    Isolasi memori GPU dan daya komputasi

    Untuk mengaktifkan isolasi memori:

    kubectl label node <NODE_NAME> ack.node.gpu.schedule=egpu_mem

    Anda juga dapat mengatur label tersebut di Konsol menggunakan fitur node labels.

    Anda dapat meminta hanya memori GPU, tetapi jika Anda meminta daya komputasi GPU, Anda harus meminta memori GPU dan daya komputasi GPU sekaligus. Meminta hanya daya komputasi tidak didukung.

Langkah 2: Konfirmasi resource node siap

Setelah memberi label pada node, tunggu hingga node melaporkan resource GPU-nya, lalu verifikasi:

kubectl get node <NODE_NAME> -oyaml

Cari aliyun.com/gpu-mem dan aliyun.com/gpu-count di bagian allocatable dan capacity:

allocatable:
  aliyun.com/gpu-count: "1"
  aliyun.com/gpu-mem: "80"
  ...
  nvidia.com/gpu: "0"
  ...
capacity:
  aliyun.com/gpu-count: "1"
  aliyun.com/gpu-mem: "80"
  ...
  nvidia.com/gpu: "0"
  ...

Bidang utama yang perlu diperiksa:

  • aliyun.com/gpu-count: "1" — node memiliki satu kartu GPU.

  • aliyun.com/gpu-mem: "80" — node memiliki total 80 GB memori GPU.

  • nvidia.com/gpu: "0" — GPU keseluruhan tidak diekspos sebagai resource schedulable independen; memori dialokasikan melalui aliyun.com/gpu-mem.

Untuk menjadwalkan Pod ke perangkat GPU utuh, tambahkan label ack.gpushare.placement=require-whole-device ke Pod tersebut. Secara default, Pod tersebut kemudian dijadwalkan ke kartu GPU utuh yang memiliki jumlah memori GPU tersebut. Tentukan jumlah memori menggunakan aliyun.com/gpu-mem.

Langkah 3: Jalankan pekerjaan benchmarking untuk memverifikasi isolasi

  1. Buat file bernama benchmark.yaml dengan konten berikut:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: benchmark-job
    spec:
      parallelism: 1
      template:
        spec:
          containers:
          - name: benchmark-job
            image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3
            command:
            - bash
            - run.sh
            - --num_batches=500000000
            - --batch_size=8
            resources:
              limits:
                aliyun.com/gpu-mem: 10  # Meminta 10 GB memori GPU
            workingDir: /root
          restartPolicy: Never
          hostNetwork: true
          tolerations:
            - operator: Exists
  2. Kirim pekerjaan tersebut:

    kubectl apply -f benchmark.yaml
  3. Setelah Pod berjalan, buka shell di dalam Pod:

    kubectl exec -ti benchmark-job-xxxx bash
  4. Jalankan vgpu-smi untuk memeriksa status isolasi GPU:

    • Memory-Usage menampilkan 8307MiB / 10782MiB — Pod dibatasi sekitar 10 GB, mengonfirmasi bahwa isolasi memori GPU aktif.

    • Berbeda dengan nvidia-smi pada mode tanpa isolasi, vgpu-smi hanya menampilkan memori yang dialokasikan untuk Pod ini, bukan total memori GPU.

    vgpu-smi

    Output yang diharapkan:

    +------------------------------------------------------------------------------+
    |    VGPU_SMI 460.91.03     DRIVER_VERSION: 460.91.03     CUDA Version: 11.2   |
    +-------------------------------------------+----------------------------------+
    | GPU  Name                Bus-Id           |        Memory-Usage     GPU-Util |
    |===========================================+==================================|
    |   0  xxxxxxxx            00000000:00:07.0 |  8307MiB / 10782MiB   100% /  100% |
    +-------------------------------------------+----------------------------------+

    Bidang utama yang perlu diperiksa:

FAQ

Bagaimana cara memeriksa apakah komponen GPU sharing sudah diinstal?

Jalankan perintah berikut:

kubectl get ds -nkube-system | grep gpushare

Jika komponen tersebut sudah diinstal, output akan mencantumkan DaemonSet berikut:

NAME                                 DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                    AGE
gpushare-egpu-device-plugin-ds       0         0         0       0            0           <none>
gpushare-egpucore-device-plugin-ds   0         0         0       0            0           <none>

Langkah selanjutnya