1. Introduzione
Panoramica
Di recente, Cloud Run ha aggiunto il supporto per le GPU. È disponibile come anteprima pubblica in lista d'attesa. Se vuoi provare la funzionalità, compila questo modulo per iscriverti alla 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.
Attualmente, le GPU che rendiamo disponibili sono GPU Nvidia L4 con 24 GB di vRAM. È disponibile una GPU per istanza Cloud Run e la scalabilità automatica di Cloud Run continua a essere applicata. Sono inclusi lo scale up fino a 5 istanze (con aumento della quota disponibile) e lo scale down fino a zero istanze quando non ci sono richieste.
Un caso d'uso delle GPU è l'esecuzione di modelli linguistici di grandi dimensioni (LLM) aperti. Questo tutorial illustra la procedura di deployment di un servizio che esegue un modello LLM.
In questo codelab, eseguirai il deployment di un servizio multi-container che utilizza Open WebUI come contenitore di ingresso frontend e Ollama in un sidecar per pubblicare un modello Gemma 2 2B archiviato in un bucket Google Cloud Storage.
Cosa imparerai a fare
- Creare un servizio di 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 contenitore di ingresso frontend
2. Imposta le variabili di ambiente e abilita le API
Eseguire l'upgrade dell'interfaccia a riga di comando gcloud
Innanzitutto, devi installare una versione recente di gcloud CLI. Puoi aggiornare l'interfaccia a riga di comando 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
Innanzitutto, dovrai installare 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 a rimanere in ascolto sulla porta 11434.
Apri una seconda finestra del terminale per scaricare il modello Gemma 2 2B in
ollama pull gemma2:2b
(Facoltativo) Puoi interagire con Gemma dalla riga di comando eseguendo
ollama run gemma2:2b
Quando hai finito di chattare con Gemma, puoi uscire digitando
/bye
4. Crea un bucket di archiviazione
Ora che il modello è stato scaricato, puoi spostarlo nel tuo bucket GCS.
Per prima cosa, crea il bucket.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Ora sposta la cartella dei modelli su GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Crea l'immagine di Ollama
Crea un file Dockerfile con i seguenti contenuti
FROM 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 # Store the model weights in the container image ENV MODEL gemma2:2b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
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 in entrata frontend utilizzando Open WebUI.
Utilizza Docker per scaricare l'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 autenticarsi con Artifact Registry. In questo modo potrai utilizzare Docker per eseguire il push di un'immagine a un repository Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Aggiungi un tag all'immagine ed esegui il push ad 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 multi-container in Cloud Run
Utilizza un file YAML per eseguire il deployment del servizio multi-container
Crea un 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 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 per sostituire 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 seguente comando.
gcloud beta run services replace service.yaml
Testare il servizio Cloud Run
Ora apri l'URL del servizio nel browser web.
Al termine del caricamento dell'interfaccia utente, seleziona Gemma 2 2B in Seleziona un modello.
Ora chiedi a Gemma una domanda, ad esempio "Perché il cielo è blu?"
8. Complimenti!
Complimenti per aver completato il codelab.
Ti consigliamo di consultare la documentazione sulle funzioni Cloud Run.
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
- Eseguire il deployment di Open WebUI come container in entrata frontend
9. Esegui la pulizia
Per evitare addebiti involontari, ad esempio se i servizi Cloud Run vengono invocati inavvertitamente più volte rispetto all'allocazione mensile di invocazioni Cloud Run nel livello senza costi, puoi eliminare Cloud Run o il progetto 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 all'indirizzo 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 modificare i progetti nel tuo Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list
.