ACS ofrece cómputo GPU serverless con facturación pay-as-you-go, lo que elimina la necesidad de gestionar nodos GPU. Esta guía explica cómo desplegar un servicio de inference del modelo completo DeepSeek-R1, listo para producción, en ACS con vLLM y aceleración RDMA.
Contexto
Modelo DeepSeek-R1
DeepSeek-R1 es el modelo de razonamiento de primera generación de DeepSeek. Se entrenó mediante aprendizaje por refuerzo a gran escala. Este modelo no solo supera a otros modelos de código cerrado, sino que también iguala o excede a OpenAI-O1 en razonamiento matemático, programación y otras pruebas de referencia. Además, tiene un buen rendimiento en tareas basadas en conocimiento y en otros tipos de tareas, como la escritura creativa y las preguntas y respuestas generales. Consulte el repositorio de GitHub de DeepSeek AI para obtener más detalles.
vLLM
vLLM es un framework de inference para LLM eficiente y fácil de usar que admite modelos populares, incluido Qwen. Acelera la inference mediante PagedAttention, procesamiento por lotes continuo y cuantización de modelos. Consulte el repositorio de GitHub de vLLM para obtener más detalles.
ACS
ACS es un servicio de contenedores serverless basado en Kubernetes que proporciona cómputo de propósito general y de GPU sin requerir la gestión de nodos ni de clústeres. La programación integrada, el entorno de ejecución de contenedores, el almacenamiento y la red reducen la complejidad operativa. Por su parte, la facturación pay-as-you-go y el escalado elástico disminuyen los costos. Para la inference de LLM, la aceleración de datos e imágenes de ACS optimiza aún más el tiempo de inicio del modelo y los costos de recursos.
Requisitos previos
Complete los siguientes pasos antes de comenzar:
Cree un clúster de ACS con el rol de servicio predeterminado asignado. Consulte Create an ACS cluster.
Configure kubectl para conectarse a su clúster de ACS. Consulte Obtain the cluster kubeconfig and connect to the cluster by using kubectl.
Especificaciones de la instancia GPU y estimación de costos
El despliegue del modelo completo DeepSeek-R1 en ACS requiere 16 horas de GPU si no se utiliza aceleración. A continuación se muestra la configuración recomendada para una sola instancia:
|
Recurso |
Especificación |
|
GPU |
16 tarjetas (96 GiB de memoria por tarjeta) |
|
CPU |
64 vCPU |
|
Memoria |
512 GiB |
Para obtener información sobre cómo seleccionar especificaciones de instancia, consulte GPU. Para conocer los detalles de facturación, consulte Billing overview.
Las especificaciones de las instancias GPU de ACS siguen la lógica de especificaciones de Pod de ACS.
Los pods de ACS incluyen 30 GiB de almacenamiento efímero gratuito de forma predeterminada. Esta imagen de inference requiere más espacio. Para aumentar el almacenamiento efímero, consulte Overview of ACS pods.
Paso 1: Preparar los archivos del modelo DeepSeek-R1-GPTQ-INT8
Los LLM requieren mucho espacio en disco. Use volúmenes de almacenamiento NAS u OSS para guardar los modelos de forma persistente. En los siguientes pasos se usa OSS como ejemplo.
Nota: Envíe un ticket para obtener los archivos del modelo y la configuración YAML de despliegue, que incluye lo siguiente:
Archivos del modelo: DeepSeek-R1-GPTQ-INT8
Modelo de GPU: reemplace la etiqueta
alibabacloud.com/gpu-model-seriescon el modelo de GPU real compatible con ACSImagen base: reemplace la imagen del contenedor con la dirección real de la imagen
Image pull secret: cree un Secret y reemplace el nombre de imagePullSecrets con el nombre real del Secret
(Opcional) Cargar el modelo en OSS
Si descargó los archivos del modelo de manera local, cree un directorio en OSS y cargue el modelo:
ossutil mkdir oss://<your-bucket-name>/models/DeepSeek-R1-GPTQ-INT8
ossutil cp -r /mnt/models/DeepSeek-R1-GPTQ-INT8 oss://<your-bucket-name>/models/DeepSeek-R1-GPTQ-INT8
Crear un PV y un PVC
Cree un PersistentVolume (PV) y un PersistentVolumeClaim (PVC) llamados llm-model para su clúster. Para obtener más información, consulte Use an ossfs 1.0 static volume.
Console
Configure el PV con los siguientes valores:
|
Parámetro |
Valor |
|
Storage Volume Type |
OSS |
|
Name |
llm-model |
|
Access Credentials |
AccessKey ID y AccessKey Secret para acceder a OSS |
|
Bucket ID |
Seleccione su bucket de OSS |
|
OSS Path |
/models/DeepSeek-R1-GPTQ-INT8 |
Configure el PVC con los siguientes valores:
|
Parámetro |
Valor |
|
Storage Claim Type |
OSS |
|
Name |
llm-model |
|
Allocation Mode |
Existing Storage Volume |
|
Existing Storage Volume |
Seleccione el PV que creó |
kubectl
apiVersion: v1
kind: Secret
metadata:
name: oss-secret
stringData:
akId: <your-oss-ak>
akSecret: <your-oss-sk>
---
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>
url: <your-bucket-endpoint>
otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other"
path: /models/DeepSeek-R1-GPTQ-INT8/
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: llm-model
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 30Gi
selector:
matchLabels:
alicloud-pvname: llm-model
Paso 2: Desplegar el modelo con ACS GPU
Despliegue el servicio de inference DeepSeek-R1-GPTQ-INT8 mediante vLLM con aceleración RDMA. El servicio expone una API compatible con OpenAI.
Nota:
El parámetro max-model-len controla la longitud máxima de tokens. Los valores más altos mejoran la calidad de la conversación, pero requieren más memoria GPU. Para DeepSeek-R1-GPTQ-INT8, el máximo recomendado es de aproximadamente 128,000 tokens.
RDMA (Remote Direct Memory Access) proporciona redes sin copia de datos y omisión del kernel. Esto reduce la latencia, aumenta el rendimiento y disminuye el uso de CPU en comparación con TCP/IP. Agregue la etiqueta alibabacloud.com/hpn-type: rdma para habilitarlo. Envíe un ticket para confirmar si su modelo de GPU admite RDMA.
apiVersion: apps/v1
kind: Deployment
metadata:
name: deepseek-r1
namespace: default
labels:
app: deepseek-r1
spec:
replicas: 1
selector:
matchLabels:
app: deepseek-r1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
template:
metadata:
labels:
app: deepseek-r1
alibabacloud.com/compute-class: gpu
alibabacloud.com/gpu-model-series: <example-model>
alibabacloud.com/hpn-type: "rdma"
spec:
imagePullSecrets:
- name: <your-secret-name>
containers:
- name: llm-ds-r1
image: <your-image-address>
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- "vllm serve /data/DeepSeek-R1-GPTQ-INT8 --port 8000 --trust-remote-code --served-model-name ds --max-model-len 128000 --quantization moe_wna16 --gpu-memory-utilization 0.98 --tensor-parallel-size 16"
resources:
limits:
alibabacloud.com/gpu: "16"
cpu: "64"
memory: 512Gi
requests:
alibabacloud.com/gpu: "16"
cpu: "64"
memory: 512Gi
volumeMounts:
- name: llm-model
mountPath: /data/DeepSeek-R1-GPTQ-INT8
- name: shm
mountPath: /dev/shm
restartPolicy: Always
terminationGracePeriodSeconds: 30
volumes:
- name: llm-model
persistentVolumeClaim:
claimName: llm-model
- name: shm
emptyDir:
medium: Memory
sizeLimit: 32Gi
---
apiVersion: v1
kind: Service
metadata:
name: deepseek-r1
spec:
type: ClusterIP
selector:
app: deepseek-r1
ports:
- protocol: TCP
port: 8000
targetPort: 8000
Aplique la configuración:
kubectl apply -f deepseek-r1-deployment.yaml
Paso 3: Comprobar el servicio de inference
-
Configure el reenvío de puertos hacia el servicio de inference:
kubectl port-forward svc/deepseek-r1 8000:8000Resultado esperado:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000Importante: el reenvío de puertos de kubectl solo es adecuado para desarrollo y depuración. No ofrece la confiabilidad, seguridad ni escalabilidad que exige un entorno de producción. Para entornos de producción, consulte Get started with ALB Ingress.
-
Envíe una solicitud de inference de prueba:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "ds", "messages": [ { "role": "user", "content": "Explain the concept of reinforcement learning in simple terms." } ], "max_tokens": 1024, "temperature": 0.7, "top_p": 0.9, "seed": 10 }'Una respuesta exitosa confirma que el servicio se está ejecutando.
Resultado
Ha desplegado un servicio de inference del modelo completo DeepSeek-R1 en ACS con aceleración GPU. El servicio expone una API compatible con OpenAI, lista para integrarse con sus aplicaciones.