Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Deploy Qwen3.5-4B inference with Knative in ACK Auto Mode

Última actualización: Oct 09, 2026

Los clústeres ACK Auto Mode admiten node pools de Auto Mode. Al combinar esta capacidad con la elasticidad bajo demanda de Knative Serving, usted puede desplegar el modelo de lenguaje grande Qwen3.5-4B como un servicio de inference serverless bajo demanda. Una vez completado el despliegue, no se requiere gestionar manualmente los recursos de GPU. Por lo tanto, esta solución es adecuada para escenarios de inference de modelos sensibles al costo y con baja complejidad operativa.

El flujo de trabajo combina dos mecanismos:

  • El node pool de Auto Mode gestiona la creación y liberación de nodos GPU.

  • Knative Serving escala los pods según la concurrencia de solicitudes (concurrency) o las solicitudes por segundo (rps).

Paso 1: Crear un clúster ACK Auto Mode y un node pool de GPU

1. Crear un clúster

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en Create Kubernetes Cluster. En la página ACK Managed Cluster, habilite Auto Mode.

    Al habilitar Auto Mode, la página muestra tres capacidades principales: Fully managed operations (plano de control del clúster totalmente gestionado, actualizaciones automáticas de versión, nodos sin mantenimiento y autorrecuperación automática), Automatic node scaling (escalado elástico bajo demanda, selección automática de tipo de instancia y optimización de costos de recursos) y Highly optimized node OS (un sistema operativo optimizado para contenedores con inicio rápido, sistema de archivos inmutable y mejores prácticas seguras de forma predeterminada).

  3. Configure los parámetros y haga clic en Create Kubernetes Cluster.

    Consulte Create an ACK Auto Mode cluster .

2. Crear un node pool de GPU

  1. En la página Clústeres de ACK, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, seleccione Nodes > Node Pools.

  2. En la página Node Pools, haga clic en Create Node Pool y configure el node pool en el cuadro de diálogo Create Node Pool.

    A continuación se describen los parámetros clave (consulte Create a node pool para ver todas las opciones):

    • Configure Managed Node Pool: utilice el modo de gestión inteligente.

    • Configuraciones relacionadas con la instancia: en Instance Configuration Mode, seleccione Specify Instance Type. Después, elija un tipo de instancia GPU, como V100, A10 o T4.

    • Node Labels: agregue la etiqueta ack.aliyun.com/nvidia-driver-version:550.144.03 para establecer la versión del controlador NVIDIA en 550.144.03.

    • Container Image Acceleration: habilite esta opción para reducir el tiempo de descarga de la imagen del modelo.

3. Desplegar los componentes de Knative

Consulte Deploy Knative components.

Paso 2: Preparar los archivos del modelo y cargarlos en OSS

Descargue Qwen3.5-4B desde ModelScope a una instancia ECS temporal y cárguelo en OSS con ossutil. Luego, monte la ruta del bucket como un volumen persistente para evitar descargas repetidas cuando se reinicien los pods.

Antes de empezar:

  • Se creó un OSS bucket.

  • ossutil está instalado y configurado en la instancia ECS temporal.

1. Descargar los archivos del modelo Qwen3.5-4B

Ejecute los siguientes comandos en la instancia ECS temporal.

  1. Instale git.

    # You can run 'yum install git' or 'apt install git' to install it.
    sudo yum install git
  2. Instale Git LFS (Large File Storage).

    # You can run 'yum install git-lfs' or 'apt install git-lfs' to install it.
    sudo yum install git-lfs
  3. Clone el repositorio Qwen3.5-4B desde ModelScope y omita los archivos LFS.

    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen3.5-4B.git
  4. Acceda al directorio y descargue los archivos gestionados por LFS.

    cd Qwen3.5-4B
    git lfs pull

2. Cargar los archivos del modelo en OSS

  1. Cree un directorio para el modelo en su bucket de OSS.

    Reemplace <Your-Bucket-Name> con el nombre de su bucket.

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

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

3. Configurar un volumen de almacenamiento de OSS

  1. Choose an authentication method (RRSA or AccessKey) and prepare the access credentials.

    Este tema utiliza la autenticación AccessKey. Para conocer otros métodos, consulte Use an ossfs 2.0 static persistent volume .
  2. Guarde el AccessKey como un secreto de Kubernetes para acceder al PV.

    Reemplace <yourAccessKeyID> y <yourAccessKeySecret> con sus credenciales. El namespace del secreto debe coincidir con el namespace de la aplicación.

    kubectl create -n default secret generic oss-secret --from-literal='akId=<yourAccessKeyID>' --from-literal='akSecret=<yourAccessKeySecret>'
  3. Cree un PV y un PVC para montar el directorio del modelo de OSS en modo de solo lectura. Este ejemplo uses an ossfs 2.0 static persistent volume.

    Código de ejemplo

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # The name of the PV.
      name: llm-model
    spec:
      capacity:
        # The capacity of the storage volume. This value is used only to match the PVC.
        storage: 30Gi
      accessModes:
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # Must be the same as the PV name (metadata.name).
        volumeHandle: llm-model
        nodePublishSecretRef:
          # The name of the secret that stores the AccessKey information.
          name: oss-secret
          # The namespace where the secret resides.
          namespace: default
        volumeAttributes:
          fuseType: ossfs2
          # Replace with your actual bucket name.
          bucket: <Your-Bucket-Name>
          # The subdirectory to mount. Leave it empty to mount the root directory.
          path: /models/Qwen3.5-4B
          # The endpoint of the region where the OSS bucket is located.
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"
          otherOpts: "-o close_to_open=false"
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      # The name of the PVC.
      name: llm-model
      namespace: default
    spec:
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: 30Gi
      storageClassName: ""
      # The name of the PV to bind.
      volumeName: llm-model

