Vectorized Large Language Model (vLLM) adalah pustaka inferensi model bahasa besar (LLM) berperforma tinggi yang mendukung berbagai format model dan akselerasi layanan backend. vLLM cocok untuk menerapkan LLM sebagai layanan inferensi. Topik ini menjelaskan cara menerapkan model vLLM sebagai layanan inferensi menggunakan model Qwen-7B-Chat-Int8 dengan GPU NVIDIA V100.
Untuk informasi lebih lanjut tentang vLLM, lihat vllm-project.
Prasyarat
Sebuah klaster terkelola Container Service for Kubernetes (ACK) atau klaster khusus ACK dengan node yang dipercepat GPU telah dibuat. Klaster tersebut menjalankan Kubernetes 1.22 atau yang lebih baru dan menggunakan Compute Unified Device Architecture (CUDA) 12.0 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Membuat klaster ACK dengan node yang dipercepat GPU atau Membuat klaster 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 pool node yang dipercepat GPU untuk menentukan CUDA 12 pada node yang dipercepat GPU. Untuk informasi lebih lanjut, lihat Menentukan versi driver NVIDIA untuk node dengan menambahkan label.Komponen ack-kserve telah diinstal. Untuk informasi lebih lanjut, lihat Instal ack-kserve.
Suite AI cloud-native telah diinstal.
Klien Arena versi 0.9.15 atau yang lebih baru telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasi Klien Arena.
Object Storage Service (OSS) telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan OSS.
Langkah 1: Siapkan data model dan unggah data model ke Bucket OSS
Anda dapat menggunakan Bucket OSS atau sistem file File Storage NAS (NAS) untuk menyiapkan data model. Untuk informasi lebih lanjut, lihat Mount volume ossfs 1.0 yang disediakan secara statis atau Mount volume NAS yang disediakan secara statis. Dalam contoh ini, Bucket OSS digunakan.
Unduh model. Dalam contoh ini, model Qwen-7B-Chat-Int8 digunakan.
Jalankan perintah berikut untuk menginstal Git:
sudo yum install gitJalankan perintah berikut untuk menginstal plug-in Large File Support (LFS):
sudo yum install git-lfsJalankan perintah berikut untuk mengkloning repositori Qwen-7B-Chat-Int8 dari komunitas ModelScope ke host lokal Anda:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.gitJalankan perintah berikut untuk masuk ke direktori tempat repositori Qwen-7B-Chat-Int8 disimpan:
cd Qwen-7B-Chat-Int8Jalankan perintah berikut untuk mengunduh file besar yang dikelola oleh LFS dari direktori tempat repositori Qwen-7B-Chat-Int8 disimpan:
git lfs pull
Unggah file Qwen-7B-Chat-Int8 yang telah diunduh ke Bucket OSS.
Masuk ke Konsol OSS dan lihat serta catat nama Bucket OSS yang telah Anda buat.
Untuk informasi lebih lanjut tentang cara membuat Bucket OSS, lihat Buat bucket.
Instal dan konfigurasikan ossutil. Untuk informasi lebih lanjut, lihat Instal ossutil.
Jalankan perintah berikut untuk membuat direktori bernama Qwen-7B-Chat-Int8 di Bucket OSS:
ossutil mkdir oss://<your-bucket-name>/Qwen-7B-Chat-Int8Jalankan perintah berikut untuk mengunggah file model ke Bucket OSS.
ossutil cp -r ./Qwen-7B-Chat-Int8 oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8
Konfigurasikan volume persisten (PV) dan klaim volume persisten (PVC) yang bernama llm-model untuk klaster. Untuk informasi lebih lanjut, lihat Mount volume ossfs 1.0 yang disediakan secara statis.
Tabel berikut menjelaskan parameter dasar yang digunakan untuk membuat PV.
Parameter
Deskripsi
PV Type
Tipe PV. Dalam contoh ini, OSS dipilih.
Volume Name:
Nama PV. Dalam contoh ini, PV diberi nama llm-model.
Access Certificate
Pasangan AccessKey yang digunakan untuk mengakses Bucket OSS. Pasangan AccessKey terdiri dari ID AccessKey dan Rahasia AccessKey.
Bucket ID:
Nama Bucket OSS. Pilih Bucket OSS yang telah Anda buat.
OSS Path
Path tempat model berada. Contoh: /Qwen-7B-Chat-Int8.
Tabel berikut menjelaskan parameter dasar yang digunakan untuk membuat PVC.
Parameter
Deskripsi
PVC Type
Tipe PVC. Dalam contoh ini, OSS dipilih.
Name
Nama PVC. Dalam contoh ini, PVC diberi nama llm-model.
Allocation Mode
Dalam contoh ini, Existing Volumes dipilih.
Existing Volumes
Klik Select PV. Di kotak dialog Pilih PV, temukan PV yang ingin Anda gunakan dan klik Pilih di kolom Tindakan.
Langkah 2: Terapkan layanan inferensi
Jalankan perintah berikut untuk memeriksa sumber daya GPU yang tersedia di klaster:
arena top nodeJumlah node yang dipercepat GPU yang dapat digunakan untuk menjalankan layanan inferensi akan dikembalikan.
Jalankan perintah berikut untuk memulai layanan inferensi bernama
vllm:arena serve kserve \ --name=qwen \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \ --gpus=1 \ --cpu=4 \ --memory=12Gi \ --data="llm-model:/mnt/models/Qwen-7B-Chat-Int8" \ "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"Tabel berikut menjelaskan parameter.
Parameter
Wajib
Deskripsi
--name
Ya
Nama layanan inferensi yang Anda kirimkan, yang bersifat unik secara global.
--image
Ya
Alamat gambar layanan inferensi.
--gpus
Tidak
Jumlah GPU yang akan digunakan oleh layanan inferensi. Nilai default: 0.
--cpu
Tidak
Jumlah inti CPU yang akan digunakan oleh layanan inferensi.
--memory
Tidak
Ukuran memori yang akan digunakan oleh layanan inferensi.
--data
Tidak
Alamat model yang diterapkan sebagai layanan inferensi. Dalam contoh ini, model disimpan di direktori llm-model, yang dimount ke direktori /mnt/models/ di pod.
Output yang diharapkan:
inferenceservice.serving.kserve.io/qwen created INFO[0006] The Job qwen has been submitted successfully INFO[0006] You can run `arena serve get qwen --type kserve -n default` to check the job statusOutput sebelumnya menunjukkan bahwa layanan inferensi telah diterapkan.
Langkah 3: Verifikasi layanan inferensi
Jalankan perintah berikut untuk melihat kemajuan penyebaran layanan inferensi yang diterapkan menggunakan KServe:
arena serve get qwenOutput yang diharapkan:
Output sebelumnya menunjukkan bahwa layanan inferensi diterapkan menggunakan KServe dan model dapat diakses dari
http://qwen-default.example.com.Jalankan perintah berikut untuk mendapatkan alamat IP controller NGINX Ingress dan mengakses layanan inferensi menggunakan alamat IP tersebut.
# Mendapatkan alamat IP controller NGINX Ingress. NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}') # Mendapatkan hostname layanan inferensi. SERVICE_HOSTNAME=$(kubectl get inferenceservice qwen -o jsonpath='{.status.url}' | cut -d "/" -f 3) # Kirim permintaan untuk mengakses layanan inferensi. curl -H "Host: $SERVICE_HOSTNAME" -H "Content-Type: application/json" http://$NGINX_INGRESS_IP:80/v1/chat/completions -d '{"model": "qwen", "messages": [{"role": "user", "content": "Perform a text."}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}Output yang diharapkan:
Output sebelumnya menunjukkan bahwa permintaan berhasil dikirim ke layanan inferensi dan layanan tersebut mengembalikan respons yang diharapkan dalam format JSON.
Langkah 4: (Opsional) Hapus layanan inferensi
Sebelum Anda menghapus layanan inferensi, pastikan Anda tidak lagi memerlukan layanan inferensi dan sumber daya terkaitnya.
Jalankan perintah berikut untuk menghapus layanan inferensi.
arena serve delete qwenReferensi
Anda dapat mengonfigurasi Managed Service for Prometheus untuk memantau layanan inferensi dan mendeteksi pengecualian. Dengan cara ini, Anda dapat menangani pengecualian sesegera mungkin. Untuk informasi lebih lanjut, lihat Konfigurasi Managed Service for Prometheus.
Untuk informasi lebih lanjut tentang cara mempercepat model menggunakan KServe, lihat Percepat penarikan data untuk model menggunakan Fluid di KServe.