Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Deploy Qwen inference services with Triton and vLLM on ACK

Última actualización: Sep 04, 2026

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

Contexto

Qwen1.5-4B-Chat

Qwen1.5-4B-Chat es un LLM basado en Transformer con 4B parámetros, desarrollado por Alibaba Cloud y entrenado con texto web, libros especializados y código. Consulte el repositorio de GitHub de Qwen.

Triton Inference Server

Triton Inference Server es un framework de inference de código abierto desarrollado por NVIDIA. Admite varios backends, entre ellos TensorRT, TensorFlow, PyTorch, ONNX y vLLM.

Funciones principales:

  • Compatibilidad con múltiples frameworks de ML y aprendizaje profundo

  • Ejecución simultánea de modelos

  • Procesamiento por lotes continuo

  • Métricas integradas: utilización de GPU, latencia y throughput

Consulte el repositorio de GitHub de Triton Inference Server.

vLLM

vLLM es un framework de inference de alto rendimiento compatible con los LLM más populares, incluido Qwen. Utiliza PagedAttention, procesamiento por lotes continuo y cuantización para mejorar el throughput de inference. Consulte el repositorio de GitHub de vLLM.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Un clúster ACK Pro con nodos acelerados por GPU (Kubernetes 1.22+, ≥16 GB de memoria GPU por nodo).

  • El controlador de GPU versión 525 instalado en los nodos con GPU. Agregue la etiqueta ack.aliyun.com/nvidia-driver-version:525.105.17 para fijar la versión del controlador.

  • La versión más reciente del cliente Arena instalada.

Paso 1: Preparar los datos del modelo

Descargue Qwen1.5-4B-Chat, cárguelo en Object Storage Service (OSS) y cree volúmenes persistentes (PV) y solicitudes de volumen persistente (PVC) en su clúster.

Para otros modelos compatibles con vLLM, consulte Modelos compatibles. Si prefiere usar NAS en lugar de OSS, consulte Montar un volumen NAS aprovisionado estáticamente.

Descargar el modelo

  1. Instale Git:

       # Use yum install git or apt install git
       yum install git
  2. Instale Git LFS:

       # Use 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 y descargue los archivos grandes:

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

Cargar el modelo a OSS

  1. Inicie sesión en la consola de OSS y anote el nombre de su bucket. Cree un bucket si es necesario.

  2. Instale y configure ossutil.

  3. Cree un directorio en OSS y cargue el modelo:

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

Crear PV y PVC

Cree un PV y un PVC para montar los datos del modelo desde OSS en el clúster.

Parámetros del PV

Parameter

Value

PV Type

OSS

Volume Name

llm-model

Access Certificate

AccessKey ID y AccessKey secret para acceder al bucket de OSS.

Bucket ID

Nombre de su bucket de OSS.

OSS Path

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

Parámetros del PVC

Parameter

Value

PVC Type

OSS

Name

llm-model

Allocation Mode

Existing Volumes

Existing Volumes

Seleccione el PV que creó

Paso 2: Configurar Triton con vLLM

Cree dos archivos de configuración: config.pbtxt para el backend de Triton y model.json para los parámetros del motor vLLM.

Crear la configuración del backend

Cree un directorio de trabajo y el archivo config.pbtxt:

mkdir triton-vllm

cat << EOF > triton-vllm/config.pbtxt
backend: "vllm"

# The usage of device is deferred to the vLLM engine
instance_group [
  {
    count: 1
    kind: KIND_MODEL
  }
]

version_policy: { all { }}
EOF

Crear la configuración del modelo

El archivo model.json define los parámetros del motor vLLM. Elija la configuración correspondiente a su tipo de GPU.

Importante

vLLM asigna memoria GPU de forma agresiva al iniciarse. El parámetro gpu_memory_utilization controla este comportamiento; el valor 0.95 reserva el 95% de la memoria GPU. Reduzca este valor si otras cargas de trabajo comparten la GPU para evitar errores de falta de memoria.

GPU A10 (producción)

Las GPU A10 ofrecen mayor throughput y admiten precisión bfloat16. Utilice A10 para cargas de trabajo de producción.

cat << EOF > triton-vllm/model.json
{
    "model":"/model/Qwen1.5-4B-Chat",
    "disable_log_requests": "true",
    "gpu_memory_utilization": 0.95,
    "trust_remote_code": "true",
    "max_model_len": 16384
}
EOF

GPU T4 (pruebas)

Las GPU T4 son ampliamente disponibles y rentables, pero no admiten bf16. Establezca dtype en half (FP16) y reduzca max_model_len para ajustarse al límite de 16 GB de memoria.

cat << EOF > triton-vllm/model.json
{
    "model":"/model/Qwen1.5-4B-Chat",
    "disable_log_requests": "true",
    "gpu_memory_utilization": 0.95,
    "trust_remote_code": "true",
    "dtype": "half",
    "max_model_len": 8192
}
EOF

Parámetros clave

