Container Compute Service (ACS) vous permet d'exécuter l'inférence de grands modèles de langage (LLM) accélérée par GPU sans gérer le matériel sous-jacent ni les nœuds GPU. Toutes les configurations sont opérationnelles dès le déploiement et la facturation s'effectue au paiement à l'utilisation. ACS est idéal pour les tâches d'inférence de LLM et contribue à réduire les coûts associés. Cette rubrique vous guide pas à pas dans le déploiement d'un service d'inférence prêt pour la production basé sur un modèle DeepSeek distillé sur ACS, en utilisant le framework vLLM.
Contexte
DeepSeek-R1
vLLM
Arena
Prérequis
Avant de commencer, assurez-vous d'avoir :
Attribué le rôle système par défaut au compte de service (obligatoire lors de la première utilisation d'Alibaba Cloud) afin qu'ACS puisse appeler les services dépendants tels que Elastic Compute Service (ECS), Object Storage Service (OSS), Apsara File Storage NAS, Cloud Parallel File Storage (CPFS) et Server Load Balancer (SLB), créer des clusters et enregistrer les journaux. ACS ne peut utiliser ces fonctionnalités qu'après l'attribution correcte de ce rôle. Pour plus de détails, consultez la rubrique Prise en main de Container Compute Service.
Un cluster ACS déployé dans une région et une zone disposant de ressources GPU. Consultez la documentation Créer un cluster ACS.
Le client Arena installé. Consultez la rubrique Configurer le client Arena.
Choisissez une spécification d'instance GPU
Lors de l'inférence, la mémoire GPU est principalement consommée par les poids du modèle, le cache KV et les tampons d'exécution. Utilisez la formule suivante pour estimer la mémoire GPU minimale requise :
GPU memory = number of model parameters × bytes per parameter
Pour un modèle 7B en FP16 : 7 × 10⁹ × 2 bytes ≈ 13.04 GiB. Comme vous devez également prendre en compte la taille du cache KV nécessaire durant le calcul, l'utilisation du GPU et la mémoire tampon qui leur est réservée, la spécification recommandée pour le modèle 7B est 1 GPU avec 24 GiB de mémoire, 8 vCPU et 32 GiB de RAM.
Le tableau ci-dessous répertorie les spécifications suggérées pour chaque modèle DeepSeek distillé pris en charge. Pour la liste complète des modèles GPU et des spécifications disponibles dans ACS, consultez la rubrique Modèles et spécifications GPU. Pour les détails sur la facturation, consultez la rubrique Aperçu de la facturation.
Model | Size | Model size (GB) | Specification recommended | ||
vCPUs | RAM | GPU memory | |||
DeepSeek-R1-Distill-Qwen-1,5B | 1.5B | 3.55 GB | 4 or 6 | 30 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-7B | 7B | 15.23 GB | 6 or 8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Llama-8B | 8B | 16.06 GB | 6 or 8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-14B | 14B | 29.54 GB | 8+ | 64 GiB | 48 GiB |
DeepSeek-R1-Distill-Qwen-32B | 32B | 74.32 GB | 8+ | 128 GiB | 96 GiB |
DeepSeek-R1-Distill-Llama-70B | 70B | 140.56 GB | 12+ | 128 GiB | 192 GiB |
Assurez-vous que la spécification choisie respecte la logique d'ajustement des spécifications de pod ACS.
Par défaut, chaque pod ACS fournit 30 GiB d'EphemeralStorage gratuit. L'image d'inférence inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12,4-20250305-serverless utilisée dans cet exemple pèse environ 9,8 GiB. Si vous avez besoin de plus d'espace, consultez la rubrique Augmenter la taille de l'espace de stockage temporaire.
Procédure
Étape 1 : Préparez les fichiers du modèle
Le téléchargement et le téléversement du modèle prennent généralement entre 1 et 2 heures. Pour gagner du temps, soumettez un ticket afin que les fichiers du modèle soient copiés directement dans votre bucket OSS.
-
Téléchargez le modèle DeepSeek-R1-Distill-Qwen-7B depuis ModelScope en utilisant git-lfs.
RemarqueVérifiez si git-lfs est installé. Sinon, installez-le en exécutant
yum install git-lfsouapt-get install git-lfs. Consultez la documentation Install Git Large File Storage.git lfs install GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git cd DeepSeek-R1-Distill-Qwen-7B/ git lfs pull -
Créez un répertoire OSS et téléversez les fichiers du modèle.
RemarquePour installer ossutil, consultez la rubrique Installer ossutil.
ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B ossutil cp -r ./DeepSeek-R1-Distill-Qwen-7B oss://<your-bucket-name>/models/DeepSeek-R1-Distill-Qwen-7B -
Créez un PV et un PVC. Configurez un volume persistant (PV) nommé
llm-modelet une revendication de volume persistant (PVC) pour le cluster cible. Pour une procédure détaillée, consultez la rubrique Utiliser un volume statique OSS.Utilisez les paramètres suivants lors de la création du PV :
Parameter
Value
PV type
OSS
Volume name
llm-modelAccess certificate
L'ID AccessKey et le secret AccessKey de votre bucket OSS
Bucket ID
Le bucket OSS créé à l'étape précédente
OSS path
/models/DeepSeek-R1-Distill-Qwen-7BUtilisez les paramètres suivants lors de la création du PVC :
Parameter
Value
PVC type
OSS
Name
llm-modelAllocation mode
Existing volumes
Existing volumes
Sélectionnez le PV créé précédemment
Exemple YAML :
apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: <your-oss-ak> # AccessKey ID for the OSS bucket akSecret: <your-oss-sk> # AccessKey secret for the OSS bucket --- apiVersion: v1 kind: PersistentVolume metadata: name: llm-model labels: alicloud-pvname: llm-model spec: capacity: storage: 30Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: llm-model nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: <your-bucket-name> # Name of the OSS bucket url: <your-bucket-endpoint> # Endpoint, for example, oss-cn-hangzhou-internal.aliyuncs.com otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: <your-model-path> # Model path, for example, /models/DeepSeek-R1-Distill-Qwen-7B/ --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: llm-model spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: llm-model
Étape 2 : Déployez le modèle
-
Exécutez la commande suivante pour déployer le service d'inférence vLLM. Le service expose une API HTTP compatible avec OpenAI.
L'option
--datamonte le PVC du modèle vers/model/DeepSeek-R1-Distill-Qwen-7Bà l'intérieur du conteneur. L'option--max-model-lendéfinit la longueur maximale du contexte en tokens ; son augmentation peut améliorer la qualité des conversations du modèle, mais risque de consommer davantage de mémoire GPU.RemarqueRemplacez
<example-model>dans--label=alibabacloud.com/gpu-model-series=<example-model>par la série de modèles GPU réellement prise en charge par votre cluster ACS. Soumettez un ticket pour obtenir la liste des séries de modèles GPU disponibles.egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/{image:tag}est une adresse de registre public. Pour réduire le temps de tirage d'image, nous recommandons d'utiliser le VPC pour accélérer le tirage des images de conteneurs IA.
arena serve custom \ --name=deepseek-r1 \ --version=v1 \ --gpus=1 \ --cpu=8 \ --memory=32Gi \ --replicas=1 \ --label=alibabacloud.com/compute-class=gpu \ --label=alibabacloud.com/gpu-model-series=<example-model> \ --restful-port=8000 \ --readiness-probe-action="tcpSocket" \ --readiness-probe-action-option="port: 8000" \ --readiness-probe-option="initialDelaySeconds: 30" \ --readiness-probe-option="periodSeconds: 30" \ --image=egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12.4-20250305-serverless \ --data=llm-model:/models/DeepSeek-R1-Distill-Qwen-7B \ "vllm serve /models/DeepSeek-R1-Distill-Qwen-7B --port 8000 --trust-remote-code --served-model-name deepseek-r1 --max-model-len 32768 --gpu-memory-utilization 0.95 --enforce-eager"Le résultat attendu est le suivant :
service/deepseek-r1-v1 created deployment.apps/deepseek-r1-v1-custom-serving created INFO[0004] The Job deepseek-r1 has been submitted successfully INFO[0004] You can run `arena serve get deepseek-r1 --type custom-serving -n default` to check the job statusLe tableau suivant décrit les paramètres clés.
Parameter
Description
--nameNom du service d'inférence
--versionVersion du service d'inférence
--gpusNombre de GPU par réplica
--cpuNombre de vCPU par réplica
--memoryQuantité de mémoire par réplica
--replicasNombre de réplicas
--labelLibellés qui spécifient la puissance de calcul GPU d'ACS. Définissez
alibabacloud.com/compute-class=gpuetalibabacloud.com/gpu-model-series=<example-model>--restful-portPort exposé par le service d'inférence
--readiness-probe-actionType de connexion pour les sondes de readiness. Valeurs valides :
httpGet,exec,grpc,tcpSocket--readiness-probe-action-optionMéthode de connexion pour les sondes de readiness
--readiness-probe-optionConfiguration de la sonde de readiness
--imageImage de conteneur pour le service d'inférence
--dataMonte un PVC dans le conteneur. Format :
<pvc-name>:<mount-path>. Exécutezarena data listpour lister les PVC disponibles -
Pour vérifier l'état du déploiement, exécutez :
arena serve get deepseek-r1Résultat attendu :
Name: deepseek-r1 Namespace: default Type: Custom Version: v1 Desired: 1 Available: 1 Age: 6h Address: 10.0.78.27 Port: RESTFUL:8000 GPU: 1 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- deepseek-r1-v1-custom-serving-54d579d994-dqwxz Running 1h 1/1 0 1 virtual-kubelet-cn-hangzhou-b
Étape 3 : Vérifiez le service d'inférence
-
Utilisez
kubectl port-forwardpour configurer la redirection de port depuis votre machine locale vers le service d'inférence.RemarqueLa redirection de port établie par
kubectl port-forwardn'offre pas la fiabilité, la sécurité ou l'évolutivité requises pour un environnement de production. Elle est donc destinée uniquement au développement et au débogage, et ne convient pas aux environnements de production. Pour plus d'informations sur les solutions de réseau adaptées à la production dans les clusters Kubernetes, consultez la rubrique Gestion Ingress.kubectl port-forward svc/deepseek-r1-v1 8000:8000Résultat attendu :
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Envoyez une requête de test vers le point de terminaison de complétion de chat compatible avec OpenAI.
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-r1", "messages": [ { "role": "user", "content": "Write a letter to my daughter from the future 2035 and tell her to study science and technology well, be the master of science and technology, and promote the development of science and technology and economy. She is now in grade 3." } ], "max_tokens": 1024, "temperature": 0.7, "top_p": 0.9, "seed": 10 }'Résultat attendu :
{ "id": "chatcmpl-53613fd815da46df92cc9b92cd156146", "object": "chat.completion", "created": 1739261570, "model": "deepseek-r1", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "<think>...</think>\n\nDear Future 2035: ..." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 40, "completion_tokens": 994, "total_tokens": 1034 } }
(Facultatif) Étape 4 : Nettoyez les ressources
Supprimez le service d'inférence et les ressources de stockage lorsqu'ils ne sont plus nécessaires.
-
Supprimez le service d'inférence.
arena serve delete deepseek-r1Résultat attendu :
INFO[0007] The serving job deepseek-r1 with version v1 has been deleted successfully -
Supprimez le PVC et le PV.
kubectl delete pvc llm-model kubectl delete pv llm-modelRésultat attendu :
persistentvolumeclaim "llm-model" deleted persistentvolume "llm-model" deleted
Étapes suivantes
La puissance de calcul GPU d'ACS est également disponible dans les clusters ACK Pro. Consultez la rubrique Utiliser la puissance de calcul d'ACS dans les clusters ACK Pro.
-
Pour obtenir des informations sur le déploiement des modèles DeepSeek dans ACK, consultez les rubriques suivantes :
-
Pour des informations détaillées sur les modèles DeepSeek R1/V3, consultez les rubriques suivantes :
Les images de conteneurs IA d'ACS sont des images spécialisées pour les clusters ACS utilisant des instances GPU. Pour obtenir des informations sur les images actuellement disponibles, consultez les notes de version des images de conteneurs IA d'ACS.