Publique um modelo DeepSeek-V3 através da implementação de GPUs com vários anfitriões

Vista geral

A Vertex AI suporta a implementação de GPUs com vários anfitriões para publicar modelos que excedam a capacidade de memória de um único nó de GPU, como o DeepSeek-V3, o DeepSeek-R1 e o Meta LLama3.1 405 (versão não quantizada).

Este guia descreve como publicar um modelo DeepSeek-V3 usando unidades de processamento gráfico (GPUs) com vários anfitriões no Vertex AI com o vLLM. A configuração para outros modelos é semelhante. Para mais informações, consulte o artigo Implementação de vLLM para modelos de linguagem de texto e multimodal.

Antes de começar, certifique-se de que conhece o seguinte:

Use a calculadora de preços para gerar uma estimativa de custos com base na sua utilização projetada.

Contentores

Para suportar implementações em vários anfitriões, este guia usa uma imagem de contentor vLLM pré-criada com integração do Ray do Model Garden. O Ray permite o processamento distribuído necessário para executar modelos em vários nós de GPU. Este contentor também suporta o fornecimento de pedidos de streaming através da API Chat Completions.

Se quiser, pode criar a sua própria imagem de vários nós do vLLM. Tenha em atenção que esta imagem de contentor personalizada tem de ser compatível com o Vertex AI.

Antes de começar

Antes de iniciar a implementação do modelo, conclua os pré-requisitos indicados nesta secção.

