All Products
Search
Document Center

Container Service for Kubernetes:Menyebarkan layanan inferensi berbagi GPU

Last Updated:Mar 27, 2026

Node berakselerasi GPU harganya mahal, dan satu layanan inferensi jarang memanfaatkan seluruh kapasitas GPU. Penjadwalan GPU bersama memungkinkan Anda menjalankan beberapa layanan inferensi pada satu GPU dengan membagi memori GPU-nya menjadi alokasi berukuran tetap. Panduan ini menunjukkan cara menyebarkan dua layanan inferensi Qwen1.5-0.5B-Chat pada satu GPU V100 menggunakan KServe dan Arena, dengan masing-masing layanan menerima alokasi memori sebesar 6 GB.

Cara kerja

Komponen penjadwalan GPU bersama ACK mengimplementasikan pemotongan memori GPU. Setiap layanan inferensi mendeklarasikan jumlah memori GPU yang dibutuhkan melalui flag --gpumemory, dan penjadwal menempatkan beberapa Pod pada node GPU yang sama selama total memori yang diminta tidak melebihi kapasitas fisik GPU node tersebut.

Gunakan penjadwalan GPU bersama ketika memaksimalkan pemanfaatan GPU lebih penting daripada isolasi kesalahan antar layanan. Untuk beban kerja yang memerlukan isolasi ketat, gunakan node GPU khusus.

Batasan

  • Total memori GPU yang diminta oleh semua Pod pada suatu node tidak boleh melebihi memori GPU fisik node tersebut.

  • Node berakselerasi GPU secara default menggunakan CUDA 11. Panduan ini memerlukan CUDA 12.0 atau versi yang lebih baru.

  • ack-kserve harus dalam Raw Deployment mode.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Langkah 1: Siapkan data model

Simpan model di bucket Object Storage Service (OSS) atau sistem file Apsara File Storage NAS. Panduan ini menggunakan OSS. Untuk informasi lebih lanjut, lihat Use an ossfs 1.0 statically provisioned volume atau Mount a statically provisioned NAS volume.

  1. Unduh model Qwen1.5-0.5B-Chat.

    git lfs install
    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/Qwen1.5-0.5B-Chat.git
    cd Qwen1.5-0.5B-Chat
    git lfs pull
  2. Unggah file model ke bucket OSS Anda.

    Untuk instalasi dan penggunaan ossutil, lihat Install ossutil.
    ossutil mkdir oss://<your-bucket-name>/models/Qwen1.5-0.5B-Chat
    ossutil cp -r ./Qwen1.5-0.5B-Chat oss://<your-bucket-name>/models/Qwen1.5-0.5B-Chat
  3. Buat volume persisten (PV) untuk kluster menggunakan konfigurasi berikut.

    Item konfigurasi Nilai
    Persistent volume type OSS
    Name llm-model
    Certificate Access ID AccessKey dan Rahasia AccessKey untuk bucket OSS
    Bucket ID Bucket OSS yang dibuat pada langkah sebelumnya
    OSS path /Qwen1.5-0.5B-Chat
  4. Buat klaim volume persisten (PVC) yang terikat ke PV tersebut.

    Item konfigurasi Nilai
    Persistent volume claim type OSS
    Name llm-model
    Allocation mode Pilih Existing persistent volume
    Existing persistent volume Klik Select Existing persistent volume dan pilih PV yang dibuat pada langkah sebelumnya

Langkah 2: Sebarkan layanan inferensi

Sebarkan dua layanan inferensi Qwen, masing-masing meminta 6 GB memori GPU. Perintahnya identik kecuali pada parameter --name.

Jalankan perintah berikut untuk memulai layanan pertama:

arena serve kserve \
    --name=qwen1 \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \
    --gpumemory=6 \
    --cpu=3 \
    --memory=8Gi \
    --data="llm-model:/mnt/models/Qwen1.5-0.5B-Chat" \
    "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen1.5-0.5B-Chat --dtype=half --max-model-len=4096"

Untuk memulai layanan kedua, jalankan perintah yang sama dengan --name=qwen2.

Tabel berikut menjelaskan parameter utama.

