1. Introduzione
Panoramica
Cloud Run ha recentemente aggiunto il supporto GPU. È disponibile come anteprima pubblica con lista d'attesa. Se ti interessa provare la funzionalità, compila questo modulo per entrare nella lista d'attesa. Cloud Run è una piattaforma di container su Google Cloud che semplifica l'esecuzione del codice in un container, senza richiedere la gestione di un cluster.
Oggi, le GPU che rendiamo disponibili sono le GPU Nvidia L4 con 24 GB di vRAM. C'è una GPU per istanza Cloud Run e la scalabilità automatica di Cloud Run è ancora applicabile. Ciò include lo scale out fino a 5 istanze (con aumento della quota disponibile), nonché lo scale down fino a zero istanze quando non ci sono richieste.
Un caso d'uso delle GPU è l'esecuzione dei tuoi modelli linguistici di grandi dimensioni (LLM) open source. Questo tutorial spiega come eseguire il deployment di un servizio che esegue un LLM.
In questo codelab, eseguirai il deployment di un servizio multi-container che utilizza Open WebUI come container di ingresso frontend e Ollama in un sidecar per gestire un modello Gemma 2 2B archiviato in un bucket Google Cloud Storage.
Cosa imparerai a fare
- Come creare un servizio con più container in Cloud Run
- Come eseguire il deployment di Ollama come sidecar che pubblica un modello Gemma 2 2B
- Come eseguire il deployment di Open WebUI come container di ingresso frontend
2. Imposta le variabili di ambiente e abilita le API
Esegui l'upgrade di gcloud CLI
Innanzitutto, devi avere installato una versione recente di gcloud CLI. Puoi aggiornare la CLI eseguendo il seguente comando:
gcloud components update
Configura le variabili di ambiente
Puoi impostare le variabili di ambiente che verranno utilizzate durante questo codelab.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
Abilita API
Prima di poter iniziare a utilizzare questo codelab, devi abilitare diverse API. Questo codelab richiede l'utilizzo delle seguenti API. Puoi abilitare queste API eseguendo il seguente comando:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
Crea una directory per questo codelab.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Crea un bucket GCS per archiviare il modello Gemma 2 2B
Per prima cosa, installa Ollama per scaricare il modello. Il modello verrà scaricato in /home/$USER/.ollama/models
curl -fsSL https://ollama.com/install.sh | sh
Ora esegui ollama eseguendo
ollama serve
Ollama inizia ad ascoltare sulla porta 11434.
Apri una seconda finestra del terminale per scaricare il modello Gemma 2 2B.
ollama pull gemma2:2b
(Facoltativo) Puoi interagire con Gemma dalla riga di comando eseguendo
ollama run gemma2:2b
Al termine della conversazione con Gemma, puoi uscire digitando
/bye
4. Crea un bucket di archiviazione
Ora che il modello è stato scaricato, puoi spostarlo nel bucket GCS.
Per prima cosa, crea il bucket.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Ora sposta la cartella dei modelli in GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Crea l'immagine Ollama
Crea un Dockerfile con i seguenti contenuti
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
Crea un repository Artifact Registry per archiviare le immagini del servizio.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
Crea l'immagine sidecar di 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. Crea l'immagine del frontend Open WebUI
In questa sezione creerai il container di ingresso frontend utilizzando Open WebUI.
Utilizza Docker per eseguire il pull dell'immagine Open WebUI.
docker pull ghcr.io/open-webui/open-webui:main
Poi configura Docker in modo che utilizzi le tue credenziali Google Cloud per l'autenticazione con Artifact Registry. In questo modo potrai utilizzare Docker per eseguire il push di un'immagine in un repository Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Tagga l'immagine ed esegui il push su 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. Esegui il deployment del servizio multiconteiner in Cloud Run
Utilizzare un file YAML per eseguire il deployment del servizio multiconteiner
Crea un file service.yaml con i seguenti contenuti.
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
Aggiorna service.yaml sostituendo PROJECT_ID con il tuo ID progetto:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
Esegui il deployment in Cloud Run utilizzando il comando seguente.
gcloud beta run services replace service.yaml
Testa il servizio Cloud Run
Ora apri l'URL del servizio nel browser web.
Una volta completato il caricamento della UI, scegli Gemma 2 2B in Seleziona un modello.
Ora fai una domanda a Gemma, ad esempio "Perché il cielo è blu?"
8. Complimenti!
Congratulazioni per aver completato il codelab.
Ti consigliamo di consultare la documentazione su Cloud Run Functions.
Argomenti trattati
- Come creare un servizio con più container in Cloud Run
- Come eseguire il deployment di Ollama come sidecar che pubblica un modello Gemma 2 2B
- Come eseguire il deployment di Open WebUI come container di ingresso frontend
9. Esegui la pulizia
Per evitare addebiti involontari (ad esempio, se i servizi Cloud Run vengono richiamati inavvertitamente più volte rispetto all'allocazione mensile di chiamate a Cloud Run nel livello senza costi), puoi eliminare Cloud Run o il progetto che hai creato nel passaggio 2.
Per eliminare la funzione Cloud Run, vai alla console Cloud Run all'indirizzo https://console.cloud.google.com/run ed elimina il servizio ollama-sidecar-codelab.
Se scegli di eliminare l'intero progetto, puoi andare alla pagina https://console.cloud.google.com/cloud-resource-manager, selezionare il progetto che hai creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai cambiarlo in Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list.