Déployez Qwen1.5-4B-Chat en tant que service d'inférence sur ACK à l'aide de Triton et vLLM sur des GPU T4 ou A10.
Contexte
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat est un grand modèle de langage (LLM) basé sur l'architecture Transformer, comptant 4 milliards de paramètres et développé par Alibaba Cloud. Il a été entraîné sur du texte web, des ouvrages spécialisés et du code. Consultez le dépôt GitHub Qwen.
Triton Inference Server
Triton Inference Server est un framework d'inférence open source développé par NVIDIA. Il prend en charge plusieurs backends, notamment TensorRT, TensorFlow, PyTorch, ONNX et vLLM.
Fonctionnalités principales :
Prise en charge de multiples frameworks d'apprentissage automatique et d'apprentissage profond
Exécution simultanée de modèles
Mise en lots continue (continuous batching)
Métriques intégrées : utilisation du GPU, latence et débit
Consultez le dépôt GitHub Triton Inference Server.
vLLM
vLLM est un framework d'inférence haute performance qui prend en charge la plupart des LLM populaires, y compris Qwen. Il utilise PagedAttention, la mise en lots continue et la quantification pour améliorer le débit d'inférence. Consultez le dépôt GitHub vLLM.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACK Pro avec des nœuds accélérés par GPU (Kubernetes 1.22 ou version ultérieure, ≥16 Go de mémoire GPU par nœud).
La version 525 du pilote GPU installée sur les nœuds GPU. Ajoutez le libellé
ack.aliyun.com/nvidia-driver-version:525.105.17pour fixer la version du pilote.La dernière version du client Arena installée.
Étape 1 : Préparer les données du modèle
Téléchargez Qwen1.5-4B-Chat, importez-le vers Object Storage Service (OSS), puis créez des volumes persistants (PV) et des revendications de volume persistant (PVC) dans votre cluster.
Pour connaître les autres modèles pris en charge par vLLM, consultez Modèles pris en charge. Pour utiliser NAS au lieu d'OSS, reportez-vous à Monter un volume NAS provisionné statiquement.
Télécharger le modèle
-
Installez Git :
# Use yum install git or apt install git yum install git -
Installez Git LFS :
# Use yum install git-lfs or apt install git-lfs yum install git-lfs -
Clonez Qwen1.5-4B-Chat depuis ModelScope :
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git -
Accédez au répertoire et récupérez les fichiers volumineux :
cd Qwen1.5-4B-Chat git lfs pull
Importer le modèle vers OSS
Connectez-vous à la console OSS et notez le nom de votre bucket. Créez un bucket si nécessaire.
-
Créez un répertoire dans OSS et importez le modèle :
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
Créer des PV et des PVC
Créez un PV et un PVC pour monter les données du modèle OSS dans le cluster.
Paramètres du PV
|
Paramètre |
Valeur |
|
PV Type |
OSS |
|
Volume Name |
llm-model |
|
Access Certificate |
ID AccessKey et secret AccessKey pour l'accès au bucket OSS. |
|
Bucket ID |
Nom de votre bucket OSS. |
|
OSS Path |
Chemin du modèle, par exemple /models/Qwen1.5-4B-Chat. |
Paramètres du PVC
|
Paramètre |
Valeur |
|
PVC Type |
OSS |
|
Name |
llm-model |
|
Allocation Mode |
Existing Volumes |
|
Existing Volumes |
Sélectionnez le PV que vous avez créé |
Étape 2 : Configurer Triton avec vLLM
Créez deux fichiers de configuration : config.pbtxt pour le backend Triton, et model.json pour les paramètres du moteur vLLM.
Créer la configuration du backend
Créez un répertoire de travail et le fichier config.pbtxt :
mkdir triton-vllm
cat << EOF > triton-vllm/config.pbtxt
backend: "vllm"
# The usage of device is deferred to the vLLM engine
instance_group [
{
count: 1
kind: KIND_MODEL
}
]
version_policy: { all { }}
EOF
Créer la configuration du modèle
model.json définit les paramètres du moteur vLLM. Choisissez la configuration adaptée à votre type de GPU.
vLLM alloue agressivement la mémoire GPU au démarrage. gpu_memory_utilization contrôle cette allocation : la valeur 0.95 réserve 95 % de la mémoire GPU. Réduisez cette valeur si d'autres charges de travail partagent le GPU afin d'éviter les erreurs de mémoire insuffisante.
GPU A10 (production)
Les GPU A10 offrent un débit plus élevé et prennent en charge la précision bfloat16. Utilisez des GPU A10 pour les charges de travail de production.
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 (test)
Les GPU T4 sont largement disponibles et économiques, mais ne prennent pas en charge bf16. Définissez dtype sur half (FP16) et réduisez max_model_len pour respecter la limite de mémoire de 16 Go.
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
Paramètres clés
|
Paramètre |
Description |
|
|
Longueur maximale de la séquence de tokens. Des valeurs plus élevées améliorent la qualité de la conversation, mais consomment davantage de mémoire GPU. |
|
|
Précision du modèle. Définissez cette valeur sur |
|
|
Fraction de la mémoire GPU allouée au modèle. Valeur par défaut : 0,9. |
Consultez les Arguments du moteur de vLLM pour l'ensemble des paramètres, ainsi que Déploiement d'un modèle vLLM dans Triton pour des exemples.
Étape 3 : Déployer le service d'inférence
Utilisez Arena pour déployer le service d'inférence Qwen1.5-4B-Chat avec Triton et vLLM.
-
Exportez les chemins des fichiers de configuration en tant que variables d'environnement :
export triton_config_file="triton-vllm/config.pbtxt" export model_config_file="triton-vllm/model.json" -
Déployez le service d'inférence :
Paramètres
Paramètre
Description
--nameNom du service d'inférence.
--versionVersion du service d'inférence.
--imageImage du serveur Triton.
--gpusNombre de GPU par réplica.
--cpuCœurs CPU par réplica.
--memoryMémoire par réplica.
--dataMontage du PVC au format
<pvc-name>:<mount-path>. Exécutezarena data listpour répertorier les PVC disponibles.--config-fileMontage du fichier local au format
<local-path>:<container-path>.--model-repositoryRépertoire du dépôt de modèles Triton. Chaque sous-répertoire représente un modèle avec ses fichiers de configuration.
--http-portPort HTTP Triton.
--grpc-portPort gRPC Triton.
--allow-metricsExpose les métriques d'inférence (utilisation du GPU, latence, débit).
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=trueRésultat attendu :
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 -
Vérifiez que le service est en cours d'exécution. Attendez que la colonne
Availableaffiche1.arena serve get triton-vllmRésultat attendu :
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
Étape 4 : Vérifier le service d'inférence
Redirection de port (développement uniquement)
La commande kubectl port-forward est destinée exclusivement au développement et au débogage. Elle n'est ni fiable, ni sécurisée, ni évolutive pour la production. Pour la mise en réseau en production, consultez la présentation d'Ingress.
-
Configurez la redirection de port :
kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000Résultat attendu :
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Envoyez une requête de test au point de terminaison generate. Remplacez
qwen-4bpar le nom de votre modèle s'il diffère.curl -X POST localhost:8000/v2/models/qwen-4b/generate \ -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'Résultat attendu :
{"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"}
(Facultatif) Nettoyer les ressources
Supprimez le service d'inférence et les ressources de stockage lorsque vous n'en avez plus besoin :
# Delete the inference service
arena serve del triton-vllm
# Delete the PVC and PV
kubectl delete pvc llm-model
kubectl delete pv llm-model