Topik ini menjelaskan cara menggunakan Versatile Large Language Model (vLLM) untuk menerapkan model Qwen sebagai layanan inferensi dalam Container Service for Kubernetes (ACK). Model Qwen 1.5-4B-Chat digunakan sebagai contoh dengan GPU NVIDIA T4 dan NVIDIA A10.
Informasi latar belakang
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat adalah model bahasa besar (LLM) dengan 4 miliar parameter yang dikembangkan oleh Alibaba Cloud berdasarkan Transformer. Model ini dilatih menggunakan jumlah data pelatihan ultra-besar, mencakup berbagai teks berbasis web, buku sektor spesialis, dan kode. Untuk informasi lebih lanjut, lihat Repositori GitHub Qwen.
vLLM
vLLM adalah kerangka layanan inferensi LLM yang berperforma tinggi dan mudah digunakan. vLLM mendukung sebagian besar LLM yang paling umum digunakan, termasuk model Qwen. vLLM didukung oleh teknologi seperti optimasi PagedAttention, pengelompokan kontinu, dan kuantifikasi model untuk meningkatkan efisiensi inferensi LLM secara signifikan. Untuk informasi lebih lanjut tentang kerangka vLLM, lihat Repositori GitHub vLLM.
Prasyarat
Sebuah ACK Pro cluster yang berisi node dengan akselerasi GPU telah dibuat. Versi Kubernetes dari cluster adalah 1.22 atau lebih baru. Setiap node dengan akselerasi GPU menyediakan 16 GB Memori GPU atau lebih. Untuk informasi lebih lanjut, lihat Buat Cluster ACK Terkelola.
Kami merekomendasikan Anda menginstal versi Driver GPU 525. Anda dapat menambahkan label
ack.aliyun.com/nvidia-driver-version:525.105.17ke node dengan akselerasi GPU untuk menentukan versi Driver GPU sebagai 525.105.17. Untuk informasi lebih lanjut, lihat Tentukan Versi Driver NVIDIA untuk Node dengan Menambahkan Label.Versi terbaru dari klien Arena telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan Klien Arena.
Langkah 1: Persiapkan data model
Dalam contoh ini, model Qwen1.5-4B-Chat digunakan untuk menjelaskan cara mengunduh model Qwen, mengunggah model ke Object Storage Service (OSS), serta membuat volume persisten (PV) dan klaim volume persisten (PVC) dalam cluster ACK.
Untuk informasi lebih lanjut tentang cara mengunggah model ke File Storage NAS (NAS), lihat Pasang Volume NAS yang Disediakan Secara Statis.
Unduh file model.
Jalankan perintah berikut untuk menginstal Git:
# Jalankan yum install git atau apt install git. yum install gitJalankan perintah berikut untuk menginstal plug-in Git Large File Support (LFS):
# Jalankan yum install git-lfs atau apt install git-lfs. yum install git-lfsJalankan perintah berikut untuk mengkloning repositori Qwen1.5-4B-Chat di ModelScope ke lingkungan lokal:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.gitJalankan perintah berikut untuk masuk ke direktori Qwen1.5-4B-Chat dan tarik file besar yang dikelola oleh LFS:
cd Qwen1.5-4B-Chat git lfs pull
Unggah file model Qwen1.5-4B-Chat ke OSS.
Masuk ke Konsol OSS, dan lihat serta catat nama Bucket OSS yang Anda buat.
Untuk informasi lebih lanjut tentang cara membuat Bucket OSS, lihat Buat Bucket.
Instal dan konfigurasikan ossutil untuk mengelola sumber daya OSS. Untuk informasi lebih lanjut, lihat Instal ossutil.
Jalankan perintah berikut untuk membuat direktori bernama Qwen1.5-4B-Chat di OSS:
ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-ChatJalankan perintah berikut untuk mengunggah file model ke OSS:
ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
Konfigurasikan PV dan PVC di cluster tujuan. Untuk informasi lebih lanjut, lihat Pasang Volume ossfs 1.0 yang Disediakan Secara Statis.
Tabel berikut menjelaskan parameter PV.
Parameter
Deskripsi
PV Type
OSS
Volume Name
llm-model
Access Certificate
Tentukan ID AccessKey dan Rahasia AccessKey yang digunakan untuk mengakses Bucket OSS.
Bucket ID
Tentukan nama Bucket OSS yang Anda buat.
OSS Path
Pilih path model, seperti /models/Qwen1.5-4B-Chat.
Tabel berikut menjelaskan parameter PVC.
Parameter
Deskripsi
PVC Type
OSS
Volume Name
llm-model
Allocation Mode
Pilih Existing Volumes.
Existing Volumes
Klik hyperlink Existing Volumes dan pilih PV yang Anda buat.
Langkah 2: Terapkan layanan inferensi
Model besar memiliki permintaan signifikan pada sumber daya memori. Untuk memastikan performa optimal, kami merekomendasikan Anda menggunakan GPU NVIDIA A10 berperforma tinggi dalam lingkungan produksi. Untuk tujuan pengujian, Anda dapat memilih GPU NVIDIA T4 yang hemat biaya, tetapi performanya mungkin jauh lebih rendah daripada GPU NVIDIA A10.
Jalankan perintah berikut untuk menerapkan model Qwen1.5-4B-Chat sebagai layanan inferensi menggunakan vLLM:
Anda dapat mempertimbangkan file parameter model sebagai jenis dataset khusus. Anda dapat menggunakan parameter
--datayang disediakan oleh Arena untuk memasang model ke jalur tertentu dalam container layanan inferensi. Dalam contoh ini, model Qwen1.5-4B-Chat dipasang ke/model/Qwen1.5-4B-Chat. Parameter--max_model_lendigunakan untuk menetapkan panjang token maksimum yang dapat diproses oleh model Qwen1.5-4B-Chat. Meningkatkan nilai parameter ini dapat meningkatkan kualitas interaksi model, tetapi perubahan ini mungkin mengonsumsi lebih banyak sumber daya Memori GPU. Untuk informasi lebih lanjut tentang parameter yang didukung oleh vLLM, lihat Repositori Kode vLLM di GitHub.Lingkungan NVIDIA A10 tunggal
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"Lingkungan NVIDIA T4 tunggal
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"Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
--name
Nama layanan inferensi.
--version
Versi layanan inferensi.
--gpus
Jumlah GPU untuk setiap replika layanan inferensi.
--replicas
Jumlah replika layanan inferensi.
--restful-port
Port layanan inferensi yang akan diekspos.
--readiness-probe-action
Jenis koneksi probe kesiapan. Nilai valid: HttpGet, Exec, gRPC, dan TCPSocket.
--readiness-probe-action-option
Metode koneksi probe kesiapan.
--readiness-probe-option
Konfigurasi probe kesiapan.
--data
Pasang PVC bersama ke lingkungan runtime. Nilainya terdiri dari dua bagian yang dipisahkan oleh titik dua (:). Tentukan nama PVC di sisi kiri titik dua. Anda dapat menjalankan perintah
arena data listuntuk menanyakan daftar PVC yang ada di cluster. Tentukan lingkungan runtime di sisi kanan titik dua. Anda juga dapat menentukan jalur lokal data pelatihan atau model. Dengan cara ini, skrip Anda dapat mengakses data atau model dalam PV yang ditentukan.--image
Alamat gambar layanan inferensi.
Output yang Diharapkan:
service/vllm-qwen-4b-chat-v1 created deployment.apps/vllm-qwen-4b-chat-v1-custom-serving created INFO[0008] Job vllm-qwen-4b-chat telah diserahkan dengan sukses INFO[0008] Anda dapat menjalankan `arena serve get vllm-qwen-4b-chat --type custom-serving -n default` untuk memeriksa status jobOutput menunjukkan bahwa layanan inferensi terkait vLLM dan Deployment serta Job yang sesuai telah diterapkan.
Jalankan perintah berikut untuk melihat detail layanan inferensi:
arena serve get vllm-qwen-4b-chatOutput 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.XXOutput menunjukkan bahwa layanan inferensi berjalan sesuai harapan dan siap untuk memberikan layanan.
Langkah 3: Verifikasi layanan inferensi
Jalankan perintah berikut untuk membuat aturan pengalihan port antara layanan inferensi dan lingkungan lokal:
PentingPengaturan pengalihan port menggunakan kubectl port-forward tidak andal, aman, atau dapat diperluas dalam lingkungan produksi. Ini hanya untuk pengembangan dan debugging. Jangan gunakan perintah ini untuk mengatur pengalihan port dalam lingkungan produksi. Untuk informasi lebih lanjut tentang solusi jaringan yang digunakan untuk produksi dalam cluster ACK, lihat Manajemen Ingress.
kubectl port-forward svc/vllm-qwen-4b-chat-v1 8000:8000Output yang Diharapkan:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000Jalankan perintah berikut untuk mengirim permintaan inferensi ke Triton Inference Server:
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.com pletion","created":1717141209,"model":"/model/Qwen1.5-4B-Chat/","options":[{"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}}Output menunjukkan bahwa model dapat menghasilkan respons yang sesuai berdasarkan permintaan yang diberikan. Contoh ini adalah pesan uji.
(Opsional) Langkah 4: Hapus lingkungan
Jika Anda tidak lagi membutuhkan sumber daya, hapus sumber daya sesegera mungkin.
Jalankan perintah berikut untuk menghapus layanan inferensi:
arena serve delete vllm-qwen-4b-chatJalankan perintah berikut untuk menghapus PV dan PVC:
kubectl delete pvc llm-model kubectl delete pv llm-model