全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan berbagi GPU di kluster ACK Edge

更新时间:Jul 02, 2025

Berbagi GPU memungkinkan Anda menjadwalkan beberapa pod pada GPU yang sama untuk berbagi sumber daya komputasinya. Ini meningkatkan pemanfaatan GPU dan mengurangi biaya. Saat menerapkan berbagi GPU, kontainer yang berjalan pada GPU yang sama dapat diisolasi satu sama lain sesuai dengan penggunaan sumber daya aplikasi masing-masing. Hal ini mencegah penggunaan sumber daya satu kontainer melebihi batas dan memengaruhi operasi normal kontainer lainnya. Topik ini menjelaskan cara menggunakan berbagi GPU dalam kluster ACK Edge.

Prasyarat

Batasan

  • Node cloud dari kluster ACK Edge mendukung fitur berbagi GPU, isolasi memori GPU, dan isolasi daya komputasi.

  • Kelompok node edge dari kluster ACK Edge hanya mendukung berbagi GPU. Fitur isolasi memori GPU dan isolasi daya komputasi tidak didukung.

Catatan penggunaan

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

  • Jangan jalankan aplikasi berat GPU langsung pada node.

  • Jangan gunakan alat seperti Docker, Podman, atau nerdctl untuk membuat kontainer dan meminta sumber daya GPU. Sebagai contoh, jangan jalankan perintah docker run --gpus all atau docker run -e NVIDIA_VISIBLE_DEVICES=all dan jalankan aplikasi berat GPU.

  • Jangan tambahkan variabel lingkungan NVIDIA_VISIBLE_DEVICES=all atau NVIDIA_VISIBLE_DEVICES=<GPU ID> ke bagian env dalam file YAML pod. Jangan gunakan variabel lingkungan NVIDIA_VISIBLE_DEVICES untuk meminta sumber daya GPU untuk pod dan menjalankan aplikasi berat GPU.

  • Jangan atur NVIDIA_VISIBLE_DEVICES=all dan jalankan aplikasi berat GPU saat Anda 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.

Risiko potensial berikut mungkin ada saat menggunakan metode-metode sebelumnya untuk meminta sumber daya GPU untuk aplikasi Anda:

  • Jika Anda menggunakan salah satu metode sebelumnya untuk meminta sumber daya GPU pada node tetapi tidak menentukan detail dalam buku besar sumber daya perangkat penjadwal, informasi alokasi sumber daya GPU aktual mungkin berbeda dari yang ada dalam buku besar sumber daya perangkat penjadwal. Dalam skenario ini, penjadwal masih dapat menjadwalkan pod tertentu yang meminta sumber daya GPU ke node tersebut. Akibatnya, aplikasi Anda mungkin bersaing untuk sumber daya yang disediakan oleh GPU yang sama, seperti meminta sumber daya dari GPU yang sama, dan beberapa aplikasi mungkin gagal dimulai karena sumber daya GPU yang tidak mencukupi.

  • Menggunakan metode-metode sebelumnya juga dapat menyebabkan masalah tidak diketahui lainnya, seperti masalah yang dilaporkan oleh komunitas NVIDIA.

Langkah 1: Instal komponen berbagi GPU

Suite AI cloud-native tidak diterapkan

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

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih Applications > Cloud-native AI Suite.

  3. Di halaman Cloud-native AI Suite, klik Deploy.

  4. Di halaman Deploy Cloud-native AI Suite, pilih Ekstensi Kebijakan Penjadwalan (Penjadwalan Tugas Batch, Berbagi GPU, Penjadwalan GPU Sadar Topologi).

  5. (Opsional) Klik Advanced di sebelah kanan Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling). Di panel Parameters, modifikasi parameter policy cGPU. Setelah Anda menyelesaikan modifikasi, klik OK.

    Jika Anda tidak memiliki persyaratan untuk fitur berbagi daya komputasi yang disediakan oleh cGPU, kami sarankan Anda menggunakan pengaturan default policy: 5, yaitu penjadwalan asli. Untuk informasi lebih lanjut tentang kebijakan yang didukung oleh cGPU, lihat Instal dan Gunakan cGPU.image

  6. Di bagian bawah halaman Cloud-native AI Suite, klik Deploy Cloud-native AI Suite.

    Setelah komponen diinstal, Anda dapat menemukan komponen berbagi GPU yang diinstal ack-ai-installer dalam daftar komponen di halaman Cloud-native AI Suite.

