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.17ke 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.
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 pullUnggah file Qwen1.5-0.5B-Chat yang telah diunduh ke OSS.
CatatanUntuk 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-ChatKonfigurasikan 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=qwen1menjadi--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: |
--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 |
Langkah 3: Verifikasi layanan inferensi
Anda dapat memeriksa status penyebaran kedua layanan inferensi Qwen.
kubectl get pod -owide |grep qwenOutput 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.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:
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.
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 qwen2Jalankan perintah berikut untuk menghapus PV dan PVC yang telah dibuat.
kubectl delete pvc llm-model kubectl delete pv llm-model