Terapkan Qwen1.5-4B-Chat sebagai layanan inferensi di ACK menggunakan Triton dan vLLM pada GPU T4 atau A10.
Latar Belakang
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat adalah LLM berbasis Transformer dengan 4 miliar parameter dari Alibaba Cloud yang dilatih menggunakan teks web, buku khusus domain, dan kode. Lihat repositori GitHub Qwen.
Triton Inference Server
Triton Inference Server adalah framework inferensi open-source dari NVIDIA yang mendukung beberapa backend, termasuk TensorRT, TensorFlow, PyTorch, ONNX, dan vLLM.
Fitur utama:
-
Dukungan berbagai framework ML dan pembelajaran mendalam
-
Eksekusi model secara konkuren
-
Pemrosesan batch kontinu (continuous batching)
-
Metrik bawaan: pemanfaatan GPU, latensi, dan throughput
vLLM
vLLM adalah framework inferensi berkinerja tinggi yang mendukung sebagian besar LLM populer, termasuk Qwen. Framework ini menggunakan PagedAttention, continuous batching, dan kuantisasi untuk meningkatkan throughput inferensi. Lihat repositori GitHub vLLM.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Kluster ACK Pro dengan node berakselerasi GPU (Kubernetes 1.22+, ≥16 GB memori GPU per node).
-
Versi driver GPU 525 telah diinstal pada node GPU. Tambahkan label
ack.aliyun.com/nvidia-driver-version:525.105.17untuk mengunci versi driver. -
Klien Arena versi terbaru telah diinstal.
Langkah 1: Siapkan data model
Unduh Qwen1.5-4B-Chat, unggah ke Object Storage Service (OSS), lalu buat volume persisten (PV) dan klaim volume persisten (PVC) di kluster Anda.
Untuk model lain yang didukung vLLM, lihat Model yang Didukung. Untuk menggunakan NAS alih-alih OSS, lihat Memasang volume NAS yang disediakan secara statis.
Unduh model
-
Instal Git:
# Gunakan yum install git atau apt install git yum install git -
Instal Git LFS:
# Gunakan 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 dan tarik file besar:
cd Qwen1.5-4B-Chat git lfs pull
Unggah model ke OSS
-
Login ke Konsol OSS dan catat nama bucket Anda. Buat bucket jika diperlukan.
-
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.
Parameter PV
|
Parameter |
Nilai |
|
PV Type |
OSS |
|
Volume Name |
llm-model |
|
Access Certificate |
ID AccessKey dan Rahasia AccessKey untuk akses 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 |
|
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 mesin 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 mesin vLLM
instance_group [
{
count: 1
kind: KIND_MODEL
}
]
version_policy: { all { }}
EOF
Buat konfigurasi model
model.json menentukan parameter mesin vLLM. Pilih konfigurasi sesuai jenis GPU Anda.
vLLM mengalokasikan Memori GPU secara agresif saat dimulai. Parameter gpu_memory_utilization mengontrol alokasi ini—nilai 0.95 mencadangkan 95% Memori GPU. Turunkan nilai tersebut jika beban kerja lain berbagi GPU 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",
"max_model_len": 16384
}
EOF
GPU T4 (pengujian)
GPU T4 tersedia luas dan hemat biaya tetapi tidak mendukung bf16. Atur dtype ke half (FP16) dan kurangi max_model_len agar sesuai dengan 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
}
EOF
Parameter utama
|
Parameter |
Deskripsi |
|
|
Panjang maksimum urutan token. Nilai yang lebih tinggi meningkatkan kualitas percakapan tetapi menggunakan lebih banyak memori GPU. |
|
|
Presisi model. Atur ke |
|
|
Porsi memori GPU untuk model. Default: 0.9. |
Lihat Argumen Mesin vLLM untuk semua parameter dan Menerapkan model vLLM di Triton untuk contoh penggunaan.
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:
Parameter
Parameter
Deskripsi
--nameNama layanan inferensi.
--versionVersi layanan inferensi.
--imageCitra server Triton.
--gpusJumlah GPU per replika.
--cpuJumlah core CPU per replika.
--memoryMemori per replika.
--dataPemasangan PVC dalam format
<pvc-name>:<mount-path>. Jalankanarena data listuntuk melihat daftar PVC yang tersedia.--config-filePemasangan file lokal dalam format
<local-path>:<container-path>.--model-repositoryDirektori repositori model Triton. Setiap subdirektori merepresentasikan satu model beserta file konfigurasinya.
--http-portPort HTTP Triton.
--grpc-portPort gRPC 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=trueOutput yang diharapkan:
configmap/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 status -
Verifikasi bahwa layanan sedang berjalan. Tunggu hingga
Availablemenunjukkan1.arena serve get triton-vllmOutput yang diharapkan:
Name: 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)
kubectl port-forward hanya untuk pengembangan dan debugging — tidak andal, aman, atau dapat diskalakan untuk produksi. Untuk jaringan produksi, lihat Ikhtisar Ingress.
-
Siapkan penerusan port:
kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000Output yang diharapkan:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Kirim permintaan uji ke titik akhir generate. Ganti
qwen-4bdengan nama model Anda jika berbeda.curl -X POST localhost:8000/v2/models/qwen-4b/generate \ -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'Output yang diharapkan:
{"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