Todos os produtos
Search
Central de documentação

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

Última atualização: Jun 27, 2026

Os clusters do Container Service for Kubernetes (ACK) Auto Mode são otimizados para elasticidade de GPU e gerenciam automaticamente o dimensionamento e as operações básicas dos nós de GPU. Este tópico usa o modelo Qwen3.5-2B como exemplo para demonstrar como implantar rapidamente um serviço de inferência de modelo grande com computação GPU em um cluster ACK Auto Mode.

Pré-requisitos

  • Você já criou um cluster ACK Auto Mode.

  • Você criou um pool de nós de GPU elegível no modo de hospedagem inteligente.

    Detalhes

    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.

      Principais parâmetros (consulte Criar um pool de nós 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 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 esta opção para reduzir o tempo de pull da imagem do modelo.

Etapa 1: Preparar arquivos de modelo e montar o OSS

Nesta etapa, use uma instância ECS temporária para baixar os arquivos do modelo Qwen3.5-2B do ModelScope e enviá-los a um bucket do OSS. Em seguida, configure um PersistentVolume (PV) e um PersistentVolumeClaim (PVC) para o cluster. A montagem do modelo no contêiner de inferência como volume evita downloads repetidos sempre que o contêiner for iniciado.

Verifique se os seguintes pré-requisitos foram atendidos:

1. Baixar o modelo Qwen3.5-2B

Execute as etapas a seguir na instância ECS temporária para baixar os arquivos do modelo do ModelScope.

  1. Instale o Git.

    # You can run yum install git or apt install git to install it.
    sudo yum install git
  2. Instale a extensão 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. Inicialize o Git LFS e clone o repositório Qwen3.5-2B do ModelScope. Esse comando ignora os arquivos grandes do LFS para evitar downloads duplicados.

    git lfs install
    GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/Qwen3.5-2B.git
  4. Acesse o diretório do repositório e baixe os arquivos de modelo grande gerenciados pelo LFS.

    cd Qwen3.5-2B/
    git lfs pull

2. Enviar os arquivos do modelo para o OSS

  1. Crie um diretório no bucket do OSS para armazenar o modelo.

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

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

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

3. Configurar um volume do OSS

Crie um PV e um PVC para permitir que os pods montem o diretório do modelo no OSS como um volume somente leitura. Para mais informações, consulte Usar um volume estático com ossfs 2.0.

  1. Selecione um método de autenticação (RRSA ou AccessKey) e prepare as credenciais de acesso para garantir que o cluster acesse com segurança os recursos do bucket do OSS.

    Este exemplo utiliza autenticação por AccessKey. Os dois métodos apresentam pequenas diferenças. Para mais detalhes, consulte Usar um volume estático com ossfs 2.0 .
  2. Armazene seu AccessKey como um Secret para o PV.

    Substitua <yourAccessKeyID> e <yourAccessKeySecret> pelas suas credenciais reais. 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 no OSS como um volume somente leitura. O exemplo a seguir usa um volume estático com ossfs 2.0.

    Código de exemplo

    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

Etapa 2: Implantar e verificar o serviço de inferência

1. Criar Deployment e Service

Use o framework vLLM para implantar o modelo Qwen3.5-2B como um Deployment e exponha-o como um Service do tipo LoadBalancer.

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

  2. Clique em Create from YAML e envie o conteúdo YAML a seguir.

    Após o envio do YAML, caso o cluster não tenha recursos de GPU suficientes, o pod entrará no estado Pending . O ACK Auto Mode aciona automaticamente o dimensionamento de nós de GPU, cria novos nós e agenda o pod em um novo nó assim que ele for inicializado. Nenhuma intervenção manual é necessária. Quando o pod entrar no estado Running , o serviço de modelo estará implantado.

    Código de exemplo

    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

    Após concluir a implantação, visualize o status da aplicação na página Deployments.

2. Verificar o serviço de inferência

  1. Obtenha o endereço IP público exposto pelo Service.

    export EXTERNAL_IP=$(kubectl get svc qwen-2b -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo ${EXTERNAL_IP}
  2. Envie uma solicitação de inferência para verificar se o serviço está disponível.

    Substitua 8.XX.XX.89 pelo seu endereço IP público.

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

    Saída esperada:

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

Tópicos relacionados