1. Introdução
Visão geral
O Cloud Run adicionou recentemente o suporte a GPU. Ele está disponível como uma visualização pública em 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 facilita a execução do código em um contêiner, sem exigir que você gerencie um cluster.
Atualmente, as GPUs que disponibilizamos são GPUs 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 de até cinco instâncias (com aumento de cota disponível), bem como o escalonamento vertical para zero instâncias quando não há solicitações.
Um caso de uso para GPUs é a execução de modelos de linguagem grandes (LLMs, na sigla em inglês) abertos. Este tutorial orienta você na implantação de um serviço que executa um LLM.
Neste codelab, você vai implantar um serviço de vários contêineres que usa o Open WebUI como um contêiner de entrada de front-end e o Ollama em um arquivo secundário para disponibilizar um modelo Gemma 2 2B armazenado em um bucket do Cloud Storage.
O que você vai aprender
- Como criar um serviço de vários contêineres no Cloud Run
- Como implantar o Ollama como um arquivo secundário que disponibiliza um modelo Gemma 2 2B
- Como implantar o Open WebUI como um contêiner de entrada de front-end
2. Definir variáveis de ambiente e ativar APIs
Fazer upgrade da CLI gcloud
Primeiro, você precisa ter uma versão recente da CLI gcloud instalada. Para atualizar a CLI, execute o seguinte comando:
gcloud components update
Configurar as variáveis de ambiente
Você pode definir variáveis de ambiente que serão usadas neste codelab.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
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 \
storage.googleapis.com \
artifactregistry.googleapis.com
Crie um diretório para este codelab.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Criar um bucket do GCS para armazenar o modelo Gemma 2 2B
Primeiro, instale o Ollama para fazer o download do modelo. Isso vai fazer o download do modelo para /home/$USER/.ollama/models
curl -fsSL https://ollama.com/install.sh | sh
Agora execute o Ollama executando
ollama serve
O Ollama começa a detectar na porta 11434.
Abra uma segunda janela de terminal para extrair o modelo Gemma 2 2B para
ollama pull gemma2:2b
(Opcional) Você pode interagir com o Gemma na linha de comando executando
ollama run gemma2:2b
Quando terminar de conversar com o Gemma, saia digitando
/bye
4. Crie um bucket de armazenamento
Agora que o modelo foi baixado, você pode movê-lo para o bucket do GCS.
Primeiro, crie o bucket.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Agora, mova a pasta de modelos para o GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Criar a imagem do Ollama
Crie um Dockerfile com o seguinte conteúdo
FROM --platform=linux/amd64 ollama/ollama # Listen on all interfaces, port 11434 ENV OLLAMA_HOST 0.0.0.0:11434 # 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
Crie um repositório do Artifact Registry para armazenar as imagens de serviço.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
Crie a imagem do arquivo secundário do Ollama
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
6. Criar a imagem de front-end do Open WebUI
Nesta seção, você vai criar o contêiner de entrada de front-end usando o Open WebUI.
Use o Docker para extrair a imagem do Open WebUI.
docker pull ghcr.io/open-webui/open-webui:main
Em seguida, configure o Docker para usar suas credenciais do Google Cloud para autenticar com o Artifact Registry. Isso permite que você use o Docker para enviar uma imagem para um repositório do Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Marque a imagem e envie-a para o Artifact Registry.
docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui
7. Implantar o serviço de vários contêineres no Cloud Run
Usar um arquivo YAML para implantar o serviço de vários contêineres
Crie um service.yaml com o seguinte conteúdo.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ollama-sidecar-codelab
labels:
cloud.googleapis.com/location: us-central1
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: '5'
run.googleapis.com/cpu-throttling: 'false'
run.googleapis.com/startup-cpu-boost: 'true'
run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}'
spec:
containerConcurrency: 80
timeoutSeconds: 300
containers:
- name: openwebui
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui
ports:
- name: http1
containerPort: 8080
env:
- name: OLLAMA_BASE_URL
value: http://localhost:11434
- name: WEBUI_AUTH
value: 'false'
resources:
limits:
memory: 1Gi
cpu: 2000m
volumeMounts:
- name: in-memory-1
mountPath: /app/backend/data
startupProbe:
timeoutSeconds: 240
periodSeconds: 240
failureThreshold: 1
tcpSocket:
port: 8080
- name: ollama-sidecar
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b
env:
- name: OLLAMA_MODELS
value: /root/.ollama/models
resources:
limits:
cpu: '6'
nvidia.com/gpu: '1'
memory: 16Gi
volumeMounts:
- name: gcs-1
mountPath: /root/.ollama
startupProbe:
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
tcpSocket:
port: 11434
volumes:
- name: gcs-1
csi:
driver: gcsfuse.run.googleapis.com
volumeAttributes:
bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab
- name: in-memory-1
emptyDir:
medium: Memory
sizeLimit: 10Gi
nodeSelector:
run.googleapis.com/accelerator: nvidia-l4
Atualize service.yaml para substituir PROJECT_ID pelo ID do projeto:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
Implante no Cloud Run usando o seguinte comando.
gcloud beta run services replace service.yaml
teste o serviço do Cloud Run
Agora abra o URL do serviço no navegador da Web.
Depois que a interface for carregada, em Selecionar um modelo, escolha Gemma 2 2B.
Agora faça uma pergunta ao Gemma, por exemplo, "Por que o céu é azul?"
8. Parabéns!
Parabéns por concluir o codelab.
Recomendamos revisar a documentação sobre as funções do Cloud Run.
O que vimos
- Como criar um serviço de vários contêineres no Cloud Run
- Como implantar o Ollama como um arquivo secundário que disponibiliza um modelo Gemma 2 2B
- Como implantar o Open WebUI como um contêiner de entrada de front-end
9. Liberar espaço
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 na camada sem custo financeiro, exclua o Cloud Run ou o projeto criado na etapa 2.
Para excluir a função do Cloud Run, acesse o console do Cloud Run em https://console.cloud.google.com/run e exclua o serviço ollama-sidecar-codelab.
Se você optar por 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, será necessário mudar os projetos no SDK Cloud. Para conferir a lista de todos os projetos disponíveis, execute gcloud projects list.