Model bahasa skala besar (Large Language Models/LLMs) memerlukan infrastruktur berbasis GPU dan stack serving yang dioptimalkan untuk menangani inferensi dalam skala besar. Dokumen ini menjelaskan cara menerapkan model Qwen1.5-4B-Chat sebagai layanan inferensi di Container Service for Kubernetes (ACK) menggunakan NVIDIA Triton Inference Server dengan backend vLLM pada GPU T4 atau A10.
Latar Belakang
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat adalah LLM dengan 4 miliar parameter yang dikembangkan oleh Alibaba Cloud berdasarkan arsitektur Transformer. Model ini dilatih pada set data berskala besar yang mencakup teks web, buku khusus domain, dan kode. Untuk informasi lebih lanjut, lihat repositori GitHub Qwen.
Triton Inference Server
Triton Inference Server adalah framework open-source untuk serving inferensi yang dikembangkan oleh NVIDIA. Framework ini mendukung berbagai backend framework pembelajaran mesin, termasuk TensorRT, TensorFlow, PyTorch, ONNX, dan vLLM.
Fitur utama:
Dukungan terhadap berbagai framework ML dan pembelajaran mendalam
Eksekusi model secara konkuren
Pemrosesan batch kontinu
Metrik inferensi bawaan: pemanfaatan GPU, latensi permintaan, dan throughput
Untuk informasi lebih lanjut, lihat repositori GitHub Triton Inference Server.
vLLM
vLLM adalah framework inferensi LLM berkinerja tinggi yang mendukung sebagian besar LLM populer, termasuk model Qwen. vLLM menggunakan optimisasi PagedAttention, pemrosesan batch kontinu, dan kuantisasi model untuk meningkatkan throughput inferensi LLM secara signifikan. Untuk informasi lebih lanjut, lihat repositori GitHub vLLM.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster ACK Pro dengan node yang dipercepat GPU (Kubernetes 1.22 atau lebih baru, memori GPU per node minimal 16 GB). Untuk informasi lebih lanjut, lihat Buat kluster ACK yang dikelola
Driver GPU versi 525 telah diinstal pada node GPU. Tambahkan label
ack.aliyun.com/nvidia-driver-version:525.105.17pada node yang dipercepat GPU untuk mengunci versi driver tersebut. Untuk informasi lebih lanjut, lihat Tentukan versi driver NVIDIA untuk node dengan menambahkan labelKlien Arena versi terbaru telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan klien Arena
Langkah 1: Siapkan data model
Unduh model Qwen1.5-4B-Chat, unggah ke Object Storage Service (OSS), lalu buat volume persisten (PV) dan klaim volume persisten (PVC) di kluster ACK.
Untuk menerapkan model lain yang didukung vLLM, lihat Model yang Didukung. Untuk menggunakan File Storage NAS alih-alih OSS, lihat Pasang volume NAS yang disediakan secara statis.
Unduh model
Instal Git:
# Gunakan yum install git atau apt install git yum install gitInstal plugin Git Large File Storage (LFS):
# Gunakan yum install git-lfs atau apt install git-lfs yum install git-lfsKlon repositori Qwen1.5-4B-Chat dari ModelScope:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.gitMasuk ke direktori dan tarik file besar:
cd Qwen1.5-4B-Chat git lfs pull
Unggah model ke OSS
Login ke Konsol OSS dan catat nama bucket OSS Anda. Untuk membuat bucket, lihat Buat bucket.
Instal dan konfigurasikan ossutil. Untuk informasi lebih lanjut, lihat Instal ossutil.
Buat direktori di OSS dan unggah model:
ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
Buat PV dan PVC
Buat PV dan PVC untuk memasang data model OSS di kluster. Untuk informasi lebih lanjut, lihat Pasang volume OSS yang disediakan secara statis.
Parameter PV
| Parameter | Nilai |
|---|---|
| PV Type | OSS |
| Volume Name | llm-model |
| Access Certificate | ID AccessKey dan Rahasia AccessKey yang digunakan untuk mengakses bucket OSS |
| Bucket ID | Nama bucket OSS Anda |
| OSS Path | Path model, misalnya /models/Qwen1.5-4B-Chat |
Parameter PVC
| Parameter | Nilai |
|---|---|
| PVC Type | OSS |
| Volume Name | llm-model |
| Allocation Mode | Existing Volumes |
| Existing Volumes | Pilih PV yang telah Anda buat |
Langkah 2: Konfigurasikan Triton dengan vLLM
Buat dua file konfigurasi: config.pbtxt untuk backend Triton dan model.json untuk parameter engine vLLM.
Buat konfigurasi backend
Buat direktori kerja dan file config.pbtxt:
mkdir triton-vllm
cat << EOF > triton-vllm/config.pbtxt
backend: "vllm"
# Penggunaan perangkat ditunda ke engine vLLM
instance_group [
{
count: 1
kind: KIND_MODEL
}
]
version_policy: { all { }}
EOFBuat konfigurasi model
File model.json meneruskan parameter ke engine vLLM. Pilih konfigurasi yang sesuai dengan jenis GPU Anda.
vLLM mengalokasikan memori GPU secara agresif saat startup. Parameter gpu_memory_utilization mengontrol perilaku ini. Menyetelnya ke 0,95 akan menyisihkan 95% memori GPU untuk model. Jika beban kerja lain berbagi GPU yang sama, turunkan nilai ini untuk menghindari error kehabisan memori.
GPU A10 (produksi)
GPU A10 memberikan throughput lebih tinggi dan mendukung presisi bfloat16. Gunakan A10 untuk beban kerja produksi.
cat << EOF > triton-vllm/model.json
{
"model":"/model/Qwen1.5-4B-Chat",
"disable_log_requests": "true",
"gpu_memory_utilization": 0.95,
"trust_remote_code": "true",
"dtype": "half",
"max_model_len": 8192
}
EOFGPU T4 (pengujian)
GPU T4 tersedia luas dan hemat biaya tetapi tidak mendukung presisi bfloat16 (bf16). Setel dtype ke half (FP16) dan gunakan max_model_len yang lebih rendah agar sesuai dalam batas memori 16 GB.
cat << EOF > triton-vllm/model.json
{
"model":"/model/Qwen1.5-4B-Chat",
"disable_log_requests": "true",
"gpu_memory_utilization": 0.95,
"trust_remote_code": "true",
"dtype": "half",
"max_model_len": 8192
}
EOFParameter Utama
| Parameter | Deskripsi |
|---|---|
max_model_len | Panjang maksimum urutan token yang dapat diproses model. Nilai yang lebih tinggi meningkatkan kualitas percakapan tetapi mengonsumsi lebih banyak memori GPU. |
dtype | Presisi floating-point untuk pemuatan model. Setel ke half (FP16) untuk GPU yang tidak mendukung bf16, seperti T4. |
gpu_memory_utilization | Bagian memori GPU yang dialokasikan untuk model. Nilai default adalah 0.9. |
Untuk daftar lengkap parameter yang dapat dikonfigurasi, lihat dokumentasi vLLM tentang Argumen Engine. Untuk contoh konfigurasi lainnya, lihat Menerapkan model vLLM di Triton.
Langkah 3: Terapkan layanan inferensi
Gunakan Arena untuk menerapkan layanan inferensi Qwen1.5-4B-Chat dengan Triton dan vLLM.
Ekspor path file konfigurasi sebagai variabel lingkungan:
export triton_config_file="triton-vllm/config.pbtxt" export model_config_file="triton-vllm/model.json"Terapkan layanan inferensi: Output yang diharapkan:
Parameter
Parameter Deskripsi --nameNama layanan inferensi. --versionVersi layanan inferensi. --imageImage kontainer untuk server Triton. --gpusJumlah GPU per replika. --cpuJumlah core CPU per replika. --memoryAlokasi memori per replika. --dataMount PVC dalam format <pvc-name>:<mount-path>. Jalankanarena data listuntuk melihat daftar PVC yang tersedia.--config-fileMount file lokal dalam format <local-path>:<container-path>.--model-repositoryDirektori repositori model Triton. Setiap subdirektori merepresentasikan satu model dan harus berisi file konfigurasinya. Untuk informasi lebih lanjut, lihat Repositori model Triton. --http-portPort HTTP untuk layanan Triton. --grpc-portPort gRPC untuk layanan Triton. --allow-metricsEkspos metrik inferensi (pemanfaatan GPU, latensi, throughput). arena serve triton \ --name=triton-vllm \ --version=v1 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/tritonserver:24.04-vllm-python-py3-ubuntu22.04 \ --gpus=1 \ --cpu=6 \ --memory=30Gi \ --data="llm-model:/model/Qwen1.5-4B-Chat" \ --model-repository /triton-config \ --config-file="$model_config_file:/triton-config/qwen-4b/1/model.json" \ --config-file="$triton_config_file:/triton-config/qwen-4b/config.pbtxt" \ --http-port=8000 \ --grpc-port=9000 \ --allow-metrics=trueconfigmap/triton-vllm-v1-4bd5884e6b5b6a3 created configmap/triton-vllm-v1-7815124a8204002 created service/triton-vllm-v1-tritoninferenceserver created deployment.apps/triton-vllm-v1-tritoninferenceserver created INFO[0007] The Job triton-vllm has been submitted successfully INFO[0007] You can run `arena serve get triton-vllm --type triton-serving -n default` to check the job statusVerifikasi bahwa layanan sedang berjalan: Tunggu hingga
Availablemenunjukkan1. Output yang diharapkan:arena serve get triton-vllmName: triton-vllm Namespace: default Type: Triton Version: v1 Desired: 1 Available: 1 Age: 3m Address: 172.16.XX.XX Port: RESTFUL:8000,GRPC:9000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6 Running 3m 1/1 0 1 cn-beijing.172.16.XX.XX
Langkah 4: Verifikasi layanan inferensi
Penerusan port (hanya untuk pengembangan)
Penerusan port melalui kubectl port-forward hanya dimaksudkan untuk pengembangan dan debugging. Metode ini tidak andal, aman, atau dapat diskalakan untuk penggunaan produksi. Untuk jaringan produksi, lihat Ikhtisar Ingress.
Siapkan penerusan port: Output yang diharapkan:
kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000Kirim permintaan uji ke endpoint generate Triton: Ganti
qwen-4bdengan nama model aktual Anda jika berbeda. Output yang diharapkan:curl -X POST localhost:8000/v2/models/qwen-4b/generate \ -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'{"model_name":"qwen-4b","model_version":"1","text_output":"What is AI? AI is a branch of computer science that studies how to make computers intelligent. Purpose of AI"}
(Opsional) Bersihkan
Hapus layanan inferensi dan sumber daya penyimpanan jika tidak lagi diperlukan:
# Hapus layanan inferensi
arena serve del triton-vllm
# Hapus PVC dan PV
kubectl delete pvc llm-model
kubectl delete pv llm-model