Container Compute Service (ACS) le permite ejecutar inference de LLM acelerada por GPU sin administrar el hardware subyacente ni los nodos de GPU. Todas las configuraciones funcionan de forma inmediata y la facturación es pay-as-you-go. ACS resulta ideal para tareas de inference de modelos de lenguaje grandes (LLM) y ayuda a reducir los costos de inference. En este tema se explica cómo desplegar un servicio de inference listo para producción con un modelo destilado de DeepSeek en ACS mediante el framework vLLM.
Contexto
DeepSeek-R1
vLLM
Arena
Requisitos previos
Antes de empezar, compruebe que cuenta con lo siguiente:
El rol predeterminado del sistema asignado a la cuenta de servicio (obligatorio cuando usa Alibaba Cloud por primera vez). Esto permite que ACS invoque servicios dependientes como Elastic Compute Service (ECS), Object Storage Service (OSS), Apsara File Storage NAS, Cloud Parallel File Storage (CPFS) y Server Load Balancer (SLB), cree clústeres y guarde registros. ACS solo puede usar estas funciones después de que se otorgue correctamente este rol. Para obtener más detalles, consulte Get started with Container Compute Service.
Un clúster de ACS en una región y zona que proporcione recursos de GPU. Consulte Crear un clúster de ACS.
El cliente Arena instalado. Consulte Configure the Arena client.
Elija una especificación de instancia de GPU
Durante la inference, la memoria de la GPU se consume principalmente por los pesos del modelo, la caché KV y los búferes de tiempo de ejecución. Use la fórmula a continuación para estimar la memoria mínima de GPU obligatoria:
GPU memory = number of model parameters × bytes per parameter
Para un modelo 7B FP16: 7 × 10⁹ × 2 bytes ≈ 13.04 GiB. También debe considerar el tamaño de la caché KV necesaria durante el cálculo, la utilización de la GPU y el búfer reservado para estos elementos. Por ello, la especificación sugerida para el modelo 7B es 1 GPU con 24 GiB de memoria, 8 vCPU y 32 GiB de RAM.
La tabla a continuación muestra las especificaciones sugeridas para cada modelo destilado de DeepSeek compatible. Para consultar la lista completa de modelos y especificaciones de GPU disponibles en ACS, vea GPU models and specifications. Para obtener detalles sobre la facturación, consulte Billing overview.
Modelo | Tamaño | Tamaño del modelo (GB) | Especificación recomendada | ||
vCPU | RAM | Memoria de GPU | |||
DeepSeek-R1-Distill-Qwen-1.5B | 1.5B | 3.55 GB | 4 o 6 | 30 GiB | 24 GiB |
DeepSeek-R1-Distill-Qwen-7B | 7B | 15.23 GB | 6 u 8 | 32 GiB | 24 GiB |
DeepSeek-R1-Distill-Llama-8B | 8B | 16.06 GB | 6 u 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 |
Compruebe que la especificación elegida cumpla con ACS pod specification adjustment logic.
De forma predeterminada, cada pod de ACS proporciona 30 GiB de EphemeralStorage gratuito. La imagen de inference inference-nv-pytorch:25.02-vllm0.7.2-sglang0.4.3.post2-pytorch2.5-cuda12.4-20250305-serverless que se usa en este ejemplo ocupa aproximadamente 9.8 GiB. Si necesita más espacio, consulte Increase the temporary storage space size.
Procedimientos
Paso 1: Prepare los archivos del modelo
Descargar y cargar el modelo suele tomar entre 1 y 2 horas. Para ahorrar tiempo, envíe un ticket para que los archivos del modelo se copien directamente en su bucket de OSS.
-
Descargue el modelo DeepSeek-R1-Distill-Qwen-7B desde ModelScope con git-lfs.
NotaCompruebe si git-lfs está instalado. Si no lo está, instálelo con el comando
yum install git-lfsoapt-get install git-lfs. Consulte Instalar 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 -
Cree un directorio de OSS y cargue los archivos del modelo.
NotaPara instalar ossutil, consulte Install 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 -
Cree un PV y un PVC. Configure un volumen persistente (PV) llamado
llm-modely una solicitud de volumen persistente (PVC) para el clúster de destino. Para ver una guía completa, consulte Use an OSS static volume.Use los parámetros a continuación al crear el PV:
Parameter
Value
Tipo de PV
OSS
Nombre del volumen
llm-modelCertificado de acceso
El AccessKey ID y el AccessKey secret de su bucket de OSS
ID del bucket
El bucket de OSS que creó en el paso anterior
Ruta de OSS
/models/DeepSeek-R1-Distill-Qwen-7BUse los parámetros a continuación al crear el PVC:
Parameter
Value
Tipo de PVC
OSS
Nombre
llm-modelModo de asignación
Volúmenes existentes
Volúmenes existentes
Seleccione el PV creado anteriormente
Ejemplo de 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
Paso 2: Despliegue el modelo
-
Ejecute el comando a continuación para desplegar el servicio de inference de vLLM. Este servicio expone una API HTTP compatible con OpenAI.
La marca
--datamonta el PVC del modelo en/model/DeepSeek-R1-Distill-Qwen-7Bdentro del contenedor. La marca--max-model-lenestablece la longitud máxima del contexto en tokens. Aumentarla puede mejorar la calidad de conversación del modelo, pero consume más memoria de GPU.NotaReemplace
<example-model>en--label=alibabacloud.com/gpu-model-series=<example-model>por la serie real de modelo de GPU compatible con su clúster de ACS. Envíe un ticket para obtener la lista de series de modelos de GPU disponibles.egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/{image:tag}es una dirección de registro público. Para reducir el tiempo de descarga de la imagen, se recomienda using VPC to accelerate AI container image pulls.
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"El resultado esperado es el siguiente:
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 statusLa tabla a continuación describe los parámetros clave.
Parameter
Description
--nameNombre del servicio de inference
--versionVersión del servicio de inference
--gpusNúmero de GPU por réplica
--cpuNúmero de vCPU por réplica
--memoryCantidad de memoria por réplica
--replicasNúmero de réplicas
--labelEtiquetas que specify ACS GPU compute power. Establezca
alibabacloud.com/compute-class=gpuyalibabacloud.com/gpu-model-series=<example-model>--restful-portPuerto que expone el servicio de inference
--readiness-probe-actionTipo de conexión para las pruebas de disponibilidad. Valores válidos:
httpGet,exec,grpc,tcpSocket--readiness-probe-action-optionMétodo de conexión para las pruebas de disponibilidad
--readiness-probe-optionConfiguración de la prueba de disponibilidad
--imageImagen de contenedor para el servicio de inference
--dataMonta un PVC en el contenedor. Formato:
<pvc-name>:<mount-path>. Ejecutearena data listpara listar los PVC disponibles -
Para comprobar el estado del despliegue, ejecute:
arena serve get deepseek-r1Resultado esperado:
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
Paso 3: Compruebe el servicio de inference
-
Use
kubectl port-forwardpara configurar el reenvío de puertos desde su computadora local hacia el servicio de inference.NotaEl reenvío de puertos que configura
kubectl port-forwardno ofrece la confiabilidad, seguridad ni escalabilidad necesarias para producción. Por lo tanto, está diseñado únicamente para fines de desarrollo y depuración, y no es adecuado para entornos de producción. Para obtener más información sobre soluciones de red listas para producción en clústeres de Kubernetes, consulte Ingress management.kubectl port-forward svc/deepseek-r1-v1 8000:8000Resultado esperado:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
Envíe una solicitud de prueba al endpoint de finalización de chat compatible con 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 }'Resultado esperado:
{ "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 } }
(Opcional) Paso 4: Limpie los recursos
Elimine el servicio de inference y los recursos de almacenamiento cuando ya no los necesite.
-
Elimine el servicio de inference.
arena serve delete deepseek-r1Resultado esperado:
INFO[0007] The serving job deepseek-r1 with version v1 has been deleted successfully -
Elimine el PVC y el PV.
kubectl delete pvc llm-model kubectl delete pv llm-modelResultado esperado:
persistentvolumeclaim "llm-model" deleted persistentvolume "llm-model" deleted
Pasos siguientes
La capacidad de cómputo de GPU de ACS también está disponible en clústeres Container Service for Kubernetes (ACK) Pro. Consulte Use the computing power of ACS in ACK Pro clusters.
-
Para obtener información sobre cómo desplegar modelos de DeepSeek en ACK, consulte los temas a continuación:
-
Para obtener información detallada sobre los modelos DeepSeek R1/V3, consulte los temas a continuación:
Las imágenes de contenedor de IA de ACS son imágenes especializadas para clústeres de ACS que usan instancias de GPU. Para obtener información sobre las imágenes disponibles actualmente, consulte ACS AI container image release notes.