Disponibilizar 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 LLama 3.1 405B (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. Observe que essa imagem do contêiner personalizada precisa ser compatível com a Vertex AI.

Antes de começar

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

Configurar um projeto do Google Cloud

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  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 role (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 role (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. No console do Google Cloud , ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

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: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 em que você está usando a Vertex AI.
    • PROJECT_ID: 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 Google Cloud CLI. Portanto, é necessário usar 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 receber 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