Exibir um modelo DeepSeek-V3 usando a implantação de GPU de vários hosts

Visão geral

A Vertex AI oferece suporte à implantação de GPU em vários hosts para disponibilizar modelos que excedem a capacidade de memória de um único nó de GPU, como DeepSeek-V3, DeepSeek-R1 e Meta LLama3.1 405 (versão não quantizada).

Neste guia, descrevemos como disponibilizar um modelo DeepSeek-V3 usando unidades de processamento gráfico (GPUs) multihost na Vertex AI com vLLM. A configuração para outros modelos é semelhante. Para mais informações, consulte Disponibilização de vLLM para modelos de linguagem de texto e multimodal.

Antes de começar, confira se você tem familiaridade com o seguinte:

Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

Contêineres

Para oferecer suporte a implantações de vários hosts, este guia usa uma imagem de contêiner 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. Esse contêiner também é compatível com o atendimento de solicitações de streaming usando a API Chat Completions.

Se quiser, você pode criar sua própria imagem de vários nós do vLLM. Essa imagem de contêiner personalizada precisa ser compatível com a Vertex AI.

Antes de começar

Antes de começar a implantação do modelo, conclua os pré-requisitos listados nesta seção.

Configurar um projeto do Google Cloud

  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. Solicitar cota de GPU

    Para implantar o DeepSeek-V3, você precisa de duas VMs a3-highgpu-8g com oito GPUs H100 cada, totalizando 16 GPUs H100. É provável que você precise solicitar um aumento na cota de GPU H100, já que o valor padrão é menor que 16.

    1. Para conferir a cota de GPU H100, acesse a página Cotas e limites do sistema do console Google Cloud .

      Acesse "Cotas e limites do sistema

    2. Solicite um ajuste de cota.

    Faça o upload do modelo

    1. Para fazer upload do modelo como um recurso Model na 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:20250130_0916_RC01 \
          --container-args='^;^/vllm-workspace/ray_launcher.sh;python;-m;vllm.entrypoints.api_server;--host=0.0.0.0;--port=8080;--model=deepseek-ai/DeepSeek-V3;--tensor-parallel-size=16;--pipeline-parallel-size=1;--gpu-memory-utilization=0.9;--trust-remote-code;--max-model-len=32768' \
          --container-deployment-timeout-seconds=4500 \
          --container-ports=8080 \
          --container-env-vars=MODEL_ID=deepseek-ai/DeepSeek-V3
      

      Faça as seguintes substituições:

      • LOCATION: a região em que você está usando a Vertex AI.
      • PROJECT_ID: o ID do projeto Google Cloud
      • MODEL_DISPLAY_NAME: o nome de exibição que você quer para o modelo

    Criar um endpoint dedicado de inferência on-line

    Para oferecer suporte a solicitações de conclusão de chat, o contêiner do Model Garden exige um endpoint dedicado. Os endpoints dedicados estão em prévia e não são compatíveis com a CLI do Google Cloud. Portanto, use a API REST para criar o endpoint.

    1. Para criar o endpoint 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 de exibição do endpoint

    Implantar o modelo

    1. Para conseguir o ID do endpoint de inferência on-line, execute 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. Para receber o ID do seu modelo, execute o comando gcloud ai models list:

      MODEL_ID=$(gcloud ai models list \
       --project=PROJECT_ID \
       --region=LOCATION \
       --filter=display_name~'MODEL_DISPLAY_NAME' \
       --format="value(name)")
      
    3. Implante o modelo no endpoint 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 implantado. Pode ser igual ao nome de exibição do modelo (MODEL_DISPLAY_NAME).

      A implantação de modelos grandes, como o DeepSeek-V3, pode levar mais tempo do que o tempo limite de implantação padrão. Se o comando deploy-model expirar, o processo de implantação vai continuar sendo executado em segundo plano.

      O comando deploy-model retorna um ID de operação que pode ser usado para verificar quando a operação for concluída. Pesquise o status da operação até que a resposta inclua "done": true. Use o seguinte comando para consultar o status:

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

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

    Receber inferências on-line do modelo implantado

    Nesta seção, descrevemos como enviar uma solicitação de inferência on-line ao endpoint público dedicado em que o modelo DeepSeek-V3 está implantado.

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

      PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
      
    2. Envie uma solicitação de previsão bruta:

      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 uma solicitação 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, mude o valor de "stream" de false para true.

    Limpar

    Para evitar outras cobranças da Vertex AI, exclua os recursos do Google Cloud que você criou durante este tutorial:

    1. Para desfazer a implantação do modelo e excluir o endpoint, 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 excluir 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
      

    A seguir