Todos los productos
Search
Centro de documentos

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

Última actualización: Sep 20, 2026

Despliegue Qwen1.5-4B-Chat como un servicio de inference en un solo nodo con GPU A10 o T4 en ACK mediante vLLM y Arena.

Requisitos previos

Asegúrese de contar con lo siguiente:

Nota

Utilice la versión 525 del controlador de GPU. Agregue la etiqueta ack.aliyun.com/nvidia-driver-version:525.105.17 a sus nodos acelerados por GPU. Consulte Especificar una versión del controlador NVIDIA para los nodos mediante una etiqueta.

Contexto

Qwen1.5-4B-Chat

Qwen1.5-4B-Chat es un LLM basado en Transformer de 4 mil millones de parámetros desarrollado por Alibaba Cloud. Se entrenó con texto web, libros específicos de dominio y código. Consulte el repositorio de GitHub de Qwen.

vLLM

vLLM es un framework de inference de LLM de código abierto optimizado para alto rendimiento y baja latencia. Admite la mayoría de los LLM más utilizados, incluido Qwen, y usa PagedAttention, procesamiento continuo por lotes y cuantización para mejorar la eficiencia. Consulte el repositorio de GitHub de vLLM.

Paso 1: Preparar los datos del modelo

Descargue Qwen1.5-4B-Chat, cárguelo en Object Storage Service (OSS) y cree un volumen persistente (PV) junto con una solicitud de volumen persistente (PVC) en su clúster ACK.

Nota

También puede almacenar el modelo en File Storage NAS en lugar de OSS. Consulte Montar un volumen NAS aprovisionado estáticamente.

Descargar el modelo

  1. Instale git:

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

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

       GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
  4. Acceda al directorio Qwen1.5-4B-Chat y extraiga los archivos de Git LFS:

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

Cargar el modelo en OSS

  1. Inicie sesión en la consola de OSS y anote el nombre de su bucket. Para crear uno, consulte Crear un bucket.

  2. Instale y configure ossutil. Consulte Instalar ossutil.

  3. Cree un directorio Qwen1.5-4B-Chat en su bucket de OSS:

       ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
  4. Cargue los archivos del modelo en OSS:

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

Crear un PV y una PVC

Cree un PV y una PVC en su clúster ACK para montar el modelo desde OSS. Consulte Montar un volumen OSS aprovisionado estáticamente.

Parámetros del PV:

Parámetro

Descripción

PV Type

OSS

Volume Name

llm-model

Access Certificate

ID de accesskey y secreto de accesskey del bucket de OSS

Bucket ID

Nombre de su bucket de OSS

OSS Path

Ruta al modelo, por ejemplo, /models/Qwen1.5-4B-Chat

Parámetros de la PVC:

Parámetro

Descripción

PVC Type

OSS

Volume Name

llm-model

Allocation Mode

Seleccione Existing Volumes

Existing Volumes

Haga clic en Existing Volumes y seleccione su PV

Paso 2: Desplegar el servicio de inference

Arena trata los archivos del modelo como un conjunto de datos. Utilice --data para montar el modelo dentro del contenedor. En este ejemplo, la ruta de montaje es /model/Qwen1.5-4B-Chat.

El parámetro --max-model-len establece la longitud máxima de token que el modelo puede procesar. Los valores altos mejoran la calidad de la interacción, pero consumen más memoria de GPU. Consulte el repositorio de código de vLLM en GitHub para ver todos los parámetros disponibles.

Elegir un tipo de GPU

GPU

Caso de uso

max-model-len

Parámetros adicionales

NVIDIA A10

Producción (alto rendimiento)

16384

Ninguna

NVIDIA T4

Pruebas (menor costo)

8192

--dtype half

Desplegar el servicio

Elija el comando adecuado según su tipo de GPU.

NVIDIA A10 (recomendada para producción)

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 (para pruebas)

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"
Nota

La GPU T4 utiliza --max-model-len 8192 (en lugar de 16384 para la A10) e incluye --dtype half para ajustarse a las restricciones de memoria de la T4.

Parámetros de Arena:

Parámetro

Descripción

--name

Nombre del servicio de inference

--version

Versión del servicio de inference

--gpus

Cantidad de GPU por réplica

--replicas

Número de réplicas

--restful-port

Puerto del servicio de inference

--readiness-probe-action

Tipo de sondeo de disponibilidad. Valores válidos: HttpGet, Exec, gRPC y TCPSocket

--readiness-probe-action-option

Método de conexión del sondeo de disponibilidad

--readiness-probe-option

Configuración del sondeo de disponibilidad

--data

Monta una PVC compartida. Formato: PVCName:MountPath. Use arena data list para consultar las PVC disponibles

--image

Imagen de contenedor para el servicio de inference

Resultado esperado:

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

Comprobar el despliegue

Compruebe el estado del servicio de inference:

arena serve get vllm-qwen-4b-chat

Resultado esperado:

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

Cuando Available coincide con Desired y el estado de la instancia es Running, el servicio está listo.

Paso 3: Probar el servicio de inference

Configurar el reenvío de puertos

Importante

El reenvío de puertos con kubectl port-forward se usa únicamente para desarrollo y depuración. En entornos de producción, utilice un Ingress.

Reenvíe el puerto 8000 a su computadora local:

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

Resultado esperado:

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

Enviar una solicitud de prueba

Abra una terminal nueva y envíe una solicitud de inference:

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}'

Resultado esperado:

{"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 expone una API compatible con OpenAI en el endpoint /v1/chat/completions.

(Opcional) Limpiar los recursos

Elimine los recursos que no utilice para evitar costos innecesarios.

Elimine el servicio de inference:

arena serve delete vllm-qwen-4b-chat

Elimine la PVC y el PV:

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

Siguientes pasos

  • Configure un Ingress para exponer el servicio de inference en producción.

  • Para desplegar otros modelos Qwen, ajuste --max-model-len y --gpu-memory-utilization según el tamaño del modelo y la memoria de la GPU.

  • Consulte el repositorio de GitHub de vLLM para conocer las opciones de configuración.