Parameter Tipe Wajib Deskripsi
--name String Ya Nama layanan inferensi. Harus unik secara global.
--image String Ya Image kontainer untuk layanan inferensi.
--gpumemory Integer (GB) Tidak Memori GPU yang dialokasikan untuk layanan ini, dalam satuan GB. Contohnya, --gpumemory=6 mengalokasikan 6 GB. Total memori GPU yang diminta oleh semua layanan pada suatu node tidak boleh melebihi memori GPU fisik node tersebut.
--cpu Integer Tidak Jumlah vCPU untuk layanan inferensi.
--memory String Tidak Jumlah RAM untuk layanan inferensi, misalnya 8Gi.
--data String Tidak Path mount PVC ke kontainer dalam format <pvc-name>:<container-path>. Pada contoh ini, PVC llm-model dimount ke /mnt/models/ di dalam kontainer.

Langkah 3: Verifikasi layanan inferensi

  1. Periksa bahwa kedua Pod berjalan pada node GPU yang sama.

    kubectl get pod -owide | grep qwen

    Output yang diharapkan:

    qwen1-predictor-856568bdcf-5pfdq   1/1     Running   0          7m10s   10.130.XX.XX   cn-beijing.172.16.XX.XX   <none>           <none>
    qwen2-predictor-6b477b587d-dpdnj   1/1     Running   0          4m3s    10.130.XX.XX   cn-beijing.172.16.XX.XX   <none>           <none>

    Kedua Pod muncul pada node yang sama (cn-beijing.172.16.XX.XX), yang mengonfirmasi bahwa berbagi GPU aktif.

  2. Periksa memori GPU yang dialokasikan untuk setiap Pod. Jalankan perintah berikut — satu per layanan:

    kubectl exec -it qwen1-predictor-856568bdcf-5pfdq -- nvidia-smi   # Layanan pertama
    kubectl exec -it qwen2-predictor-6b477b587d-dpdnj -- nvidia-smi   # Layanan kedua

    Output yang diharapkan untuk setiap Pod: Memori GPU yang dialokasikan untuk layanan inferensi pertama

    Fri Jun 28 06:20:43 2024
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | 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-16GB           On  | 00000000:00:07.0 Off |                    0 |
    | N/A   39C    P0              53W / 300W |   5382MiB /  6144MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    +---------------------------------------------------------------------------------------+

    Memori GPU yang dialokasikan untuk layanan inferensi kedua

    Fri Jun 28 06:40:17 2024
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | 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-16GB           On  | 00000000:00:07.0 Off |                    0 |
    | N/A   39C    P0              53W / 300W |   5382MiB /  6144MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    +---------------------------------------------------------------------------------------+

    Batas memori GPU setiap Pod adalah 6 GB (6.144 MiB). Hal ini mengonfirmasi bahwa kedua layanan berbagi memori GPU node sesuai konfigurasi.

  3. Kirim permintaan uji ke layanan inferensi melalui gerbang NGINX Ingress.

    curl -H "Host: $(kubectl get inferenceservice qwen1 -o jsonpath='{.status.url}' | cut -d "/" -f 3)" \
         -H "Content-Type: application/json" \
         http://$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}'):80/v1/chat/completions \
         -d '{
                "model": "qwen",
                "messages": [{"role": "user", "content": "This is a test."}],
                "max_tokens": 10,
                "temperature": 0.7,
                "top_p": 0.9,
                "seed": 10
             }'

    Output yang diharapkan:

    {"id":"cmpl-bbca59499ab244e1aabfe2c354bf6ad5","object":"chat.completion","created":1719303373,"model":"qwen","choices":[{"index":0,"message":{"role":"assistant","content":"OK. What do you want to test?"},"logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":21,"total_tokens":31,"completion_tokens":10}}

    Model mengembalikan respons, yang mengonfirmasi bahwa layanan inferensi berfungsi dengan benar.

(Opsional) Langkah 4: Bersihkan

Hapus sumber daya jika tidak lagi diperlukan.

Hapus layanan inferensi:

arena serve delete qwen1
arena serve delete qwen2

Hapus PVC dan PV:

kubectl delete pvc llm-model
kubectl delete pv llm-model