Suite AI cloud-native telah diterapkan

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

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih Applications > Cloud-native AI Suite.

  3. Temukan komponen ack-ai-installer, klik Deploy di kolom Actions.

  4. (Opsional) Di panel Parameters, modifikasi parameter policy cGPU.

    Jika Anda tidak memiliki persyaratan untuk fitur berbagi daya komputasi yang disediakan oleh cGPU, kami sarankan Anda menggunakan pengaturan default policy: 5, yaitu penjadwalan asli. Untuk informasi lebih lanjut tentang kebijakan yang didukung oleh cGPU, lihat Instal dan Gunakan cGPU.image

  5. Setelah Anda menyelesaikan modifikasi, klik OK.

    Setelah komponen diinstal, Status dari ack-ai-installer berubah menjadi Deployed.

Langkah 2: Buat kelompok node GPU

  • Buat kelompok node GPU cloud untuk mengaktifkan fitur berbagi GPU, isolasi memori GPU, dan berbagi daya komputasi.

  • Buat kelompok node GPU edge untuk mengaktifkan berbagi GPU.

Kelompok node cloud

  1. Di halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi kiri, pilih Nodes > Node Pools.

  2. Di halaman Node Pools, klik Create Node Pool. Untuk informasi lebih lanjut tentang cara mengonfigurasi kelompok node, lihat Buat dan Kelola Kelompok Node.

  3. Di halaman Create Node Pool, konfigurasikan parameter untuk membuat kelompok node dan klik Confirm. Tabel berikut menjelaskan parameter utama:

    Parameter

    Deskripsi

    Expected Nodes

    Jumlah awal node dalam kelompok node. Jika Anda tidak ingin membuat node dalam kelompok node, atur parameter ini ke 0.

    Node Labels

    Tambahkan label berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang label node, lihat Label untuk mengaktifkan kebijakan penjadwalan GPU.

    Dalam contoh berikut, nilai label diatur ke cgpu, yang menunjukkan bahwa node memiliki berbagi GPU yang diaktifkan. Pod pada node hanya perlu meminta memori GPU. Beberapa pod dapat berbagi GPU yang sama untuk mengimplementasikan isolasi memori GPU dan berbagi daya komputasi.

    Klik ikon 节点标签 di sebelah parameter Node Label, atur bidang Key ke ack.node.gpu.schedule, lalu atur bidang Value ke cgpu.

    Penting

Kelompok node edge

  1. Di halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi kiri, pilih Nodes > Node Pools.

  2. Di halaman Node Pools, klik Create Node Pool.

  3. Di kotak dialog Create Node Pool, konfigurasikan parameter dan klik Confirm Order. Tabel berikut menjelaskan parameter utama. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Manajemen Kelompok Node Edge.

    Node Labels: Klik ikon 节点标签 di bagian Node Labels, atur Key ke ack.node.gpu.schedule dan Value ke share. Nilai label ini mengaktifkan berbagi GPU. Untuk informasi lebih lanjut tentang label node, lihat Label untuk Mengaktifkan Kebijakan Penjadwalan GPU.

Langkah 3: Tambahkan node yang dipercepat GPU

Tambahkan node yang dipercepat GPU ke kelompok node cloud dan kelompok node edge, masing-masing.

Node cloud

Catatan

Jika Anda sudah menambahkan node yang dipercepat GPU ke kelompok node saat Anda membuat kelompok node, lewati langkah ini.

Setelah kelompok node dibuat, Anda dapat menambahkan node yang dipercepat GPU ke kelompok node. Untuk menambahkan node yang dipercepat GPU, Anda perlu mengatur arsitektur untuk jenis instans ke GPU-accelerated. Untuk informasi lebih lanjut, lihat Tambahkan Instans ECS yang Ada atau Buat dan Kelola Kelompok Node.

Node tepi

Untuk informasi lebih lanjut tentang cara menambahkan node yang dipercepat GPU ke kelompok node edge, lihat Tambahkan Node yang Dipercepat GPU.

