Todos os produtos
Search
Central de documentação

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

Última atualização: Oct 09, 2026

Os clusters do ACK Auto Mode suportam pools de nós do Auto Mode. Com a elasticidade sob demanda do Knative Serving, implante o modelo de linguagem de grande porte Qwen3.5-4B como um service de inferência serverless sob demanda. Após a implantação, não é preciso gerenciar recursos de GPU manualmente, o que torna essa solução ideal para cenários de inferência de modelos sensíveis a custos e com baixa complexidade operacional.

O fluxo de trabalho combina dois mecanismos:

  • O pool de nós do Auto Mode gerencia a criação e a liberação de nós de GPU.

  • O Knative Serving dimensiona os pods com base na concorrência de requisições (concurrency) ou em requisições por segundo (rps).

Etapa 1: Crie um cluster do ACK Auto Mode e um pool de nós de GPU

1. Crie um cluster

  1. Acesse o ACK console. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique em Create Kubernetes Cluster. Na página ACK Managed Cluster, ative o Auto Mode.

    Após ativar o Auto Mode, a página exibe três recursos principais: Operações totalmente gerenciadas (plano de controle do cluster totalmente gerenciado, atualizações automáticas de versão, nós sem necessidade de manutenção e autorrecuperação), Dimensionamento automático de nós (dimensionamento elástico sob demanda, seleção automática do tipo de instância e otimização dos custos de recursos) e Sistema operacional de nó altamente otimizado (um sistema operacional otimizado para contêineres com inicialização rápida, sistema de arquivos imutável e práticas recomendadas de segurança por padrão).

  3. Configure as definições e clique em Create Kubernetes Cluster.

    Consulte Create an ACK Auto Mode cluster .

2. Crie um pool de nós de GPU

  1. Na página ACK Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Nodes > Node Pools.

  2. Na página Node Pools, clique em Create Node Pool e configure o pool de nós na caixa de diálogo Create Node Pool.

    Parâmetros principais (consulte Create a node pool para ver todas as opções):

    • Configure Managed Node Pool: Use o modo de gerenciamento inteligente.

    • Configurações relacionadas à instância: Em Instance Configuration Mode, selecione Specify Instance Type. Em seguida, escolha um tipo de instância de GPU, como V100, A10 ou T4.

    • Node Labels: Adicione o rótulo ack.aliyun.com/nvidia-driver-version:550.144.03 para definir a versão do driver NVIDIA como 550.144.03.

    • Container Image Acceleration: Ative para reduzir o tempo de pull da imagem do modelo.

3. Implante os componentes do Knative

Consulte Deploy Knative components.

Etapa 2: Prepare os arquivos do modelo e envie-os para o OSS

Baixe o Qwen3.5-4B do ModelScope para uma instância ECS temporária, envie-o para o OSS com o ossutil e monte o caminho do bucket como um volume persistente. Isso evita downloads repetidos nas reinicializações dos pods.

Antes de começar:

  • Um OSS bucket criado.

  • O ossutil instalado e configurado na instância ECS temporária.

1. Baixe os arquivos do modelo Qwen3.5-4B

Execute os seguintes comandos na instância ECS temporária.

  1. Instale o Git.

    # You can run 'yum install git' or 'apt install git' to install it.
    sudo yum install git
  2. Instale o 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 o repositório do Qwen3.5-4B do ModelScope, ignorando os arquivos LFS.

    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen3.5-4B.git
  4. Acesse o diretório e baixe os arquivos gerenciados pelo LFS.

    cd Qwen3.5-4B
    git lfs pull

2. Envie os arquivos do modelo para o OSS

  1. Crie um diretório de modelo no seu bucket do OSS.

    Substitua <Your-Bucket-Name> pelo nome do seu bucket.

    ossutil mkdir oss://<Your-Bucket-Name>/models/Qwen3.5-4B
  2. Envie os arquivos do modelo para o OSS.

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

3. Configure um volume de armazenamento do OSS

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

    Este tópico usa autenticação por AccessKey. Para outros métodos, consulte Use an ossfs 2.0 static persistent volume .
  2. Armazene o AccessKey como um secret do Kubernetes para acesso ao PV.

    Substitua <yourAccessKeyID> e <yourAccessKeySecret> pelas suas credenciais. O namespace do secret deve corresponder ao namespace da aplicação.

    kubectl create -n default secret generic oss-secret --from-literal='akId=<yourAccessKeyID>' --from-literal='akSecret=<yourAccessKeySecret>'
  3. Crie um PV e um PVC para montar o diretório do modelo do OSS no modo de somente leitura. Este exemplo uses an ossfs 2.0 static persistent volume.

    Código de exemplo

    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

Etapa 3: Implante e verifique o service do Knative

1. Crie um service do Knative

  1. Na página ACK Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Applications > Knative.

  2. Na aba Service Management, clique em Create from Template. Defina Sample Template como Custom e implante o service do Knative.

    Código de exemplo

    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

    Descrição

    autoscaling.knative.dev/metric

    A métrica de dimensionamento automático. Valores válidos:

    • concurrency (padrão): Dimensiona por concorrência.

    • rps: Dimensiona por requisições por segundo.

    autoscaling.knative.dev/target

    O valor da métrica de destino que aciona o dimensionamento automático.

    autoscaling.knative.dev/minScale

    Réplicas mínimas. Inteiro ≥ 0. Defina como 0 para ativar o dimensionamento para zero.

    autoscaling.knative.dev/maxScale

    Réplicas máximas. Limita o scale-out.

2. Verifique a implantação do service

  1. Na aba Service Management, verifique se o service está pronto. Anote o nome de domínio padrão e o endereço do gateway de acesso.

    Nota: Envie requisições para o gateway de acesso (formato: alb-xxx.aliyuncsslb.com) com um cabeçalho Host definido para o domínio do service (formato: qwen.default.example.com).

  2. Envie uma requisição de teste para o service de inferência.

    Substitua xx.40.85.xx pelo endereço do seu gateway de acesso e qwen.default.example.com pelo seu nome de domínio padrão.

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

    Saída esperada:

    {
      "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
      }
    }