Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Deploying a Qwen3.5-2B large model inference service in ACK Auto Mode

Última actualización: Sep 21, 2026

Los clústeres de Container Service for Kubernetes (ACK) Auto Mode están optimizados para la elasticidad de GPU y gestionan automáticamente el escalado y las operaciones básicas de los nodos GPU. Este tema toma como ejemplo el modelo Qwen3.5-2B para mostrar cómo desplegar rápidamente un servicio de inference de modelo grande con capacidad de cómputo GPU en un clúster de ACK Auto Mode.

Requisitos previos

  • Usted ha created an ACK Auto Mode cluster.

  • Usted creó un node pool de GPU compatible en modo de hosting inteligente.

    Detalles

    1. En la página ACK Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en 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.

      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. A continuación, seleccione 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: habilítelo para reducir el tiempo de descarga de la imagen del modelo.

Paso 1: preparar los archivos del modelo y montar OSS

En este paso se utiliza una instancia ECS temporal para descargar los archivos del modelo Qwen3.5-2B desde ModelScope y cargarlos a un bucket de OSS. Después, se configura un PersistentVolume (PV) y un PersistentVolumeClaim (PVC) para el clúster. Montar el modelo en el contenedor de inference como un volumen evita que se descargue repetidamente cada vez que inicia el contenedor.

Asegúrese de cumplir con a continuación requisitos previos:

1. Descargar el modelo Qwen3.5-2B

Ejecute los siguientes pasos en la instancia ECS temporal para descargar los archivos del modelo desde ModelScope.

  1. Instale Git.

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

    # You can run yum install git-lfs or apt install git-lfs to install it.
    sudo yum install git-lfs
  3. Inicialice Git LFS y clone el repositorio Qwen3.5-2B desde ModelScope. Este comando omite los archivos grandes de LFS para evitar descargas duplicadas.

    git lfs install
    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/Qwen3.5-2B.git
  4. Cambie al directorio del repositorio y descargue los archivos grandes del modelo administrados por LFS.

    cd Qwen3.5-2B/
    git lfs pull

2. Cargar los archivos del modelo a OSS

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

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

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

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

3. Configurar un volumen de OSS

Cree un PV y un PVC para permitir que los pods monten el directorio del modelo en OSS como un volumen de solo lectura. Para obtener más información, consulte Use a static volume with ossfs 2.0.

  1. Select an authentication method (RRSA or AccessKey) and prepare access credentials para garantizar que el clúster acceda de forma segura a los recursos del bucket de OSS.

    Este ejemplo utiliza autenticación mediante AccessKey. Ambos métodos difieren ligeramente. Para obtener más información, consulte Use a static volume with ossfs 2.0 .
  2. Guarde su AccessKey como un Secret para el PV.

    Reemplace <yourAccessKeyID> y <yourAccessKeySecret> con sus credenciales reales. El namespace del Secret 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 en OSS como un volumen de solo lectura. A continuación se muestra un ejemplo que uses a static volume with ossfs 2.0.

    Código de ejemplo

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # PV name.
      name: llm-model  
    spec:
      capacity:
        # Volume capacity. This value is used only to match the PVC.
        storage: 30Gi  
      # Access mode.
      accessModes:  
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # Must match the PV name (metadata.name).
        volumeHandle: llm-model   
        # Use the Secret created earlier.
        nodePublishSecretRef:
          # Name of the Secret storing the AccessKey.
          name: oss-secret  
          # Namespace of the Secret.
          namespace: default  
        volumeAttributes:
          fuseType: ossfs2
          # Your bucket name.
          bucket: knative-llm  
          # Subdirectory to mount. Leave empty for the root directory.
          path: /models/Qwen3.5-2B
          # Endpoint for the region where the OSS bucket is located.
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"  
          otherOpts: "-o close_to_open=false"
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      # PVC name.
      name: llm-model 
      namespace: default
    spec:
      # Must be consistent with the PV.
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: 30Gi
      storageClassName: ""
      # The PV to bind.
      volumeName: llm-model

Paso 2: desplegar y comprobar el servicio de inference

1. Crear el Deployment y el Service

Utilice el framework vLLM para desplegar el modelo Qwen3.5-2B como un Deployment y expóngalo como un Service de tipo LoadBalancer.

  1. En la página ACK Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Deployments.

  2. Haga clic en Create from YAML y envíe a continuación contenido YAML.

    Si el clúster no cuenta con suficientes recursos de GPU después de enviar el YAML, el pod pasará al estado Pending . ACK Auto Mode activa automáticamente el escalado de nodos GPU, crea nuevos nodos y programa el pod en uno de ellos cuando finaliza su inicialización. No se requiere intervención manual. Cuando el pod entra en el estado Running , el despliegue del servicio del modelo queda completo.

    Código de ejemplo

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: qwen-2b
      labels:
        app: qwen
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: qwen
      template:
        metadata:
          labels:
            app: qwen
        spec:
          containers:
          - command:
            - vllm
            - serve
            - /models/Qwen3.5-2B       
            - --served-model-name
            - Qwen3.5-2B
            - --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
                # Maximum number of GPUs.
                nvidia.com/gpu: "1"
              requests:
                cpu: "8"
                memory: 32Gi
                # Each pod requests 1 GPU, consistent with limits.
                nvidia.com/gpu: "1"
            volumeMounts:
            # Must match the model path in the command.
            - mountPath: /models/Qwen3.5-2B
              name: llm-model
          volumes:
          - name: llm-model
            persistentVolumeClaim:
              claimName: llm-model
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: qwen-2b
    spec:
      type: LoadBalancer
      ports:
        # The exposed port. Must match containerPort.
        - port: 8000
          protocol: TCP
          targetPort: 8000
      selector:
        app: qwen

    Una vez completado el despliegue, consulte el estado de la aplicación en la página Deployments.

2. Comprobar el servicio de inference

  1. Obtenga la dirección IP pública que expone el Service.

    export EXTERNAL_IP=$(kubectl get svc qwen-2b -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo ${EXTERNAL_IP}
  2. Envíe una solicitud de inference para comprobar que el servicio está disponible.

    Reemplace 8.XX.XX.89 con su dirección IP pública.

    curl http://8.XX.XX.89:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "Qwen3.5-2B",
        "messages": [
          {
            "role": "user",
            "content": [
              {
                "type": "text",
                "text": "Kubernetes"
              }
            ]
          }
        ],
        "max_tokens": 200
      }'

    Resultado esperado:

    {"id":"chatcmpl-98f158cdbbb38087","object":"chat.completion","created":1775043962,"model":"Qwen3.5-2B","choices":[{"index":0,"message":{"role":"assistant","content":"**Kubernetes** is an open-source container orchestration platform that automates deployment, scaling, management, and repair of containerized applications..."},"finish_reason":"length"}],"usage":{"prompt_tokens":14,"total_tokens":214,"completion_tokens":200}}

Temas relacionados