Langkah 4: Instal dan gunakan alat inspeksi GPU pada node cloud

  1. Unduh kubectl-inspect-cgpu. File yang dapat dieksekusi harus diunduh ke direktori yang termasuk dalam variabel lingkungan PATH. Dalam contoh ini, /usr/local/bin/ digunakan.

    • Jika Anda menggunakan Linux, jalankan perintah berikut untuk mengunduh kubectl-inspect-cgpu:

      wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu
    • Jika Anda menggunakan macOS, jalankan perintah berikut untuk mengunduh kubectl-inspect-cgpu:

      wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu
  2. Jalankan perintah berikut untuk memberikan izin eksekusi ke kubectl-inspect-cgpu:

    chmod +x /usr/local/bin/kubectl-inspect-cgpu
  3. Jalankan perintah berikut untuk memeriksa penggunaan GPU kluster:

    kubectl inspect cgpu

    Output yang diharapkan:

    NAME                       IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.6.104  192.168.6.104  0/15                   0/15
    ----------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/15 (0%)

Langkah 5: Contoh berbagi GPU

Kelompok node cloud

  1. Jalankan perintah berikut untuk memeriksa informasi tentang berbagi GPU 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 memeriksa informasi rinci tentang berbagi GPU, jalankan perintah kubectl inspect cgpu -d.

  2. Terapkan aplikasi sampel yang memiliki berbagi GPU diaktifkan 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:
          nodeSelector:
            alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Ganti parameter ini dengan ID kelompok node yang Anda buat. 
          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 meminta total 3 GiB memori GPU. 
                aliyun.com/gpu-mem: 3 # Tentukan jumlah memori GPU yang diminta oleh pod. 
            workingDir: /root
          restartPolicy: Never

Kelompok node edge

Terapkan aplikasi sampel yang memiliki cGPU diaktifkan dan minta 4 GiB memori GPU untuk aplikasi tersebut.

apiVersion: batch/v1
kind: Job
metadata:
  name: tensorflow-mnist-share
spec:
  parallelism: 1
  template:
    metadata:
      labels:
        app: tensorflow-mnist-share
    spec:
      nodeSelector:
        alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Ganti parameter ini dengan ID kelompok node edge yang Anda buat.  
      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 # Minta 4 GiB memori. 
        workingDir: /root
      restartPolicy: Never

Langkah 6: Verifikasi hasil

Kelompok node cloud

  1. Masuk ke node master.

  2. Jalankan perintah berikut untuk mencetak log aplikasi yang diterapkan guna memeriksa apakah isolasi memori GPU 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 menunjukkan bahwa 2.832 MiB memori GPU diminta oleh kontainer.

  3. Jalankan perintah berikut untuk masuk ke kontainer dan lihat jumlah memori GPU yang dialokasikan ke kontainer:

    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 menunjukkan bahwa jumlah memori GPU yang dialokasikan ke kontainer adalah 3.231 MiB.

  4. Jalankan perintah berikut untuk memeriksa total memori GPU dari node yang dipercepat GPU tempat aplikasi diterapkan.

    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 menunjukkan bahwa total memori GPU dari node adalah 15.079 MiB dan 3.053 MiB memori GPU dialokasikan ke kontainer.

Kelompok node edge

  1. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih Workloads > Pods.

  2. Klik Terminal di kolom Actions dari pod yang Anda buat, seperti tensorflow-mnist-multigpu-***. Pilih nama pod yang ingin Anda kelola, dan jalankan perintah berikut:

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

    Dalam contoh ini, GPU V100 digunakan. Output menunjukkan bahwa pod dapat menggunakan semua memori yang disediakan oleh GPU, yaitu sebesar 16.384 MiB. Ini berarti berbagi GPU diimplementasikan tanpa isolasi memori GPU. Jika isolasi memori GPU diaktifkan, ukuran memori yang ditampilkan dalam output akan sama dengan jumlah memori yang diminta oleh pod, yaitu 4 GiB dalam contoh ini.

    Pod menentukan jumlah memori GPU yang dapat digunakan berdasarkan variabel lingkungan berikut:

    ALIYUN_COM_GPU_MEM_CONTAINER=4 # Jumlah memori GPU yang dapat digunakan oleh pod. 
    ALIYUN_COM_GPU_MEM_DEV=16 # Ukuran memori setiap GPU.

    Untuk menghitung rasio memori GPU yang dibutuhkan oleh aplikasi, gunakan rumus berikut:

    percetange = ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV = 4 / 16 = 0.25

Referensi