Parameter

Description

max_model_len

Longitud máxima de la secuencia de tokens. Valores más altos mejoran la calidad de la conversación, pero consumen más memoria GPU.

dtype

Precisión del modelo. Establézcalo en half (FP16) para GPU sin soporte bf16, como la T4.

gpu_memory_utilization

Fracción de memoria GPU asignada al modelo. Valor predeterminado: 0.9.

Consulte Argumentos del motor de vLLM para ver todos los parámetros, y Despliegue de un modelo vLLM en Triton para ejemplos.

Paso 3: Desplegar el servicio de inference

Utilice Arena para desplegar el servicio de inference de Qwen1.5-4B-Chat con Triton y vLLM.

  1. Exporte las rutas de los archivos de configuración como variables de entorno:

       export triton_config_file="triton-vllm/config.pbtxt"
       export model_config_file="triton-vllm/model.json"
  2. Despliegue el servicio de inference:

    Parámetros

    Parameter

    Description

    --name

    Nombre del servicio de inference.

    --version

    Versión del servicio de inference.

    --image

    Imagen del servidor Triton.

    --gpus

    GPU por réplica.

    --cpu

    Núcleos de CPU por réplica.

    --memory

    Memoria por réplica.

    --data

    Montaje de PVC en formato <pvc-name>:<mount-path>. Ejecute arena data list para listar los PVC disponibles.

    --config-file

    Montaje de archivo local en formato <local-path>:<container-path>.

    --model-repository

    Directorio del repositorio de modelos de Triton. Cada subdirectorio representa un modelo con sus archivos de configuración.

    --http-port

    Puerto HTTP de Triton.

    --grpc-port

    Puerto gRPC de Triton.

    --allow-metrics

    Exponer métricas de inference (utilización de GPU, latencia, throughput).

       arena serve triton \
           --name=triton-vllm \
           --version=v1 \
           --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/tritonserver:24.04-vllm-python-py3-ubuntu22.04 \
           --gpus=1 \
           --cpu=6 \
           --memory=30Gi \
           --data="llm-model:/model/Qwen1.5-4B-Chat" \
           --model-repository /triton-config \
           --config-file="$model_config_file:/triton-config/qwen-4b/1/model.json" \
           --config-file="$triton_config_file:/triton-config/qwen-4b/config.pbtxt" \
           --http-port=8000 \
           --grpc-port=9000 \
           --allow-metrics=true

    Salida esperada:

       configmap/triton-vllm-v1-4bd5884e6b5b6a3 created
       configmap/triton-vllm-v1-7815124a8204002 created
       service/triton-vllm-v1-tritoninferenceserver created
       deployment.apps/triton-vllm-v1-tritoninferenceserver created
       INFO[0007] The Job triton-vllm has been submitted successfully
       INFO[0007] You can run `arena serve get triton-vllm --type triton-serving -n default` to check the job status
  3. Compruebe que el servicio se esté ejecutando. Espere hasta que Available muestre 1.

       arena serve get triton-vllm

    Salida esperada:

       Name:       triton-vllm
       Namespace:  default
       Type:       Triton
       Version:    v1
       Desired:    1
       Available:  1
       Age:        3m
       Address:    172.16.XX.XX
       Port:       RESTFUL:8000,GRPC:9000
       GPU:        1
    
       Instances:
         NAME                                                  STATUS   AGE  READY  RESTARTS  GPU  NODE
         ----                                                  ------   ---  -----  --------  ---  ----
         triton-vllm-v1-tritoninferenceserver-b69cb7759-gkwz6  Running  3m   1/1    0         1    cn-beijing.172.16.XX.XX

Paso 4: Verificar el servicio de inference

Reenvío de puertos (solo desarrollo)

Importante

kubectl port-forward está diseñado únicamente para desarrollo y depuración; no es confiable, seguro ni escalable para producción. Para redes en producción, consulte Descripción general de Ingress.

  1. Configure el reenvío de puertos:

       kubectl port-forward svc/triton-vllm-v1-tritoninferenceserver 8000:8000

    Salida esperada:

       Forwarding from 127.0.0.1:8000 -> 8000
       Forwarding from [::1]:8000 -> 8000
  2. Envíe una solicitud de prueba al endpoint de generación. Reemplace qwen-4b con el nombre de su modelo si es diferente.

       curl -X POST localhost:8000/v2/models/qwen-4b/generate \
         -d '{"text_input": "What is AI? AI is", "parameters": {"stream": false, "temperature": 0}}'

    Salida esperada:

       {"model_name":"qwen-4b","model_version":"1","text_output":"What is AI? AI is a branch of computer science that studies how to make computers intelligent. Purpose of AI"}

(Opcional) Limpieza

Elimine el servicio de inference y los recursos de almacenamiento cuando ya no sean necesarios:

# Delete the inference service
arena serve del triton-vllm

# Delete the PVC and PV
kubectl delete pvc llm-model
kubectl delete pv llm-model