Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Deploy a Qwen inference service with vLLM

Dernière mise à jour :Aug 11, 2026

Déployez Qwen1.5-4B-Chat en tant que service d'inférence sur un nœud GPU unique A10 ou T4 dans ACK avec vLLM et Arena.

Prérequis

Assurez-vous de disposer des éléments suivants :

  • Un cluster ACK Pro doté de nœuds accélérés par GPU exécutant Kubernetes 1.22 ou une version ultérieure, chacun disposant d'au moins 16 Go de mémoire GPU. Consultez la page Créer un cluster ACK managé.

  • La dernière version du client Arena. Consultez la section Configurer le client Arena.

Remarque

Utilisez la version 525 du pilote GPU. Ajoutez le libellé ack.aliyun.com/nvidia-driver-version:525.105.17 à vos nœuds accélérés par GPU. Consultez la page Spécifier une version de pilote NVIDIA pour les nœuds en ajoutant un libellé.

Contexte

Qwen1.5-4B-Chat

Qwen1.5-4B-Chat est un LLM basé sur l'architecture Transformer comptant 4 milliards de paramètres, développé par Alibaba Cloud et entraîné sur du texte web, des livres spécialisés et du code. Consultez le référentiel GitHub Qwen.

vLLM

vLLM est un framework d'inférence LLM open source optimisé pour un débit élevé et une faible latence. Il prend en charge la plupart des LLM largement utilisés, y compris Qwen, et utilise PagedAttention, le regroupement continu (continuous batching) et la quantification pour améliorer l'efficacité. Consultez le référentiel GitHub vLLM.

Étape 1 : Préparer les données du modèle

Téléchargez Qwen1.5-4B-Chat, importez-le dans Object Storage Service (OSS), puis créez un volume persistant (PV) et une revendication de volume persistant (PVC) dans votre cluster ACK.

Remarque

Vous pouvez également stocker le modèle dans File Storage NAS au lieu d'OSS. Consultez la page Monter un volume NAS provisionné de manière statique.

Télécharger le modèle

  1. Installez Git :

       # Run yum install git or apt install git.
       yum install git
  2. Installez Git Large File Storage (Git LFS) :

       # Run yum install git-lfs or apt install git-lfs.
       yum install git-lfs
  3. Clonez Qwen1.5-4B-Chat depuis ModelScope :

       GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
  4. Accédez au répertoire Qwen1.5-4B-Chat et récupérez les fichiers Git LFS :

       cd Qwen1.5-4B-Chat
       git lfs pull

Importer le modèle dans OSS

  1. Connectez-vous à la console OSS et notez le nom de votre bucket. Pour en créer un, consultez la page Créer un bucket.

  2. Installez et configurez ossutil. Consultez la page Installer ossutil.

  3. Créez un répertoire Qwen1.5-4B-Chat dans votre bucket OSS :

       ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
  4. Importez les fichiers du modèle dans OSS :

       ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat

Créer un PV et un PVC

Créez un PV et un PVC dans votre cluster ACK pour monter le modèle depuis OSS. Consultez la page Monter un volume OSS provisionné de manière statique.

Paramètres du PV :

Parameter Description
PV Type OSS
Volume Name llm-model
Access Certificate AccessKey ID et AccessKey secret pour le bucket OSS
Bucket ID Nom de votre bucket OSS
OSS Path Chemin d'accès au modèle, par exemple /models/Qwen1.5-4B-Chat

Paramètres du PVC :

Parameter Description
PVC Type OSS
Volume Name llm-model
Allocation Mode Sélectionnez Existing Volumes
Existing Volumes Cliquez sur Existing Volumes et sélectionnez votre PV

Étape 2 : Déployer le service d'inférence

Arena traite les fichiers de modèle comme un ensemble de données. Utilisez --data pour monter le modèle dans le conteneur. Dans cet exemple, le chemin de montage est /model/Qwen1.5-4B-Chat.

Le paramètre --max-model-len définit la longueur maximale de jetons que le modèle peut traiter. Des valeurs plus élevées améliorent la qualité des interactions, mais consomment davantage de mémoire GPU. Consultez le référentiel de code vLLM sur GitHub pour obtenir la liste complète des paramètres disponibles.

Choisir un type de GPU

GPU Use case max-model-len Additional parameters
NVIDIA A10 Production (hautes performances) 16384 Aucun
NVIDIA T4 Tests (coût réduit) 8192 --dtype half

Déployer le service

Choisissez une commande en fonction de votre type de GPU.

NVIDIA A10 (recommandé pour la production)

