Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Deploy Qwen model inference on ACK with rtp-llm

Última actualización: Sep 20, 2026

Despliegue un servicio de inference de Qwen1.5-4B-Chat en ACK con rtp-llm y utilice GPU A10 o T4.

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.

rtp-llm

rtp-llm es un motor de aceleración de inference para LLM que desarrolló el equipo de predicción de modelos grandes de Alibaba. Este motor mejora la eficiencia y el rendimiento de la inference. rtp-llm cuenta con las siguientes características:

  • Kernels CUDA de alto rendimiento, como PagedAttention, FlashAttention y FlashDecoding.

  • Cuantización WeightOnly INT8 e INT4.

  • Compatibilidad con algoritmos de cuantización populares como GPTQ (General Purpose Quantization) y AWQ (Approximate Weight Quantization).

  • Framework de cuantización adaptativa de KVCache con optimizaciones detalladas para reducir la sobrecarga en el procesamiento por lotes dinámico.

  • Optimizaciones para el hardware de GPU V100.

Consulte rtp-llm.

Requisitos previos

Antes de empezar, compruebe que cuenta con lo siguiente:

  • Un clúster ACK Pro con nodos acelerados por GPU (Kubernetes 1.22 o superior, con al menos 16 GB de memoria de GPU por nodo).

  • La versión 525 del controlador de GPU instalada 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 el modelo Qwen1.5-4B-Chat, cárguelo en OSS y cree el PV y el PVC en su clúster de ACK.

Para cargar el modelo en NAS, consulte Use static NAS persistent volumes.

  1. Descargue los archivos del modelo.

    1. Ejecute el siguiente comando para instalar Git.

      # This command is for Red Hat-based systems. For Debian-based systems, use 'apt install git'.
      yum install git
    2. Ejecute el siguiente comando para instalar el plugin Git Large File Storage (LFS).

      # This command is for Red Hat-based systems. For Debian-based systems, use 'apt install git-lfs'.
      yum install git-lfs
    3. Ejecute el siguiente comando para clonar el repositorio Qwen1.5-4B-Chat de ModelScope en su computadora local.

      GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
    4. Ejecute los siguientes comandos para ir al directorio Qwen1.5-4B-Chat y obtener los archivos grandes gestionados por LFS.

      cd Qwen1.5-4B-Chat
      git lfs pull
  2. Cargue los archivos descargados de Qwen1.5-4B-Chat en OSS.

    1. Inicie sesión en la consola de OSS, luego consulte y anote el nombre de su bucket.

      Para obtener información sobre cómo crear un bucket, consulte Create a bucket.

    2. Instale y configure ossutil para gestionar los recursos de OSS. Para obtener más información, consulte Install ossutil.

    3. Ejecute el siguiente comando para crear un directorio llamado Qwen1.5-4B-Chat en OSS.

      ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
    4. Ejecute el siguiente comando para cargar los archivos del modelo en OSS.

      ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
  3. Configure un PV y un PVC para el clúster de destino. Para obtener más información, consulte Use a statically provisioned ossfs 1.0 volume.

    • A continuación se describe la configuración de ejemplo del PV.

      Parámetro

      Descripción

      PV Type

      OSS

      Name

      llm-model

      AccessKey

      El AccessKey ID y el AccessKey Secret que se utilizan para acceder a OSS.

      Bucket ID:

      El bucket de OSS que creó.

      OSS path

      Seleccione la ruta donde se almacena el modelo, por ejemplo, /models/Qwen1.5-4B-Chat.

    • En esta tabla se detalla la configuración de ejemplo del PVC.

      Parámetro

      Descripción

      PVC Type

      OSS

      Name

      llm-model

      Allocation Mode

      Seleccione Existing Volumes.

      Existing Volumes

      Haga clic en Select PV y seleccione el PV que creó.

