1. Einführung
Übersicht
Cloud Run bietet seit Kurzem GPU-Unterstützung. Er steht als öffentliche Vorschau auf der Warteliste zur Verfügung. Wenn Sie die Funktion ausprobieren möchten, füllen Sie dieses Formular aus, um sich auf die Warteliste setzen zu lassen. Cloud Run ist eine Containerplattform in Google Cloud, mit der Sie Ihren Code ganz einfach in einem Container ausführen können, ohne einen Cluster verwalten zu müssen.
Derzeit stellen wir Nvidia L4-GPUs mit 24 GB vRAM zur Verfügung. Es gibt eine GPU pro Cloud Run-Instanz und das Cloud Run-Autoscaling wird weiterhin angewendet. Dazu gehört das Hochskalieren auf bis zu 5 Instanzen (mit Kontingenterhöhung) sowie das Herunterskalieren auf null Instanzen, wenn keine Anfragen vorhanden sind.
Ein Anwendungsfall für GPUs ist die Ausführung eigener Open Large Language Models (LLMs). In dieser Anleitung wird beschrieben, wie Sie einen Dienst bereitstellen, der ein LLM ausführt.
In diesem Codelab stellen Sie einen Dienst mit mehreren Containern bereit, der Open WebUI als Front-End-Ingress-Container und Ollama in einem Sidecar verwendet, um ein Gemma 2 2B-Modell bereitzustellen, das in einem Google Cloud Storage-Bucket gespeichert ist.
Aufgaben in diesem Lab
- Mehrere Containerdienste in Cloud Run erstellen
- Ollama als Sidecar für ein Gemma 2 2B-Modell bereitstellen
- Open WebUI als Frontend-Ingress-Container bereitstellen
2. Umgebungsvariablen festlegen und APIs aktivieren
gcloud CLI aktualisieren
Zuerst müssen Sie eine aktuelle Version der gcloud CLI installiert haben. Sie können die Befehlszeile mit dem folgenden Befehl aktualisieren:
gcloud components update
Umgebungsvariablen einrichten
Sie können Umgebungsvariablen festlegen, die in diesem Codelab verwendet werden.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
APIs aktivieren
Bevor Sie dieses Codelab verwenden können, müssen Sie mehrere APIs aktivieren. Für dieses Codelab sind die folgenden APIs erforderlich. Sie können diese APIs aktivieren, indem Sie den folgenden Befehl ausführen:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
Erstellen Sie ein Verzeichnis für dieses Codelab.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. GCS-Bucket zum Speichern des Gemma 2 2B-Modells erstellen
Installieren Sie zuerst Ollama, um das Modell herunterzuladen. Dadurch wird das Modell im Verzeichnis /home/$USER/.ollama/models heruntergeladen.
curl -fsSL https://ollama.com/install.sh | sh
Führen Sie jetzt ollama aus, indem Sie
ollama serve
Ollama beginnt mit dem Beobachten von Port 11434.
Öffnen Sie ein zweites Terminalfenster, um das Gemma 2 2B-Modell aufzurufen,
ollama pull gemma2:2b
Optional: Sie können über die Befehlszeile mit Gemma interagieren, indem Sie
ollama run gemma2:2b
Wenn Sie mit dem Chatten mit Gemma fertig sind, können Sie den Chat beenden, indem Sie
/bye
4. Storage-Bucket erstellen
Nachdem das Modell heruntergeladen wurde, können Sie es in Ihren GCS-Bucket verschieben.
Erstellen Sie zuerst den Bucket.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Verschieben Sie jetzt den Ordner „models“ in GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Ollama-Bild erstellen
Dockerfile mit folgendem Inhalt erstellen
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"]
Erstellen Sie ein Artifact Registry-Repository zum Speichern Ihrer Dienst-Images.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
Olama-Sidecar-Image erstellen
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
6. Open WebUI-Frontend-Image erstellen
In diesem Abschnitt erstellen Sie den Frontend-Ingress-Container mit Open WebUI.
Rufen Sie mit Docker das Open WebUI-Image auf.
docker pull ghcr.io/open-webui/open-webui:main
Konfigurieren Sie dann Docker so, dass Ihre Google Cloud-Anmeldedaten für die Authentifizierung bei Artifact Registry verwendet werden. So können Sie mit Docker ein Image in ein Artifact Registry-Repository verschieben.
gcloud auth configure-docker us-central1-docker.pkg.dev
Taggen Sie Ihr Image und übertragen Sie es dann per Push an 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. Dienst für mehrere Container in Cloud Run bereitstellen
YAML-Datei verwenden, um den Dienst für mehrere Container bereitzustellen
Erstellen Sie eine service.yaml
-Datei mit folgendem Inhalt:
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
Aktualisieren Sie „service.yaml“, indem Sie PROJECT_ID durch Ihre Projekt-ID ersetzen:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
Stellen Sie die Funktion mit dem folgenden Befehl in Cloud Run bereit.
gcloud beta run services replace service.yaml
Cloud Run-Dienst testen
Öffnen Sie jetzt die Dienst-URL in Ihrem Webbrowser.
Wählen Sie nach dem Laden der Benutzeroberfläche unter Modell auswählen die Option Gemma 2 2B aus.
Stellen Sie Gemma jetzt eine Frage: „Warum ist der Himmel blau?“
8. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs!
Weitere Informationen finden Sie in der Dokumentation zu Cloud Run-Funktionen.
Behandelte Themen
- Dienst mit mehreren Containern in Cloud Run erstellen
- Ollama als Sidecar für ein Gemma 2 2B-Modell bereitstellen
- Open WebUI als Frontend-Ingress-Container bereitstellen
9. Bereinigen
Um versehentliche Gebühren zu vermeiden, z. B. wenn die Cloud Run-Dienste versehentlich häufiger aufgerufen werden als Ihre monatliche Zuweisung von Cloud Run-Aufrufen in der kostenlosen Stufe, können Sie entweder Cloud Run oder das in Schritt 2 erstellte Projekt löschen.
Wenn Sie die Cloud Run-Funktion löschen möchten, rufen Sie die Cloud Console unter https://console.cloud.google.com/run auf und löschen Sie den Dienst ollama-sidecar-codelab
.
Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das in Schritt 2 erstellte Projekt aus und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie die Projekte in Ihrem Cloud SDK ändern. Sie können die Liste aller verfügbaren Projekte mit dem Befehl gcloud projects list
aufrufen.