arena serve custom \
    --name=vllm-qwen-4b-chat \
    --version=v1 \
    --gpus=1 \
    --replicas=1 \
    --restful-port=8000 \
    --readiness-probe-action="tcpSocket" \
    --readiness-probe-action-option="port: 8000" \
    --readiness-probe-option="initialDelaySeconds: 30" \
    --readiness-probe-option="periodSeconds: 30" \
    --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/vllm:0.4.1-ubuntu22.04 \
    --data=llm-model:/model/Qwen1.5-4B-Chat \
    "python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 16384"

NVIDIA T4 (pour les tests)

arena serve custom \
    --name=vllm-qwen-4b-chat \
    --version=v1 \
    --gpus=1 \
    --replicas=1 \
    --restful-port=8000 \
    --readiness-probe-action="tcpSocket" \
    --readiness-probe-action-option="port: 8000" \
    --readiness-probe-option="initialDelaySeconds: 30" \
    --readiness-probe-option="periodSeconds: 30" \
    --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/vllm:0.4.1-ubuntu22.04 \
    --data=llm-model:/model/Qwen1.5-4B-Chat \
    "python3 -m vllm.entrypoints.openai.api_server --trust-remote-code --model /model/Qwen1.5-4B-Chat/ --gpu-memory-utilization 0.95 --max-model-len 8192 --dtype half"
Remarque

Le T4 utilise --max-model-len 8192 (contre 16384 pour l'A10) et ajoute --dtype half afin de respecter les contraintes de mémoire du T4.

Paramètres Arena :

Parameter Description
--name Nom du service d'inférence
--version Version du service d'inférence
--gpus Nombre de GPU par réplica
--replicas Nombre de réplicas
--restful-port Port du service d'inférence
--readiness-probe-action Type de sonde de disponibilité. Valeurs valides : HttpGet, Exec, gRPC et TCPSocket
--readiness-probe-action-option Méthode de connexion de la sonde de disponibilité
--readiness-probe-option Configuration de la sonde de disponibilité
--data Monte un PVC partagé. Format : PVCName:MountPath. Utilisez arena data list pour interroger les PVC disponibles
--image Image de conteneur pour le service d'inférence

Sortie attendue :

service/vllm-qwen-4b-chat-v1 created
deployment.apps/vllm-qwen-4b-chat-v1-custom-serving created
INFO[0008] The Job vllm-qwen-4b-chat has been submitted successfully
INFO[0008] You can run `arena serve get vllm-qwen-4b-chat --type custom-serving -n default` to check the job status

Vérifier le déploiement

Vérifiez l'état du service d'inférence :

arena serve get vllm-qwen-4b-chat

Sortie attendue :

Name:       vllm-qwen-4b-chat
Namespace:  default
Type:       Custom
Version:    v1
Desired:    1
Available:  1
Age:        36m
Address:    172.16.XX.XX
Port:       RESTFUL:8000
GPU:        1

Instances:
  NAME                                                  STATUS   AGE  READY  RESTARTS  GPU  NODE
  ----                                                  ------   ---  -----  --------  ---  ----
  vllm-qwen-4b-chat-v1-custom-serving-6d7c786b9f-z6nfk  Running  36m  1/1    0         1    cn-beijing.192.168.XX.XX

Lorsque Available correspond à Desired et que le statut de l'instance est Running, le service est prêt.

Étape 3 : Tester le service d'inférence

Configurer la redirection de port

Important

La redirection de port avec kubectl port-forward est réservée au développement et au débogage. Pour la production, utilisez un Ingress.

Redirigez le port 8000 vers votre machine locale :

kubectl port-forward svc/vllm-qwen-4b-chat-v1 8000:8000

Sortie attendue :

Forwarding from 127.0.0.1:8000 -> 8000
Forwarding from [::1]:8000 -> 8000

Envoyer une requête de test

Ouvrez un nouveau terminal et envoyez une requête 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": "Test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'

Sortie attendue :

{"id":"cmpl-503270b21fa44db2b6b3c3e0abaa3c02","object":"chat.completion","created":1717141209,"model":"/model/Qwen1.5-4B-Chat/","choices":[{"index":0,"message":{"role":"assistant","content":"OK. What do you want to test?"},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"usage":{"prompt_tokens":21,"total_tokens":30,"completion_tokens":9}}

vLLM expose une API compatible OpenAI au niveau du point de terminaison /v1/chat/completions.

(Facultatif) Nettoyer les ressources

Supprimez les ressources inutilisées afin d'éviter des coûts inutiles.

Supprimez le service d'inférence :

arena serve delete vllm-qwen-4b-chat

Supprimez le PVC et le PV :

kubectl delete pvc llm-model
kubectl delete pv llm-model

Étapes suivantes

  • Configurez un Ingress pour exposer le service d'inférence en production.

  • Pour déployer d'autres modèles Qwen, ajustez --max-model-len et --gpu-memory-utilization en fonction de la taille du modèle et de la mémoire GPU.

  • Consultez le référentiel GitHub vLLM pour connaître les options de configuration.