Configure um Google Cloud projeto

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  9. Peça uma quota de GPU

    Para implementar o DeepSeek-V3, precisa de duas VMs a3-highgpu-8g com oito GPUs H100 cada, para um total de 16 GPUs H100. É provável que tenha de pedir um aumento da quota de GPU H100, uma vez que o valor predefinido é inferior a 16.

    1. Para ver a quota de GPUs H100, aceda à página Google Cloud Quotas e limites do sistemada consola.

      Aceda a Quotas e limites do sistema

    2. Peça um ajuste de quota.

    Carregue o modelo

    1. Para carregar o seu modelo como um recurso Model para o Vertex AI, execute o comando gcloud ai models upload da seguinte forma:

      gcloud ai models upload \
          --region=LOCATION \
          --project=PROJECT_ID \
          --display-name=MODEL_DISPLAY_NAME \
          --container-image-uri=us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:20250312_0916_RC01 \
          --container-args='^;^/vllm-workspace/ray_launcher.sh;python;-m;vllm.entrypoints.api_server;--host=0.0.0.0;--port=7080;--model=deepseek-ai/DeepSeek-V3;--tensor-parallel-size=8;--pipeline-parallel-size=2;--gpu-memory-utilization=0.82;--max-model-len=163840;--max-num-seqs=64;--enable-chunked-prefill;--kv-cache-dtype=auto;--trust-remote-code;--disable-log-requests' \
          --container-deployment-timeout-seconds=7200 \
          --container-ports=7080 \
          --container-env-vars=MODEL_ID=deepseek-ai/DeepSeek-V3
      

      Faça as seguintes substituições:

      • LOCATION: a região onde está a usar o Vertex AI
      • PROJECT_ID: o ID do seu Google Cloud projeto
      • MODEL_DISPLAY_NAME: o nome a apresentar que quer para o seu modelo

    Crie um ponto final de inferência online dedicado

    Para suportar pedidos de conclusão de chat, o contentor do Model Garden requer um ponto final dedicado. Os pontos finais dedicados estão em pré-visualização e não suportam a CLI gcloud do Google Cloud, pelo que tem de usar a API REST para criar o ponto final.

    1. Para criar o ponto final dedicado, execute o seguinte comando:

      PROJECT_ID=PROJECT_ID
      REGION=LOCATION
      ENDPOINT="${REGION}-aiplatform.googleapis.com"
      
      curl \
        -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/${REGION}/endpoints \
        -d '{
          "displayName": "ENDPOINT_DISPLAY_NAME",
          "dedicatedEndpointEnabled": true
          }'
      

      Faça as seguintes substituições:

      • ENDPOINT_DISPLAY_NAME: o nome a apresentar do seu ponto final

    Implemente o modelo

    1. Obtenha o ID do ponto final de inferência online executando o comando gcloud ai endpoints list:

      ENDPOINT_ID=$(gcloud ai endpoints list \
       --project=PROJECT_ID \
       --region=LOCATION \
       --filter=display_name~'ENDPOINT_DISPLAY_NAME' \
       --format="value(name)")
      
    2. Execute o comando gcloud ai models list para obter o ID do modelo:

      MODEL_ID=$(gcloud ai models list \
       --project=PROJECT_ID \
       --region=LOCATION \
       --filter=display_name~'MODEL_DISPLAY_NAME' \
       --format="value(name)")
      
    3. Implemente o modelo no ponto final executando o comando gcloud ai deploy-model:

      gcloud alpha ai endpoints deploy-model $ENDPOINT_ID \
       --project=PROJECT_ID \
       --region=LOCATION \
       --model=$MODEL_ID \
       --display-name="DEPLOYED_MODEL_NAME" \
       --machine-type=a3-highgpu-8g \
       --traffic-split=0=100 \
       --accelerator=type=nvidia-h100-80gb,count=8 \
       --multihost-gpu-node-count=2
      

      Substitua DEPLOYED_MODEL_NAME por um nome para o modelo implementado. Pode ser igual ao nome a apresentar do modelo (MODEL_DISPLAY_NAME).

      A implementação de modelos grandes, como o DeepSeek-V3, pode demorar mais tempo do que o limite de tempo de implementação predefinido. Se o comando deploy-model expirar, o processo de implementação continua a ser executado em segundo plano.

      O comando deploy-model devolve um ID da operação que pode ser usado para verificar quando a operação estiver concluída. Pode sondar o estado da operação até que a resposta inclua "done": true. Use o seguinte comando para consultar o estado:

      gcloud ai operations describe \
      --region=LOCATION \
      OPERATION_ID
      

      Substitua OPERATION_ID pelo ID da operação devolvido pelo comando anterior.

    Obtenha inferências online do modelo implementado

    Esta secção descreve como enviar um pedido de inferência online para o ponto final público dedicado onde o modelo DeepSeek-V3 está implementado.

    1. Execute o comando gcloud projects describe para obter o número do projeto:

      PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
      
    2. Envie um pedido de previsão raw:

      curl \
      -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      https://${ENDPOINT_ID}.${REGION}-${PROJECT_NUMBER}.prediction.vertexai.goog/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/endpoints/${ENDPOINT_ID}:rawPredict \
      -d '{
         "prompt": "Write a short story about a robot.",
         "stream": false,
         "max_tokens": 50,
         "temperature": 0.7
         }'
      
    3. Envie um pedido de conclusão de chat:

      curl \
      -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      https://${ENDPOINT_ID}.${REGION}-${PROJECT_NUMBER}.prediction.vertexai.goog/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/endpoints/${ENDPOINT_ID}/chat/completions \
      -d '{"stream":false, "messages":[{"role": "user", "content": "Summer travel plan to Paris"}], "max_tokens": 40,"temperature":0.4,"top_k":10,"top_p":0.95, "n":1}'
      

      Para ativar o streaming, altere o valor de "stream" de false para true.

    Limpar

    Para evitar incorrer em mais custos do Vertex AI, elimine os Google Cloud recursos que criou durante este tutorial:

    1. Para anular a implementação do modelo a partir do ponto final e eliminar o ponto final, execute os seguintes comandos:

      ENDPOINT_ID=$(gcloud ai endpoints list \
         --region=LOCATION \
         --filter=display_name=ENDPOINT_DISPLAY_NAME \
         --format="value(name)")
      
      DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \
         --region=LOCATION \
         --format="value(deployedModels.id)")
      
      gcloud ai endpoints undeploy-model $ENDPOINT_ID \
        --region=LOCATION \
        --deployed-model-id=$DEPLOYED_MODEL_ID
      
      gcloud ai endpoints delete $ENDPOINT_ID \
         --region=LOCATION \
         --quiet
      
    2. Para eliminar o modelo, execute os seguintes comandos:

      MODEL_ID=$(gcloud ai models list \
         --region=LOCATION \
         --filter=display_name=DEPLOYED_MODEL_NAME \
         --format="value(name)")
      
      gcloud ai models delete $MODEL_ID \
         --region=LOCATION \
         --quiet
      

    O que se segue?