Déployez un service d'inférence Qwen1.5-4B-Chat sur ACK avec rtp-llm, en utilisant des GPU A10 ou T4.
Contexte
Qwen1.5-4B-Chat
Qwen1.5-4B-Chat est un LLM basé sur Transformer de 4 milliards de paramètres, développé par Alibaba Cloud et entraîné sur des textes web, des livres spécialisés et du code. Consultez le dépôt GitHub Qwen.
rtp-llm
rtp-llm est un moteur d'accélération d'inférence pour LLM, développé spécifiquement pour les grands modèles de langage par l'équipe de prédiction des grands modèles d'Alibaba. Ce moteur améliore l'efficacité et les performances d'inférence. rtp-llm présente les caractéristiques suivantes :
Noyaux CUDA haute performance, notamment PagedAttention, FlashAttention et FlashDecoding.
Quantification WeightOnly INT8 et INT4.
Prise en charge d'algorithmes de quantification populaires tels que GPTQ (General Purpose Quantization) et AWQ (Approximate Weight Quantization).
Framework de quantification adaptatif KVCache avec des optimisations détaillées pour la surcharge liée au batching dynamique.
Optimisations pour le matériel GPU V100.
Consultez rtp-llm.
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+, ≥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.Le dernier client Arena est installé.
Étape 1 : Préparer les données du modèle
Téléchargez le modèle Qwen1.5-4B-Chat, importez-le dans OSS, puis créez le PV et le PVC dans votre cluster ACK.
Pour importer le modèle dans NAS, consultez Utiliser des volumes persistants NAS statiques.
Étape 2 : Déployer le service d'inférence
-
Déployez le service d'inférence pour le modèle Qwen1.5-4B-Chat.
Déployez un service d'inférence personnalisé à l'aide d'Arena. Le service rtp-llm-qwen (v1) s'exécute sur un GPU avec un réplica et une sonde de readiness. L'option
--datamonte le PVCllm-modelvers le chemin/model/Qwen1.5-4B-Chatdans le conteneur.Single A10 GPU
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat python3 -m maga_transformer.start_server"Single T4 GPU
arena serve custom \ --name=rtp-llm-qwen \ --version=v1 \ --gpus=1 \ --replicas=1 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --restful-port=8000 \ --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \ --data=llm-model:/model/Qwen1.5-4B-Chat \ "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat MAX_SEQ_LEN=2048 python3 -m maga_transformer.start_server"Résultat attendu :
service/rtp-llm-qwen-v1 created deployment.apps/rtp-llm-qwen-v1-custom-serving created INFO[0001] The Job rtp-llm-qwen has been submitted successfully INFO[0001] You can run `arena serve get rtp-llm-qwen --type custom-serving -n default` to check the job statusLe service d'inférence est déployé.
-
Consultez les détails du service d'inférence et attendez qu'il soit prêt.
arena serve get rtp-llm-qwenRésultat attendu :
Name: rtp-llm-qwen Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 1h Address: 192.168.XX.XX Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- rtp-llm-qwen-v1-custom-serving-696f699485-mn56v Running 1h 1/1 0 1 cn-beijing.192.168.XX.XXLe pod du service d'inférence
rtp-llm-qwen-v1-custom-serving-696f699485-mn56vest en cours d'exécution et prêt.
Étape 3 : Vérifier le service d'inférence
-
Configurez le transfert de port vers le service d'inférence.
Importantkubectl port-forward svc/rtp-llm-qwen-v1 8000:8000Résultat attendu :
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Envoyez une requête au service d'inférence.
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "/model/Qwen1.5-4B-Chat/", "messages": [{"role": "user", "content": "Run a quick test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'Résultat attendu :
{"id":"chat-","object":"chat.completion","created":1717383026,"model":"AsyncModel","choices":[{"index":0,"message":{"role":"assistant","content":"Sure. What would you like me to test for you?"},"finish_reason":"stop"}],"usage":{"prompt_tokens":21,"total_tokens":31,"completion_tokens":10}}Le modèle a généré une réponse au message de test.
(Facultatif) Étape 4 : Nettoyer l'environnement
Si vous n'avez plus besoin des ressources, supprimez-les rapidement pour éviter des frais inutiles.
-
Supprimez le service d'inférence de modèle.
arena serve del rtp-llm-qwen -
Supprimez le PV et le PVC.
kubectl delete pvc llm-model kubectl delete pv llm-model
Annexe : référence des paramètres de commande
| Paramètre | Description | Exemple |
|---|---|---|
serve custom |
Sous-commande Arena. Déploie un service de modèle personnalisé plutôt qu'un type prédéfini tel que tfserving ou triton. |
— |
--name |
Nom du service. Identifiant unique utilisé pour les opérations ultérieures, telles que la consultation des journaux et la suppression du service. | modelscope |
--version |
Version du service. Étiquette de version pour le service, utile pour la gestion des versions et les déploiements progressifs. | v1 |
--gpus |
Nombre de GPU. Nombre de GPU alloués à chaque pod. Requis lorsque le modèle nécessite des GPU pour l'inférence. | 1 |
--replicas |
Nombre de réplicas. Nombre de pods à exécuter. Davantage de réplicas augmentent le débit simultané et la disponibilité. | 1 |
--restful-port |
Port de l'API RESTful. Port sur lequel le service expose son API RESTful pour recevoir les requêtes d'inférence. | 8000 |
--readiness-probe-action |
Type de sonde de readiness. Méthode de vérification utilisée par la sonde de readiness Kubernetes pour déterminer si le conteneur est prêt à recevoir du trafic. | tcpSocket |
--readiness-probe-action-option |
Options du type de sonde. Paramètres pour le type de sonde choisi. Pour tcpSocket, spécifie le port à vérifier. |
port: 8000 |
--readiness-probe-option |
Paramètres supplémentaires de la sonde. Paramètres additionnels pour la sonde de readiness. Cet indicateur peut être répété. Définit le délai initial et l'intervalle de vérification. | initialDelaySeconds: 30, periodSeconds: 30 |
--data |
Montage de volume. Monte un PVC à un chemin spécifié à l'intérieur du conteneur, au format <pvc-name>:<mount-path>. Utilisé pour monter des fichiers de modèle préchargés. |
llm-model:/Qwen1.5-4B-Chat |
--image |
Image de conteneur. URL complète de l'image de conteneur qui définit l'environnement d'exécution pour le service. | kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 |
[COMMAND] |
Commande de démarrage. Commande à exécuter après le démarrage du conteneur. Définit la variable d'environnement MODEL_ID et lance server.py. |
"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py" |