Terapkan Qwen1.5-4B-Chat sebagai layanan inferensi pada satu node GPU A10 atau T4 di ACK dengan vLLM dan Arena.
Prasyarat
Pastikan Anda telah memiliki:
-
Kluster ACK Pro dengan node berakselerasi GPU yang menjalankan Kubernetes 1.22 atau versi lebih baru, masing-masing dengan memori GPU minimal 16 GB. Lihat Create an ACK managed cluster.
-
Klien Arena versi terbaru. Lihat Configure the Arena client.
Gunakan driver GPU versi 525. Tambahkan label ack.aliyun.com/nvidia-driver-version:525.105.17 ke node berakselerasi GPU Anda. Lihat Specify an NVIDIA driver version for nodes by adding a label.
Latar Belakang
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat adalah LLM berbasis Transformer dengan 4 miliar parameter yang dikembangkan oleh Alibaba Cloud, dilatih menggunakan teks web, buku khusus domain, dan kode. Lihat Qwen GitHub repository.
vLLM
vLLM adalah framework inferensi LLM open-source yang dioptimalkan untuk throughput tinggi dan latensi rendah. Framework ini mendukung sebagian besar LLM populer, termasuk Qwen, serta menggunakan PagedAttention, continuous batching, dan quantization untuk meningkatkan efisiensi. Lihat vLLM GitHub repository.
Langkah 1: Siapkan data model
Unduh Qwen1.5-4B-Chat, unggah ke Object Storage Service (OSS), lalu buat persistent volume (PV) dan persistent volume claim (PVC) di kluster ACK Anda.
Anda juga dapat menyimpan model di File Storage NAS alih-alih OSS. Lihat Mount a statically provisioned NAS volume.
Unduh model
-
Instal Git:
# Jalankan yum install git atau apt install git. yum install git -
Instal Git Large File Storage (Git LFS):
# Jalankan yum install git-lfs atau apt install git-lfs. yum install git-lfs -
Klon Qwen1.5-4B-Chat dari ModelScope:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git -
Masuk ke direktori Qwen1.5-4B-Chat dan tarik file Git LFS:
cd Qwen1.5-4B-Chat git lfs pull
Unggah model ke OSS
-
Masuk ke Konsol OSS dan catat nama bucket Anda. Untuk membuat bucket, lihat Create a bucket.
-
Instal dan konfigurasi ossutil. Lihat Install ossutil.
-
Buat direktori
Qwen1.5-4B-Chatdi bucket OSS Anda:ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat -
Unggah file model ke OSS:
ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
Buat PV dan PVC
Buat PV dan PVC di kluster ACK Anda untuk memasang model dari OSS. Lihat Mount a statically provisioned OSS volume.
Parameter PV:
| Parameter | Deskripsi |
|---|---|
| PV Type | OSS |
| Volume Name | llm-model |
| Access Certificate | ID AccessKey dan Rahasia AccessKey untuk bucket OSS |
| Bucket ID | Nama bucket OSS Anda |
| OSS Path | Path menuju model, misalnya /models/Qwen1.5-4B-Chat |
Parameter PVC:
| Parameter | Deskripsi |
|---|---|
| PVC Type | OSS |
| Volume Name | llm-model |
| Allocation Mode | Pilih Existing Volumes |
| Existing Volumes | Klik Existing Volumes dan pilih PV Anda |
Langkah 2: Terapkan layanan inferensi
Arena memperlakukan file model sebagai dataset. Gunakan --data untuk memasang model ke dalam kontainer. Dalam contoh ini, path mount-nya adalah /model/Qwen1.5-4B-Chat.
Parameter --max-model-len menetapkan panjang token maksimum yang dapat diproses oleh model. Nilai yang lebih tinggi meningkatkan kualitas interaksi tetapi mengonsumsi lebih banyak memori GPU. Lihat vLLM code repository on GitHub untuk semua parameter yang tersedia.
Pilih jenis GPU
| GPU | Kasus Penggunaan | max-model-len | Parameter Tambahan |
|---|---|---|---|
| NVIDIA A10 | Produksi (kinerja tinggi) | 16384 | Tidak ada |
| NVIDIA T4 | Pengujian (biaya lebih rendah) | 8192 | --dtype half |
Terapkan layanan
Pilih perintah berdasarkan jenis GPU Anda.
NVIDIA A10 (direkomendasikan untuk produksi)
arena serve custom \
--name=vllm-qwen-4b-chat \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/vllm:0.4.1-ubuntu22.04 \
--data=llm-model:/model/Qwen1.5-4B-Chat \
"python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 16384"
NVIDIA T4 (untuk pengujian)
arena serve custom \
--name=vllm-qwen-4b-chat \
--version=v1 \
--gpus=1 \
--replicas=1 \
--restful-port=8000 \
--readiness-probe-action="tcpSocket" \
--readiness-probe-action-option="port: 8000" \
--readiness-probe-option="initialDelaySeconds: 30" \
--readiness-probe-option="periodSeconds: 30" \
--image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/vllm:0.4.1-ubuntu22.04 \
--data=llm-model:/model/Qwen1.5-4B-Chat \
"python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 8192 --dtype half"
T4 menggunakan --max-model-len 8192 (berbeda dengan 16384 untuk A10) dan menambahkan --dtype half agar sesuai dengan batasan memori T4.
Parameter Arena:
| Parameter | Deskripsi |
|---|---|
--name |
Nama layanan inferensi |
--version |
Versi layanan inferensi |
--gpus |
Jumlah GPU per replika |
--replicas |
Jumlah replika |
--restful-port |
Port untuk layanan inferensi |
--readiness-probe-action |
Jenis readiness probe. Nilai yang valid: HttpGet, Exec, gRPC, dan TCPSocket |
--readiness-probe-action-option |
Metode koneksi readiness probe |
--readiness-probe-option |
Konfigurasi readiness probe |
--data |
Mount PVC bersama dengan format: PVCName:MountPath. Gunakan arena data list untuk membuat kueri terhadap PVC yang tersedia. |
--image |
Image kontainer untuk layanan inferensi |
Output yang diharapkan:
service/vllm-qwen-4b-chat-v1 created
deployment.apps/vllm-qwen-4b-chat-v1-custom-serving created
INFO[0008] The Job vllm-qwen-4b-chat has been submitted successfully
INFO[0008] You can run `arena serve get vllm-qwen-4b-chat --type custom-serving -n default` to check the job status
Verifikasi penerapan
Periksa status layanan inferensi:
arena serve get vllm-qwen-4b-chat
Output yang diharapkan:
Name: vllm-qwen-4b-chat
Namespace: default
Type: Custom
Version: v1
Desired: 1
Available: 1
Age: 36m
Address: 172.16.XX.XX
Port: RESTFUL:8000
GPU: 1
Instances:
NAME STATUS AGE READY RESTARTS GPU NODE
---- ------ --- ----- -------- --- ----
vllm-qwen-4b-chat-v1-custom-serving-6d7c786b9f-z6nfk Running 36m 1/1 0 1 cn-beijing.192.168.XX.XX
Saat nilai Available sama dengan Desired dan status instans adalah Running, layanan siap digunakan.
Langkah 3: Uji layanan inferensi
Siapkan port forwarding
Port forwarding dengan kubectl port-forward hanya untuk pengembangan dan debugging. Untuk produksi, gunakan Ingress.
Teruskan port 8000 ke mesin lokal Anda:
kubectl port-forward svc/vllm-qwen-4b-chat-v1 8000:8000
Output yang diharapkan:
Forwarding from 127.0.0.1:8000 -> 8000
Forwarding from [::1]:8000 -> 8000
Kirim permintaan uji
Buka terminal baru dan kirim permintaan inferensi:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "Test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'
Output yang diharapkan:
{"id":"cmpl-503270b21fa44db2b6b3c3e0abaa3c02","object":"chat.completion","created":1717141209,"model":"/model/Qwen1.5-4B-Chat/","choices":[{"index":0,"message":{"role":"assistant","content":"OK. What do you want to test?"},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":21,"total_tokens":30,"completion_tokens":9}}
vLLM menyediakan API kompatibel OpenAI pada titik akhir /v1/chat/completions.
(Opsional) Bersihkan sumber daya
Hapus sumber daya yang tidak digunakan untuk menghindari biaya yang tidak perlu.
Hapus layanan inferensi:
arena serve delete vllm-qwen-4b-chat
Hapus PVC dan PV:
kubectl delete pvc llm-model
kubectl delete pv llm-model
Langkah selanjutnya
-
Konfigurasikan Ingress untuk mengekspos layanan inferensi di lingkungan produksi.
-
Untuk menerapkan model Qwen lainnya, sesuaikan
--max-model-lendan--gpu-memory-utilizationberdasarkan ukuran model dan memori GPU. -
Lihat vLLM GitHub repository untuk opsi konfigurasi.