全部产品
Search
文档中心

Container Service for Kubernetes:Menyebarkan layanan inferensi yang berbagi GPU

更新时间:Dec 26, 2025

Untuk meningkatkan pemanfaatan GPU, Anda dapat menjalankan beberapa tugas inferensi model pada GPU yang sama. Topik ini menggunakan model Qwen1.5-0.5B-Chat dan GPU V100 sebagai contoh untuk menjelaskan cara menggunakan KServe guna menyebarkan layanan inferensi model yang berbagi GPU.

Prasyarat

  • Kluster terkelola Container Service for Kubernetes (ACK) atau kluster khusus ACK dengan node yang dipercepat GPU telah dibuat. Kluster tersebut menjalankan Kubernetes 1.22 atau versi lebih baru dan menggunakan Compute Unified Device Architecture (CUDA) 12.0 atau versi lebih baru. Untuk informasi selengkapnya, lihat Tambahkan node yang dipercepat GPU ke kluster atau Buat kluster khusus ACK dengan node yang dipercepat GPU.

    Secara default, node yang dipercepat GPU menggunakan CUDA 11. Anda dapat menambahkan tag ack.aliyun.com/nvidia-driver-version:525.105.17 ke kelompok node yang dipercepat GPU untuk menentukan CUDA 12 bagi node tersebut. Untuk informasi selengkapnya, lihat Sesuaikan versi driver NVIDIA GPU pada node.

  • Komponen shared GPU scheduling telah diinstal, yang memungkinkan berbagi dan penjadwalan GPU.

  • Klien Arena versi 0.9.15 atau lebih baru telah diinstal. Untuk informasi selengkapnya, lihat Konfigurasikan klien Arena.

  • Komponen cert-manager dan ack-kserve telah diinstal, dan komponen ack-kserve berada dalam mode Raw Deployment.

Langkah 1: Siapkan data model

Anda dapat menggunakan bucket OSS atau sistem file File Storage NAS (NAS) untuk menyiapkan data model. Untuk informasi selengkapnya, lihat Gunakan volume provisioned statis ossfs 1.0 atau Pasang volume NAS provisioned statis. Dalam contoh ini, bucket OSS digunakan.

  1. Unduh model. Topik ini menggunakan model Qwen1.5-0.5B-Chat sebagai contoh.

    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 Qwen1.5-0.5B-Chat yang telah diunduh ke OSS.

    Catatan

    Untuk informasi selengkapnya tentang cara menginstal dan menggunakan ossutil, lihat Instal 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. Konfigurasikan persistent volume (PV) dan persistent volume claim (PVC) untuk kluster target.

    • Tabel berikut menjelaskan konfigurasi dasar PV contoh.

      Item konfigurasi

      Deskripsi

      Persistent volume type

      OSS

      Name

      llm-model

      Certificate Access

      Konfigurasikan ID AccessKey dan Rahasia AccessKey untuk mengakses OSS.

      Bucket ID

      Pilih Bucket OSS yang telah Anda buat pada langkah sebelumnya.

      OSS path

      Pilih path tempat model disimpan, misalnya /Qwen1.5-0.5B-Chat.

    • Tabel berikut menjelaskan konfigurasi dasar PVC contoh.

      Item konfigurasi

      Deskripsi

      Persistent volume claim type

      OSS

      Name

      llm-model

      Allocation mode

      Pilih Existing persistent volume.

      Existing persistent volume

      Klik tautan Select Existing persistent volume dan pilih PV yang telah dibuat.

Langkah 2: Menyebarkan layanan inferensi

Jalankan dua layanan inferensi Qwen. Setiap layanan memerlukan memori GPU sebesar 6 GB.

Untuk menjalankan layanan inferensi Qwen kedua, jalankan perintah yang sama dan ubah --name=qwen1 menjadi --name=qwen2.
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"

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Wajib

Deskripsi

--name

Ya

Nama layanan inferensi yang akan dikirimkan. Nama harus unik secara global.

--image

Ya

Alamat registri layanan inferensi.

--gpumemory

Tidak

Jumlah memori GPU yang diminta. Contoh: --gpumemory=6. Pastikan total memori GPU yang diminta oleh semua layanan tidak melebihi total memori GPU pada node tersebut.

--cpu

Tidak

Jumlah vCPU yang digunakan untuk layanan inferensi.

--memory

Tidak

Jumlah memori yang digunakan untuk layanan inferensi.

--data

Tidak

Path model untuk layanan inferensi. Pada topik ini, PV untuk model adalah llm-model, yang dipasang ke folder /mnt/models/ pada kontainer.

Langkah 3: Verifikasi layanan inferensi

  1. Anda dapat memeriksa status penyebaran kedua layanan inferensi Qwen.

    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>

    Output tersebut menunjukkan bahwa qwen1 dan qwen2 keduanya ditempatkan pada node GPU yang sama, yaitu cn-beijing.172.16.XX.XX.

  2. Jalankan dua perintah berikut untuk mengakses pod dari kedua layanan inferensi dan periksa alokasi memori GPU untuk setiap pod.

    kubectl exec -it qwen1-predictor-856568bdcf-5pfdq  -- nvidia-smi # Masuk ke pod layanan inferensi pertama.
    kubectl exec -it qwen2-predictor-6b477b587d-dpdnj  -- nvidia-smi # Masuk ke pod layanan inferensi kedua.

    Output yang diharapkan:

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

    Output tersebut menunjukkan bahwa batas memori GPU untuk kedua pod adalah 6 GB. Hal ini mengindikasikan bahwa setiap pod dialokasikan memori GPU sebesar 6 GB dan memori GPU pada node berhasil dibagi oleh kedua pod layanan inferensi tersebut.

  3. Akses layanan inferensi menggunakan alamat gateway 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}}

    Output tersebut menunjukkan bahwa model dapat menghasilkan respons berdasarkan input yang diberikan, yaitu pesan uji dalam contoh ini.

(Opsional) Langkah 4: Bersihkan lingkungan

Jika Anda tidak lagi memerlukan sumber daya yang telah dibuat, segera hapus sumber daya tersebut.

  • Jalankan perintah berikut untuk menghapus layanan inferensi model yang telah diterapkan.

    arena serve delete qwen1
    arena serve delete qwen2
  • Jalankan perintah berikut untuk menghapus PV dan PVC yang telah dibuat.

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