Los clústeres administrados Pro de ACK proporcionan un entorno listo para usar donde puede ejecutar servicios de inference de modelos de lenguaje grande (LLM) sin necesidad de hardware GPU local ni configuraciones complejas de dependencias. Esta guía presenta dos rutas de despliegue: una opción rápida para validar un modelo en aproximadamente 15 minutos y una opción orientada a producción que precarga los archivos del modelo en almacenamiento persistente para reducir los tiempos de arranque en frío y los costos de ancho de banda.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster administrado Pro de ACK que ejecute Kubernetes 1.22 o posterior
Como mínimo un nodo acelerado por GPU con 16 GB o más de memoria GPU
El controlador NVIDIA versión 535 o posterior instalado en el node pool de GPU (esta guía utiliza
550.144.03, configurado mediante la etiquetaack.aliyun.com/nvidia-driver-version)Arena client instalado
Selección de la ruta de despliegue
|
Opción 1: Prueba rápida |
Opción 2: Producción |
|
|
Tiempo de configuración |
~15 minutos |
Mayor (se requiere cargar previamente el modelo) |
|
Almacenamiento del modelo |
Se descarga en el contenedor durante el inicio |
Precargado en Object Storage Service (OSS) |
|
Arranque en frío |
Lento: el modelo se vuelve a descargar cada vez que se reinicia el pod |
Rápido: el modelo ya se encuentra en el volumen montado |
|
Recomendado para |
Validar capacidades de inference |
Cargas de trabajo de producción estables y repetibles |
Opción 1: Despliegue rápido para pruebas
Utilice Arena para desplegar qwen/Qwen1.5-4B-Chat desde ModelScope. El contenedor descarga el modelo al iniciarse, por lo que el nodo GPU necesita como mínimo 30 GB de espacio libre en disco.
-
Ejecute el comando de Arena para desplegar el servicio de inference:
arena serve custom \ --name=modelscope \ --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=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=qwen/Qwen1.5-4B-Chat python3 server.py"Para obtener archivos de modelo desde un repositorio de Hugging Face, consulte Pull models from Hugging Face .
La siguiente salida confirma que se crearon los recursos de Kubernetes para
modelscope-v1:service/modelscope-v1 created deployment.apps/modelscope-v1-custom-serving created INFO[0002] The Job modelscope has been submitted successfully INFO[0002] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status -
Compruebe el estado del servicio. El pod permanece en estado
ContainerCreatingmientras se descarga el modelo. Según las condiciones de la red, este proceso puede tardar entre 5 y 15 minutos:arena serve get modelscopeCuando el estado del pod muestre
Running, el servicio de inference estará listo.
Opción 2: Despliegue listo para producción con almacenamiento persistente
Precargar los archivos del modelo en OSS evita volver a descargar archivos mayores a 10 GB cada vez que se reinicia un pod. Esto reduce los tiempos de arranque en frío, disminuye los costos de ancho de banda y mejora la estabilidad del servicio.
Paso 1: Descargar los archivos del modelo
-
Instale Git y Git Large File Storage (LFS). macOS
brew install git brew install git-lfsWindows Descargue e instale Git desde el sitio web oficial de Git. Git Large File Storage viene incluido con Git for Windows; descargue la versión más reciente. Linux (basado en Red Hat)
yum install git yum install git-lfsPara otras distribuciones de Linux, consulte el sitio web oficial de Git.
-
Clone el repositorio del modelo Qwen1.5-4B-Chat y obtenga los archivos grandes:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git cd Qwen1.5-4B-Chat git lfs pull
Paso 2: Cargar los archivos del modelo en OSS
-
Cree un bucket. Para reducir la latencia de obtención del modelo, cree el bucket en la misma región que su clúster:
ossutil mb oss://<your-bucket-name> -
Cree una carpeta en el bucket para los archivos del modelo:
ossutil mkdir oss://<your-bucket-name>/Qwen1.5-4B-Chat -
Cargue los archivos del modelo:
ossutil cp -r ./Qwen1.5-4B-Chat oss://<your-bucket-name>/Qwen1.5-4B-Chat
Paso 3: Configurar un volumen persistente (PV)
Inicie sesión en la consola de ACK y haga clic en el clúster de destino. En el panel de navegación izquierdo, seleccione Volumes > Persistent Volumes.
-
Haga clic en Create. En el cuadro de diálogo Create PV, configure los siguientes parámetros y haga clic en Create:
Parámetro
Valor
PV type
OSSVolume name
llm-modelCapacity
20GiAccess mode
ReadOnlyManyAccess certificate
Seleccione Create Secret
Optional parameters
-o umask=022 -o max_stat_cache_size=0 -o allow_otherBucket ID
Haga clic en Select Bucket y seleccione su bucket
OSS path
/Qwen1.5-4B-ChatEndpoint
Seleccione Public Endpoint
Paso 4: Configurar una solicitud de volumen persistente (PVC)
En el panel de navegación izquierdo, seleccione Volumes > Persistent Volume Claims.
-
En la página Persistent Volume Claims, configure los siguientes parámetros y haga clic en Create:
Parámetro
Valor
PVC type
OSSName
llm-modelAllocation mode
Seleccione Existing Volumes
Existing volumes
Seleccione el PV
llm-modelcreado en el paso anteriorCapacity
20Gi
Paso 5: Desplegar el servicio de inference
Ejecute el comando de Arena para desplegar el servicio. La bandera --data monta la PVC que contiene los archivos del modelo precargados. Dado que el modelo ya se encuentra en el volumen montado, el pod se inicia sin descargar nada:
arena serve custom \
--name=modelscope \
--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" \
--data=llm-model:/Qwen1.5-4B-Chat \
--image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py"
La siguiente salida confirma que se envió el servicio de inference:
service/modelscope-v1 created
deployment.apps/modelscope-v1-custom-serving created
INFO[0001] The Job modelscope has been submitted successfully
INFO[0001] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status
Compruebe el estado del servicio:
arena serve get modelscope
Cuando el estado del pod muestre Running, el servicio de inference estará listo.
Validación del servicio de inference
-
Configure el reenvío de puertos hacia el servicio de inference:
Importantekubectl port-forwardestá diseñado únicamente para desarrollo y depuración. No es confiable, seguro ni escalable en producción. Para redes en producción, consulte Gestión de Ingress.kubectl port-forward svc/modelscope-v1 8000:8000Salida esperada:
Forwarding from 127.0.0.1:8000 -> 8000 Forwarding from [::1]:8000 -> 8000 -
En una nueva terminal, envíe una solicitud de inference de prueba:
curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{ "text_input": "What is artificial intelligence? Artificial intelligence is", "parameters": { "stream": false, "temperature": 0.9, "seed": 10 } }'Una respuesta correcta contiene el texto generado por el modelo:
{"model_name":"/Qwen1.5-4B-Chat","text_output":"What is artificial intelligence? Artificial intelligence is a branch of computer science that studies how to make computers have intelligent behavior."}
(Opcional) Limpieza
Elimine el servicio de inference y los recursos de almacenamiento cuando haya terminado:
# Delete the inference service
arena serve del modelscope
# Delete the PVC and PV (Option 2 only)
kubectl delete pvc llm-model
kubectl delete pv llm-model
Preguntas frecuentes
¿Cómo puedo obtener archivos de modelo desde Hugging Face en lugar de ModelScope?
Asegúrese de que el entorno de ejecución del contenedor pueda acceder al repositorio de Hugging Face y luego establezca MODEL_SOURCE=Huggingface en el comando de Arena. El nodo GPU necesita como mínimo 30 GB de espacio libre en disco para alojar los archivos descargados:
arena serve custom \
--name=huggingface \
--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=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
"MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"
La siguiente salida confirma que se crearon los recursos:
service/huggingface-v1 created
deployment.apps/huggingface-v1-custom-serving created
INFO[0003] The Job huggingface has been submitted successfully
INFO[0003] You can run `arena serve get huggingface --type custom-serving -n default` to check the job status
Apéndice: referencia de parámetros de comandos
|
Parámetro |
Descripción |
Ejemplo |
|
|
Subcomando de Arena. Despliega un servicio de modelo personalizado en lugar de un tipo predefinido como |
— |
|
|
Nombre del servicio. Identificador único utilizado para operaciones posteriores, como consultar registros y eliminar el servicio. |
|
|
|
Versión del servicio. Etiqueta de versión para el servicio, útil para la gestión de versiones y lanzamientos graduales. |
|
|
|
Cantidad de GPU. Número de GPU asignadas a cada pod. Obligatorio cuando el modelo requiere GPU para realizar inference. |
|
|
|
Cantidad de réplicas. Número de pods que se ejecutarán. Más réplicas aumentan el rendimiento concurrente y la disponibilidad. |
|
|
|
Puerto de API RESTful. Puerto en el que el servicio expone su API RESTful para recibir solicitudes de inference. |
|
|
|
Tipo de sondeo de preparación. Método de verificación que utiliza el sondeo de preparación de Kubernetes para determinar si el contenedor está listo para recibir tráfico. |
|
|
|
Opciones del tipo de sondeo. Parámetros para el tipo de sondeo elegido. Para |
|
|
|
Configuración adicional del sondeo. Parámetros adicionales para el sondeo de preparación. Esta bandera se puede repetir. Establece el retraso inicial y el intervalo de verificación. |
|
|
|
Montaje de volumen. Monta una PVC en una ruta específica dentro del contenedor, con el formato |
|
|
|
Imagen de contenedor. URL completa de la imagen de contenedor que define el entorno de ejecución del servicio. |
|
|
|
Comando de inicio. Comando que se ejecuta después de que se inicia el contenedor. Establece la variable de entorno |
|
Preguntas frecuentes
Obtener modelos desde Hugging Face
Asegúrese de que el entorno de ejecución del contenedor pueda acceder al repositorio de Hugging Face.
-
Utilice el cliente Arena para desplegar un servicio personalizado y especifique la imagen de contenedor para el despliegue mediante el parámetro
--image. Para obtener más información sobre los parámetros, consulte Command parameter reference.Este método descarga los archivos del modelo de Hugging Face en el contenedor. Asegúrese de que su nodo GPU tenga como mínimo 30 GB de espacio disponible en disco.
arena serve custom \ --name=huggingface \ --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=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \ "MODEL_ID=Qwen/Qwen1.5-4B-Chat MODEL_SOURCE=Huggingface python3 server.py"La siguiente salida indica que se han creado los recursos de Kubernetes para el servicio de inference
huggingface-v1:service/huggingface-v1 created deployment.apps/huggingface-v1-custom-serving created INFO[0003] The Job huggingface has been submitted successfully INFO[0003] You can run `arena serve get huggingface --type custom-serving -n default` to check the job status
Pasos siguientes
Para especificar una versión del controlador NVIDIA para nodos GPU, consulte Specify an NVIDIA driver version for nodes by adding a label.
Para utilizar frameworks de inference listos para producción, como vLLM o Triton, consulte Deploy a Qwen model inference service using vLLM y Deploy a Qwen model inference service using Triton.