Objetivos
Este guia mostra como executar a inferência de MDIs em GPUs do Cloud Run com o Gemma 3 e o Ollama, e tem os seguintes objetivos:
- Implemente o Ollama com o modelo Gemma 3 num serviço do Cloud Run com GPU.
- Enviar comandos para o serviço Ollama no respetivo ponto final privado.
Para saber uma forma alternativa de implementar modelos abertos Gemma 3 no Cloud Run através de um contentor pré-criado, consulte o artigo Execute modelos Gemma 3 no Cloud Run.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Antes de começar
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Instale e inicialize a CLI gcloud.
- Peça uma quota de
Total Nvidia L4 GPU allocation, per project per regionna API Cloud Run Admin na página Quotas e limites do sistema para concluir este tutorial. -
Administrador do Artifact Registry (
roles/artifactregistry.admin) -
Editor do Cloud Build (
roles/cloudbuild.builds.editor) -
Administrador do Cloud Run (
roles/run.admin) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser) -
Consumidor de utilização do serviço (
roles/serviceusage.serviceUsageConsumer) -
Administrador de armazenamento (
roles/storage.admin) -
Na Google Cloud consola, aceda à página IAM.
Aceda ao IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email usado para implementar o serviço do Cloud Run.
- Na lista Selecionar uma função, selecione uma função.
- Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
- Clique em Guardar.
- PROJECT_NUMBER com o número do seu Google Cloud projeto.
- PROJECT_ID com o ID do seu Google Cloud projeto.
- PRINCIPAL com a conta à qual está a adicionar a associação. Normalmente, este é o endereço de email que é usado para implementar o serviço do Cloud Run.
- ROLE com a função que está a adicionar à conta do implementador.
Funções necessárias
Para receber as autorizações de que precisa para concluir o tutorial, peça ao seu administrador para lhe conceder as seguintes funções da IAM no seu projeto:
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Conceda as funções
Consola
gcloud
Para conceder as funções de IAM necessárias à sua conta no seu projeto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Substituir:
Configure o gcloud
Para configurar a CLI gcloud para o seu serviço do Cloud Run:
Defina o projeto predefinido:
gcloud config set project PROJECT_IDClique no ícone para substituir a variável PROJECT_ID pelo nome do projeto que criou para este tutorial. Isto garante que todas as fichas nesta página que fazem referência a PROJECT_ID já têm o valor correto preenchido.
Configure a CLI gcloud para usar a região
europe-west1para comandos do Cloud Run.gcloud config set run/region europe-west1
Use o Docker para criar uma imagem de contentor com o Ollama e o Gemma
Crie um diretório para o serviço Ollama e altere o diretório de trabalho para este novo diretório:
mkdir ollama-backend cd ollama-backendCrie um ficheiro
Dockerfilecom o seguinte conteúdo:FROM ollama/ollama:latest # Listen on all interfaces, port 8080 ENV OLLAMA_HOST 0.0.0.0:8080 # Store model weight files in /models ENV OLLAMA_MODELS /models # Reduce logging verbosity ENV OLLAMA_DEBUG false # Never unload model weights from the GPU ENV OLLAMA_KEEP_ALIVE -1 # Store the model weights in the container image ENV MODEL gemma3:4b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
Armazene os pesos do modelo na imagem do contentor para iniciar as instâncias mais rapidamente
A Google recomenda armazenar os pesos do modelo para o Gemma 3 (4B) e modelos de tamanho semelhante diretamente na imagem do contentor.
Os pesos do modelo são os parâmetros numéricos que definem o comportamento de um MDG. O Ollama tem de ler totalmente estes ficheiros e carregar os pesos na memória da GPU (VRAM) durante o arranque da instância do contentor, antes de poder começar a publicar pedidos de inferência.
No Cloud Run, um arranque rápido da instância de contentor é importante para minimizar a latência dos pedidos. Se a instância do contentor tiver um tempo de arranque lento, o serviço demora mais tempo a dimensionar de zero para uma instância e precisa de mais tempo para dimensionar durante um pico de tráfego.
Para garantir um arranque rápido, armazene os ficheiros do modelo na própria imagem do contentor. Este processo é mais rápido e fiável do que transferir os ficheiros de uma localização remota durante o arranque. O armazenamento interno de imagens de contentores do Cloud Run está otimizado para processar picos de tráfego, o que lhe permite configurar rapidamente o sistema de ficheiros do contentor quando uma instância é iniciada.
Tenha em atenção que os pesos do modelo Gemma 3 (4B) ocupam 8 GB de armazenamento. Os modelos maiores têm ficheiros de peso do modelo maiores, e estes podem ser impraticáveis de armazenar na imagem do contentor. Consulte o artigo Práticas recomendadas: inferência de IA no Cloud Run com GPUs para ver uma vista geral das concessões.
Crie e implemente o serviço Ollama para inferência de MDIs
Crie e implemente o serviço no Cloud Run:
gcloud run deploy ollama-gemma \
--source . \
--concurrency 4 \
--cpu 8 \
--set-env-vars OLLAMA_NUM_PARALLEL=4 \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 1 \
--memory 32Gi \
--no-allow-unauthenticated \
--no-cpu-throttling \
--no-gpu-zonal-redundancy \
--timeout=600Tenha em atenção as seguintes flags importantes neste comando:
--concurrency 4está definido para corresponder ao valor da variável de ambienteOLLAMA_NUM_PARALLEL.--gpu 1com--gpu-type nvidia-l4atribui 1 GPU NVIDIA L4 a cada instância do Cloud Run no serviço.--max-instances 1especifica o número máximo de instâncias para dimensionar. Tem de ser igual ou inferior à quota de GPU NVIDIA L4 (Total Nvidia L4 GPU allocation, per project per region) do seu projeto.--no-allow-unauthenticatedrestringe o acesso não autenticado ao serviço. Ao manter o serviço privado, pode confiar na autenticação da gestão de identidade e de acesso (IAM) incorporada do Cloud Run para a comunicação entre serviços. Consulte o artigo Gerir o acesso através do IAM.- O
--no-cpu-throttlingé necessário para ativar a GPU. --no-gpu-zonal-redundancyDefina opções de redundância zonal consoante os seus requisitos de comutação por falha zonal e a quota disponível. Consulte as opções de redundância zonal da GPU para ver detalhes.
Definições de simultaneidade para um desempenho ideal
Esta secção fornece contexto sobre as definições de concorrência recomendadas. Para uma latência de pedido ideal, certifique-se de que a definição --concurrency é igual à variável de ambiente OLLAMA_NUM_PARALLEL do Ollama.
OLLAMA_NUM_PARALLELdetermina quantos espaços de pedidos estão disponíveis por cada modelo para processar pedidos de inferência em simultâneo.--concurrencydetermina quantos pedidos o Cloud Run envia a uma instância do Ollama em simultâneo.
Se --concurrency exceder OLLAMA_NUM_PARALLEL, o Cloud Run pode enviar mais pedidos a um modelo no Ollama do que tem espaços de pedidos disponíveis.
Isto leva à colocação em fila de pedidos no Ollama, o que aumenta a latência dos pedidos em fila. Também leva a um dimensionamento automático menos reativo, uma vez que os pedidos
em fila não acionam o Cloud Run para dimensionar horizontalmente e iniciar novas instâncias.
O Ollama também suporta a publicação de vários modelos a partir de uma GPU. Para evitar completamente
a colocação em fila de pedidos na instância do Ollama, deve continuar a definir
--concurrency de modo a corresponder a OLLAMA_NUM_PARALLEL.
É importante ter em atenção que o aumento de OLLAMA_NUM_PARALLEL também faz com que os pedidos paralelos demorem mais tempo.
Otimize a utilização da GPU
Para uma utilização da GPU ideal, aumente o valor de --concurrency, mantendo-o dentro do dobro do valor de OLLAMA_NUM_PARALLEL. Embora isto leve a uma fila de pedidos no Ollama, pode ajudar a melhorar a utilização: as instâncias do Ollama podem processar imediatamente pedidos da respetiva fila, e as filas ajudam a absorver picos de tráfego.
Teste o serviço Ollama implementado com o curl
Agora que implementou o serviço Ollama, pode enviar-lhe pedidos. No entanto, se enviar um pedido diretamente, o Cloud Run responde com HTTP 401 Unauthorized.
Isto é intencional, porque uma API de inferência de MDG destina-se a ser chamada por outros serviços, como uma aplicação de interface. Para mais informações sobre a autenticação de serviço a serviço no Cloud Run, consulte o artigo Autenticação de serviço a serviço.
Para enviar pedidos ao serviço Ollama, adicione um cabeçalho com um token OIDC válido aos pedidos, por exemplo, através do proxy do programador do Cloud Run:
Inicie o proxy e, quando lhe for pedido para instalar o componente
cloud-run-proxy, escolhaY:gcloud run services proxy ollama-gemma --port=9090Envie-lhe um pedido num separador do terminal separado, deixando o proxy em execução. Tenha em atenção que o proxy é executado em
localhost:9090:curl http://localhost:9090/api/generate -d '{ "model": "gemma3:4b", "prompt": "Why is the sky blue?" }'Este comando deve fornecer uma saída de streaming semelhante a esta:
{"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.641492408Z","response":"That","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.687529153Z","response":"'","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.753284927Z","response":"s","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.812957381Z","response":" a","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.889102649Z","response":" fantastic","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.925748116Z","response":",","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.958391572Z","response":" decept","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.971035028Z","response":"ively","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.989678484Z","response":" tricky","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.999321940Z","response":" question","done":false} ...
Limpar
Para evitar custos adicionais na sua conta Google Cloud , elimine todos os recursos que implementou com este tutorial.
Elimine o projeto
Se criou um novo projeto para este tutorial, elimine-o. Se usou um projeto existente e precisa de o manter sem as alterações que adicionou neste tutorial, elimine os recursos que criou para o tutorial.
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimine recursos de tutoriais
Elimine o serviço do Cloud Run que implementou neste tutorial. Os serviços do Cloud Run não incorrem em custos até receberem pedidos.
Para eliminar o seu serviço do Cloud Run, execute o seguinte comando:
gcloud run services delete SERVICE-NAME
Substitua SERVICE-NAME pelo nome do seu serviço.
Também pode eliminar serviços do Cloud Run a partir da Google Cloud consola.
Remova a configuração da região predefinida
gcloudque adicionou durante a configuração do tutorial:gcloud config unset run/regionRemova a configuração do projeto:
gcloud config unset project