Paso 3: Desplegar y comprobar el servicio de Knative

1. Crear un servicio de Knative

  1. En la página Clústeres de ACK, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, seleccione Applications > Knative.

  2. En la pestaña Service Management, haga clic en Create from Template. Establezca Sample Template en Custom y despliegue el servicio de Knative.

    Código de ejemplo

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      labels:
        release: qwen
      name: qwen
      namespace: default
    spec:
      template:
        metadata:
          annotations:
            # The minimum number of replicas. Keep at least one replica running to avoid cold starts.
            autoscaling.knative.dev/minScale: "1"
            # The maximum number of replicas. This limits the upper boundary of GPU resource consumption.
            autoscaling.knative.dev/maxScale: "2"
          labels:
            release: qwen
        spec:
          containers:
          - command:
            - vllm
            - serve
            - /models/Qwen3.5-4B
            - --served-model-name
            - Qwen3.5-4B
            - --port
            - "8000"
            - --enforce-eager
            image: ac2-mirror-registry.cn-hangzhou.cr.aliyuncs.com/evaluate/vllm-openai:nightly-d00df624f313a6a5a7a6245b71448b068b080cd7
            imagePullPolicy: IfNotPresent
            name: vllm-container
            ports:
            - containerPort: 8000
              name: http1
              protocol: TCP
            readinessProbe:
              tcpSocket:
                port: 8000
              initialDelaySeconds: 5
              periodSeconds: 5
            resources:
              limits:
                cpu: "32"
                memory: 64Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: "16"
                memory: 32Gi
                nvidia.com/gpu: "1"
            volumeMounts:
            - mountPath: /models/Qwen3.5-4B
              name: llm-model
          volumes:
          - name: llm-model
            persistentVolumeClaim:
              claimName: llm-model

    Parámetro

    Descripción

    autoscaling.knative.dev/metric

    La métrica de escalado automático. Valores válidos:

    • concurrency (predeterminado): escala según la concurrencia.

    • rps: escala según las solicitudes por segundo.

    autoscaling.knative.dev/target

    El valor objetivo de la métrica que activa el escalado automático.

    autoscaling.knative.dev/minScale

    Número mínimo de réplicas. Entero ≥ 0. Establézcalo en 0 para habilitar el escalado a cero.

    autoscaling.knative.dev/maxScale

    Número máximo de réplicas. Limita el escalado horizontal.

2. Comprobar el despliegue del servicio

  1. En la pestaña Service Management, compruebe que el servicio esté listo. Tome nota del nombre de dominio predeterminado y de la dirección de la puerta de enlace de acceso.

    Nota: envíe las solicitudes a la puerta de enlace de acceso (formato: alb-xxx.aliyuncsslb.com) con un encabezado Host configurado con el dominio del servicio (formato: qwen.default.example.com).

  2. Envíe una solicitud de prueba al servicio de inference.

    Reemplace xx.40.85.xx con la dirección de su puerta de enlace de acceso y qwen.default.example.com con su nombre de dominio predeterminado.

    curl http://xx.40.85.xx:80/v1/chat/completions \
      -H "Host: qwen.default.example.com" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "Qwen3.5-4B",
        "messages": [
          {
            "role": "user",
            "content": [
              {
                "type": "text",
                "text": "Tell me about Hangzhou"
              }
            ]
          }
        ],
        "max_tokens": 200
      }'

    Resultado esperado:

    {
      "id": "chatcmpl-20dfb4c8-d1ab-48bc-9f1a-78b84c6c8adf",
      "object": "chat.completion",
      "created": 1772602897,
      "model": "Qwen3.5-4B",
      "choices": [
        {
          "index": 0,
          "message": {
            "role": "assistant",
            "content": "Hangzhou, abbreviated as 'Hang', is a sub-provincial city located in Zhejiang Province, China..."
          },
          "finish_reason": "length"
        }
      ],
      "usage": {
        "prompt_tokens": 14,
        "completion_tokens": 200,
        "total_tokens": 214
      }
    }