Paso 2: Desplegar el servicio de inference

  1. Despliegue el servicio de inference para el modelo Qwen1.5-4B-Chat.

    Despliegue un servicio de inference personalizado mediante Arena. El servicio rtp-llm-qwen (v1) se ejecuta en una GPU con una réplica y un sondeo de disponibilidad. La opción --data monta el PVC llm-model en la ruta /model/Qwen1.5-4B-Chat dentro del contenedor.

    Una sola GPU A10

    arena serve custom \
        --name=rtp-llm-qwen \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --restful-port=8000 \
        --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \
        --data=llm-model:/model/Qwen1.5-4B-Chat \
        "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat python3 -m maga_transformer.start_server"

    Una sola GPU T4

    arena serve custom \
        --name=rtp-llm-qwen \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --restful-port=8000 \
        --image=ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/rtp_llm:0.1.12-cuda12-ubuntu22.04 \
        --data=llm-model:/model/Qwen1.5-4B-Chat \
        "MODEL_TYPE=qwen_2 START_PORT=8000 CHECKPOINT_PATH=/model/Qwen1.5-4B-Chat TOKENIZER_PATH=/model/Qwen1.5-4B-Chat MAX_SEQ_LEN=2048 python3 -m maga_transformer.start_server"

    Resultado esperado:

    service/rtp-llm-qwen-v1 created
    deployment.apps/rtp-llm-qwen-v1-custom-serving created
    INFO[0001] The Job rtp-llm-qwen has been submitted successfully
    INFO[0001] You can run `arena serve get rtp-llm-qwen --type custom-serving -n default` to check the job status

    El servicio de inference queda desplegado correctamente.

  2. Consulte los detalles del servicio de inference y espere a que esté listo.

    arena serve get rtp-llm-qwen

    Resultado esperado:

    Name:       rtp-llm-qwen
    Namespace:  default
    Type:       Custom
    Version:    v1
    Desired:    1
    Available:  1
    Age:        1h
    Address:    192.168.XX.XX
    Port:       RESTFUL:8000
    GPU:        1
    
    Instances:
      NAME                                             STATUS   AGE  READY  RESTARTS  GPU  NODE
      ----                                             ------   ---  -----  --------  ---  ----
      rtp-llm-qwen-v1-custom-serving-696f699485-mn56v  Running  1h   1/1    0         1    cn-beijing.192.168.XX.XX

    El pod del servicio de inference rtp-llm-qwen-v1-custom-serving-696f699485-mn56v se está ejecutando y ya está listo.

Paso 3: Comprobar el servicio de inference

  1. Configure el reenvío de puertos hacia el servicio de inference.

    Importante

    El comando kubectl port-forward sirve únicamente para desarrollo y depuración. No es confiable, seguro ni escalable para producción. Para configurar la red en entornos productivos, consulte la descripción general de Ingress.

    kubectl port-forward svc/rtp-llm-qwen-v1 8000:8000

    Resultado esperado:

    Forwarding from 127.0.0.1:8000 -> 8000
    Forwarding from [::1]:8000 -> 8000
  2. Envíe una solicitud al servicio 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": "Run a quick test"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}'

    Resultado esperado:

    {"id":"chat-","object":"chat.completion","created":1717383026,"model":"AsyncModel","choices":[{"index":0,"message":{"role":"assistant","content":"Sure. What would you like me to test for you?"},"finish_reason":"stop"}],"usage":{"prompt_tokens":21,"total_tokens":31,"completion_tokens":10}}

    El modelo generó una respuesta al mensaje de prueba.

(Opcional) Paso 4: Limpiar el entorno

Si ya no necesita los recursos, elimínelos de inmediato para evitar cargos innecesarios.

  • Elimine el servicio de inference del modelo.

    arena serve del rtp-llm-qwen
  • Elimine el PV y el PVC.

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

Apéndice: referencia de parámetros de comandos

Parámetro

Descripción

Ejemplo

serve custom

Subcomando de Arena. Despliega un servicio de modelo personalizado en lugar de un tipo predefinido como tfserving o triton.

—

--name

Nombre del servicio. Identificador único que se utiliza en operaciones posteriores, como consultar registros o eliminar el servicio.

modelscope

--version

Versión del servicio. Etiqueta de versión del servicio, útil para gestionar versiones y realizar despliegues graduales.

v1

--gpus

Cantidad de GPU. Número de GPU asignadas a cada pod. Es obligatorio cuando el modelo requiere GPU para la inference.

1

--replicas

Cantidad de réplicas. Número de pods que se van a ejecutar. Más réplicas aumentan el rendimiento concurrente y la disponibilidad.

1

--restful-port

Puerto de la API RESTful. Puerto en el que el servicio expone su API RESTful para recibir solicitudes de inference.

8000

--readiness-probe-action

Tipo de sondeo de disponibilidad. Método de comprobación que usa el sondeo de disponibilidad de Kubernetes para determinar si el contenedor está listo para recibir tráfico.

tcpSocket

--readiness-probe-action-option

Opciones del tipo de sondeo. Parámetros correspondientes al tipo de sondeo elegido. En el caso de tcpSocket, especifica el puerto que se va a comprobar.

port: 8000

--readiness-probe-option

Configuraciones adicionales del sondeo. Parámetros extra para el sondeo de disponibilidad. Esta opción se puede repetir. Define el retraso inicial y el intervalo de comprobación.

initialDelaySeconds: 30, periodSeconds: 30

--data

Montaje de volumen. Monta un PVC en una ruta específica dentro del contenedor, con el formato <pvc-name>:<mount-path>. Sirve para montar archivos de modelo precargados.

llm-model:/Qwen1.5-4B-Chat

--image

Imagen de contenedor. URL completa de la imagen de contenedor que define el entorno de ejecución del servicio.

kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1

[COMMAND]

Comando de inicio. Comando que se ejecuta después de iniciar el contenedor. Establece la variable de entorno MODEL_ID e inicia server.py.

"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py"