1. Introdução
Visão geral
Recentemente, o Cloud Run adicionou suporte a GPUs. Está disponível como um pré-lançamento público na lista de espera. Se você quiser testar o recurso, preencha este formulário para entrar na lista de espera. O Cloud Run é uma plataforma de contêineres no Google Cloud que simplifica a execução do código em um contêiner, sem exigir o gerenciamento de um cluster.
Hoje, as GPUs que disponibilizamos são Nvidia L4 com 24 GB de vRAM. Há uma GPU por instância do Cloud Run, e o escalonamento automático do Cloud Run ainda se aplica. Isso inclui o escalonamento horizontal para até cinco instâncias (com aumento de cota disponível) e a redução para zero instância quando não há solicitações.
Um caso de uso das GPUs é executar seus próprios modelos de linguagem grande abertos (LLMs). Neste tutorial, você aprende a implantar um serviço que executa um LLM.
Esse é um serviço de back-end que executa vLLM (link em inglês), um mecanismo de inferência para sistemas de produção. Este codelab usa o Gemma 2 do Google com um modelo ajustado por instruções de 2 bilhões de parâmetros.
O que você vai aprender
- Como usar GPUs no Cloud Run.
- Como usar o Hugging Face para recuperar um modelo.
- Como implantar o modelo Gemma 2 2B ajustado por instruções do Google no Cloud Run usando o vLLM como mecanismo de inferência.
- Como invocar o serviço de back-end para concluir a frase.
2. Configuração e requisitos
Pré-requisitos
- Você fez login no console do Cloud.
- Você já implantou um serviço do Cloud Run. Por exemplo, siga o guia de início rápido sobre a implantação de um serviço da Web pelo código-fonte.
- Você tem uma conta do Hugging Face e reconhece a licença do Gemma 2 2b em https://huggingface.co/google/gemma-2-2b-it; Caso contrário, você não poderá fazer o download do modelo.
- Você criou um token de acesso que tem acesso ao modelo google/gemma-2-2b-it.
Ativar o Cloud Shell
- No Console do Cloud, clique em Ativar o Cloud Shell.
Se você estiver iniciando o Cloud Shell pela primeira vez, verá uma tela intermediária com a descrição dele. Se aparecer uma tela intermediária, clique em Continuar.
Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.
Essa máquina virtual tem todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Grande parte do trabalho neste codelab, se não todo, pode ser feito em um navegador.
Depois de se conectar ao Cloud Shell, você verá sua autenticação e o projeto estará configurado com o ID do seu projeto.
- Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list
Resposta ao comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Execute o seguinte comando no Cloud Shell para confirmar que o comando gcloud sabe sobre seu projeto:
gcloud config list project
Resposta ao comando
[core] project = <PROJECT_ID>
Se o projeto não estiver configurado, configure-o usando este comando:
gcloud config set project <PROJECT_ID>
Resposta ao comando
Updated property [core/project].
3. Ative APIs e defina variáveis de ambiente
Ativar APIs
Antes de começar a usar este codelab, você precisa ativar várias APIs. Este codelab requer o uso das APIs a seguir. É possível ativar essas APIs executando o seguinte comando:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ secretmanager.googleapis.com \ artifactregistry.googleapis.com
Configurar as variáveis de ambiente.
Você pode definir variáveis de ambiente que serão usadas neste codelab.
HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN> PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 SERVICE_NAME=vllm-gemma-2-2b-it AR_REPO_NAME=vllm-gemma-2-2b-it-repo SERVICE_ACCOUNT=vllm-gemma-2-2b-it SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
4. Criar uma conta de serviço
Essa conta de serviço é usada para criar o serviço do Cloud Run e acessar um secret do Secret Manager.
Primeiro, execute este comando para criar a conta de serviço:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secrete manager"
Depois, conceda o papel de usuário da Vertex AI à conta de serviço.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
Agora, crie um secret no Secret Manager chamado HF_TOKEN para seu token de acesso do Hugging Face. O Cloud Build usa a conta de serviço para acessar esse secret no momento da criação e extrair o modelo Gemma 2 (2B) do Hugging Face. Saiba mais sobre os secrets e o Cloud Build aqui.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
E conceder à conta de serviço acesso ao secret HF_TOKEN no Secret Manager.
gcloud secrets add-iam-policy-binding HF_TOKEN \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/secretmanager.secretAccessor'
5. Crie a imagem no Artifact Registry
Primeiro, crie um repositório no Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Em seguida, crie um Dockerfile
que incorporará o secret do Secret Manager. Saiba mais sobre a flag "Docker buildx –secrets" aqui.
FROM vllm/vllm-openai:latest ENV HF_HOME=/model-cache RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \ huggingface-cli download google/gemma-2-2b-it ENV HF_HUB_OFFLINE=1 ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \ --port ${PORT:-8000} \ --model ${MODEL_NAME:-google/gemma-2-2b-it} \ ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
Agora crie um arquivo cloudbuild.yaml
steps: - name: 'gcr.io/cloud-builders/docker' id: build entrypoint: 'bash' secretEnv: ['HF_TOKEN'] args: - -c - | SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN . availableSecrets: secretManager: - versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest' env: 'HF_TOKEN' images: ["${_IMAGE}"] substitutions: _IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it' options: dynamicSubstitutions: true machineType: "E2_HIGHCPU_32"
Por fim, envie um build.
gcloud builds submit --config=cloudbuild.yaml
O build pode levar aproximadamente 8 minutos.
6. Implante o serviço
Agora está tudo pronto para implantar a imagem no Cloud Run.
gcloud beta run deploy $SERVICE_NAME \ --image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 --gpu-type=nvidia-l4 \ --region us-central1 \ --no-allow-unauthenticated \ --max-instances 5 \ --no-cpu-throttling
A implantação pode levar até cinco minutos.
7. Testar o serviço
Após a implantação, é possível usar o serviço de proxy dev do Cloud Run, que adiciona automaticamente um token de ID para você, ou usar o comando "curl" do URL do serviço.
Como usar o serviço de proxy de desenvolvedor do Cloud Run
Para usar o serviço de proxy do desenvolvedor do Cloud Run, siga estas etapas:
Primeiro, execute o seguinte comando:
gcloud run services proxy $SERVICE_NAME --region us-central1
Em seguida, use o comando "curl" do serviço
curl -X POST http://localhost:8080/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Uso direto do URL do serviço
Primeiro, recupere o URL do serviço implantado.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
Use curl no serviço
curl -X POST $SERVICE_URL/v1/completions \ -H "Authorization: bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Resultados
Os resultados serão semelhantes aos exibidos abaixo:
{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}
8. Parabéns!
Parabéns por concluir o codelab.
Recomendamos a leitura da documentação do Cloud Run.
O que vimos
- Como usar GPUs no Cloud Run.
- Como usar o Hugging Face para recuperar um modelo.
- Como implantar o modelo Gemma 2 (2B) do Google no Cloud Run usando o vLLM como mecanismo de inferência.
- Como invocar o serviço de back-end para concluir a frase.
9. Limpar
Para evitar cobranças acidentais (por exemplo, se os serviços do Cloud Run forem invocados por engano mais vezes do que sua alocação mensal de invocação 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 do Cloud em https://console.cloud.google.com/run e exclua o serviço vllm-gemma-2-2b
. Talvez você também queira excluir a conta de serviço vllm-gemma-2-2b
.
Se você optar por excluir o projeto inteiro, acesse https://console.cloud.google.com/cloud-resource-manager, selecione o projeto criado na etapa 2 e escolha "Excluir". Se você excluir o projeto, precisará alterar os projetos no SDK Cloud. Para conferir a lista de todos os projetos disponíveis, execute gcloud projects list
.