Como executar a inferência de LLM em GPUs do Cloud Run com o vLLM

1. Introdução

Visão geral

O Cloud Run é uma plataforma de contêineres no Google Cloud que facilita a execução do seu código em um contêiner, sem exigir o gerenciamento de um cluster.

O Cloud Run oferece uma GPU L4 ou NVIDIA RTX PRO 6000 Blackwell. Há uma GPU por instância do Cloud Run, e o escalonamento automático do Cloud Run ainda é aplicado, incluindo a redução para zero instâncias quando não há solicitações.

Um caso de uso para GPUs é executar seus próprios modelos de linguagem grandes (LLMs) abertos. Neste tutorial, mostramos como implantar um serviço que executa um LLM.

Este codelab descreve como implantar modelos abertos do Gemma 4 no Cloud Run usando um contêiner pré-criado com a biblioteca de inferência vLLM.

O que você vai aprender

  • Como usar GPUs no Cloud Run.
  • Como implantar o modelo ajustado por instruções Gemma 4 2B do Google no Cloud Run usando o vLLM como um mecanismo de inferência.

2. Configuração e requisitos

Pré-requisitos

3. Ativar APIs e definir variáveis de ambiente

Ativar APIs

Antes de começar a usar este codelab, você precisa ativar várias APIs. Este codelab exige o uso das seguintes APIs. Para ativar essas APIs, execute o seguinte comando:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    artifactregistry.googleapis.com

Definir variáveis de ambiente

Configure o ID do projeto abaixo.

export PROJECT_ID=<YOUR_PROJECT_ID>

export REGION=europe-west4
export SERVICE_NAME=gemma4-cr-codelab
export SERVICE_ACCOUNT_NAME=gemma4-cr-sa
export SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

4. Criar uma conta de serviço

Essa conta de serviço é usada como a identidade do serviço do Cloud Run.

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
  --display-name="Cloud Run gemma 4 SA"

5. Implante o serviço

Para implantar modelos do Gemma no Cloud Run, use o seguinte comando da CLI gcloud com as configurações recomendadas:

CONTAINER_ARGS=(
    "serve"
    "google/gemma-4-E2B-it"
    "--enable-chunked-prefill"
    "--enable-prefix-caching"
    "--generation-config=auto"
    "--enable-auto-tool-choice"
    "--tool-call-parser=gemma4"
    "--reasoning-parser=gemma4"
    "--dtype=bfloat16"
    "--max-num-seqs=64"
    "--gpu-memory-utilization=0.95"
    "--tensor-parallel-size=1"
    "--port=8080"
    "--host=0.0.0.0"
)
gcloud beta run deploy $SERVICE_NAME \
    --image "us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:gemma4" \
    --project $PROJECT_ID \
    --region $REGION \
    --execution-environment gen2 \
    --no-allow-unauthenticated \
    --cpu 20 \
    --memory 80Gi \
    --gpu 1 \
    --gpu-type nvidia-rtx-pro-6000 \
    --no-gpu-zonal-redundancy \
    --no-cpu-throttling \
    --max-instances 3 \
    --concurrency 64 \
    --timeout 600 \
    --service-account $SERVICE_ACCOUNT_ADDRESS \
    --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240 \
    --command "vllm" \
    --args=$(IFS=','; echo "${CONTAINER_ARGS[*]}")

6. Testar o serviço

Depois da implantação, use o serviço de proxy de desenvolvimento do Cloud Run, que adiciona automaticamente um token de ID, ou faça curl diretamente no URL do serviço.

Como usar o serviço de proxy de desenvolvimento do Cloud Run

Primeiro, inicie o proxy

gcloud run services proxy $SERVICE_NAME \
  --project $PROJECT \
  --region $REGION \
  --port=9090

Execute o comando a seguir para enviar uma solicitação em uma guia de terminal separada, deixando o proxy em execução. O proxy é executado em localhost:9090.

curl http://localhost:9090/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemma-4-E2B-it",
    "messages": [{"role": "user", "content": "Why is the sky blue?"}],
    "chat_template_kwargs": {
         "enable_thinking": true
     },
     "skip_special_tokens": false
  }'

A resposta será semelhante a esta:

{
 "id": "chatcmpl-9cf1ab1450487047",
 "object": "chat.completion",
 "created": 1774904187,
 "model": "google/gemma-4-E2B-it",
 "choices": [
   {
     "index": 0,
     "message": {
       "role": "assistant",
       "content": "The short answer is a phenomenon called **Rayleigh scattering**...",
       "function_call": null,
       "tool_calls": [],
       "reasoning": "*   Question: \"Why is the sky blue?\"\n..."
     },
     "finish_reason": "stop",
     "stop_reason": 106
   }
 ],
 "usage": {
   "prompt_tokens": 21,
   "total_tokens": 877,
   "completion_tokens": 856
 }
}

Usar o URL do serviço diretamente

Primeiro, recupere o URL do serviço implantado.

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')

Fazer curl do serviço

curl $SERVICE_URL/v1/chat/completions \
  -H "Authorization: bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemma-4-E2B-it",
    "messages": [{"role": "user", "content": "Why is the sky blue?"}],
    "chat_template_kwargs": {
         "enable_thinking": true
     },
     "skip_special_tokens": false
  }'

7. Parabéns!

Parabéns por concluir o codelab!

Recomendamos consultar a documentação do Cloud Run.

O que vimos

  • Como usar GPUs no Cloud Run.
  • Como implantar o modelo Gemma 4 (2B) do Google no Cloud Run usando o vLLM como um mecanismo de inferência.

8. Limpar

Para evitar cobranças acidentais, por exemplo, se os serviços do Cloud Run forem invocados mais vezes do que sua alocação mensal de invocações do Cloud Run no nível sem custo financeiro, exclua o Cloud Run ou o projeto criado na etapa 2.

Para excluir o serviço do Cloud Run, acesse o console do Cloud Run em https://console.cloud.google.com/run e exclua o serviço gemma4-cr-codelab. Também é possível excluir a conta de serviço gemma4-cr-codelab-sa.

Se você quiser excluir todo o projeto, acesse https://console.cloud.google.com/cloud-resource-manager, selecione o projeto criado na Etapa 2 e escolha "Excluir". Se você excluir o projeto, vai precisar mudar de projeto no SDK Cloud. Para conferir a lista de todos os projetos disponíveis, execute gcloud projects list.