1. Einführung
Übersicht
Lerninhalte
- Gemma-Modell auf einer Cloud Run RTX 6000 Pro-GPU bereitstellen
- Modell während des Containerstarts gleichzeitig aus Cloud Storage herunterladen
2. Einrichtung und Anforderungen
Legen Sie Umgebungsvariablen fest, die in diesem Codelab verwendet werden:
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=europe-west4
export SERVICE_NAME=gemma-rtx-codelab
# set the project
gcloud config set project $PROJECT_ID
Für dieses Codelab erforderliche APIs aktivieren
gcloud services enable artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
compute.googleapis.com
Ordner für das Codelab erstellen
mkdir codelab-rtx
cd codelab-rtx
Aktivieren Sie den privaten Google-Zugriff für Ihr Subnetz, um das Laden von ML-Modellen aus Cloud Storage zu optimieren. Weitere Informationen finden Sie im Abschnitt Modelle aus Cloud Storage laden in der Dokumentation zu GPU-Best Practices.
gcloud compute networks subnets update default \
--region=europe-west4 \
--enable-private-ip-google-access
3. Cloud Storage einrichten
Erstellen Sie zuerst einen Cloud Storage-Bucket zum Speichern der Modellgewichte.
Eindeutigen Bucket erstellen
# Generate a unique bucket name
export MODEL_BUCKET="${PROJECT_ID}-rtx-codelab-$(python3 -c 'import uuid; print(str(uuid.uuid4())[:8])')"
echo "Bucket name: $MODEL_BUCKET"
# Create the regional bucket
gcloud storage buckets create gs://$MODEL_BUCKET \
--location=$REGION \
--uniform-bucket-level-access
4. Modellgewichtungen abrufen
Laden Sie als Nächstes das Gemma 3-Modell in ein lokales Verzeichnis herunter und laden Sie es dann in Ihren Cloud Storage-Bucket hoch.
Ollama installieren
Sie können Ollama mit diesem Befehl installieren:
curl -fsSL https://ollama.com/install.sh | sh
Modell herunterladen
Erstellen Sie ein Verzeichnis für das heruntergeladene Modell.
mkdir model-weights
Für diesen Vorgang verwenden Sie zwei Terminaltabs: einen zum Ausführen des Ollama-Servers und einen zum Abrufen des Modells.
Terminal 1 (Server):
Starten Sie den Server, indem Sie den Speicherort des heruntergeladenen Modells übergeben. Dieser Befehl wird weiterhin ausgeführt.
OLLAMA_MODELS=$(pwd)/model-weights ollama serve
Terminal 2 (Client): Öffnen Sie einen neuen Terminaltab und laden Sie das Modell herunter. Der Client kommuniziert automatisch mit dem laufenden Server.
# note if you wish to use a larger model, you can change this to gemma3:27b
ollama pull gemma3:1b
Zurück in Terminal 1:Wenn der Download in Terminal 2 abgeschlossen ist, kehren Sie zu Terminal 1 zurück und drücken Sie Strg + C, um den Server zu beenden.
Nach Cloud Storage hochladen
Laden Sie die Gewichte jetzt in Ihren Bucket hoch. gcloud storage verarbeitet parallele Uploads automatisch, um die Geschwindigkeit zu erhöhen.
gcloud storage cp -r ./model-weights/* gs://$MODEL_BUCKET/
(Optional) Lokale Gewichte bereinigen
Da sich das Modell jetzt in Cloud Storage befindet, entfernen Sie die lokale Kopie.
rm -rf model-weights
5. Dienst erstellen
Erstellen Sie zuerst einen Ordner für den Dienst.
mkdir rtx-service
cd rtx-service
Erstellen Sie ein Dockerfile mit folgendem Inhalt:
FROM ollama/ollama:latest
# Install Google Cloud CLI
RUN apt-get update && apt-get install -y curl gnupg && \
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
apt-get update && apt-get install -y google-cloud-cli && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# 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
# Copy and set up the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Start using the entrypoint script
ENTRYPOINT ["/entrypoint.sh"]
Erstellen Sie eine Datei mit dem Namen entrypoint.sh und mit folgendem Inhalt:
#!/bin/bash
set -e
# Ensure OLLAMA_MODELS directory exists
mkdir -p $OLLAMA_MODELS
# Download model weights from GCS if MODEL_BUCKET is set
if [ -n "$MODEL_BUCKET" ]; then
echo "Downloading model weights from gs://$MODEL_BUCKET..."
# gcloud storage handles concurrent downloads automatically
gcloud storage cp -r "gs://$MODEL_BUCKET/*" "$OLLAMA_MODELS/"
else
echo "MODEL_BUCKET not set. Skipping download."
fi
# Start Ollama
exec ollama serve
6. In Cloud Run bereitstellen
In diesem Abschnitt stellen Sie den Dienst mit gcloud run deploy bereit. Mit diesem Befehl wird Ihr Container aus dem Quellcode erstellt und mit den erforderlichen GPU- und Netzwerkkonfigurationen in Cloud Run bereitgestellt.
Dienstkonto erstellen
Erstellen Sie für diese Anwendung ein dediziertes Dienstkonto und gewähren Sie ihm nur die erforderlichen Berechtigungen.
# Create a dedicated service account
gcloud iam service-accounts create rtx-codelab-identity \
--display-name="RTX Codelab Identity"
# Grant permission to read from the model bucket
gcloud storage buckets add-iam-policy-binding gs://$MODEL_BUCKET \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
# Grant access to the Compute Engine network for the Cloud Run service identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
# Grant access to the Compute Engine network for the default service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')@serverless-robot-prod.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
Netzwerkkonfiguration
Für eine optimale Leistung beim Herunterladen großer Modelle sollten Sie ausgehenden Direct VPC-Traffic verwenden. Dadurch kann der Container über das private Google-Netzwerk auf Cloud Storage zugreifen und das öffentliche Internet und NAT-Gateways umgehen. Die folgenden Flags werden im Befehl „gcloud run deploy“ verwendet:
--network: Stellt eine Verbindung zurdefault-VPC her. Achten Sie darauf, dass dieses Netzwerk vorhanden ist und ein Subnetz in Ihrer Region mit aktiviertem privaten Google-Zugriff enthält.--subnet: Das spezifische Subnetz in Ihrer Region (in der Regeldefault, wenn Sie das Standardnetzwerk verwenden).--vpc-egress: Setzen Sie diese Option aufall-traffic, um den gesamten ausgehenden Traffic über die VPC zu leiten.
Bereitstellungsbefehl
gcloud beta run deploy $SERVICE_NAME \
--source . \
--region $REGION \
--project $PROJECT_ID \
--no-allow-unauthenticated \
--port 11434 \
--service-account rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--cpu 20 --memory 80Gi \
--gpu 1 \
--gpu-type nvidia-rtx-pro-6000 \
--set-env-vars MODEL_BUCKET=$MODEL_BUCKET \
--network default \
--subnet default \
--vpc-egress all-traffic \
--no-gpu-zonal-redundancy
7. Dienst testen
Nach der Bereitstellung können Sie über die Ollama API mit Ihrem Gemma 3-Modell interagieren.
Service-URL abrufen
Rufen Sie die URL Ihres bereitgestellten Cloud Run-Dienstes ab.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"
Inferenz ausführen
Senden Sie mit curl einen Prompt an das Modell. Sie können "stream": false festlegen, um die vollständige Antwort in einem einzelnen JSON-Objekt zu erhalten, und jq verwenden, um nur den Text zu extrahieren.
Hinweis: Wenn Sie ein größeres Modell wie gemma3:27b verwenden, müssen Sie den Modellnamen im folgenden JSON ändern.
curl -s "$SERVICE_URL/api/generate" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:1b",
"prompt": "Why is the sky blue?",
"stream": false
}' | jq -r '.response'
8. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs!
Wir empfehlen, die Cloud Run-Dokumentation zu lesen.
Behandelte Themen
- Gemma-Modell auf einer Cloud Run RTX 6000 Pro-GPU bereitstellen
- Modell während des Containerstarts gleichzeitig aus Cloud Storage herunterladen
9. Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen oder die einzelnen Ressourcen entfernen.
Option 1: Ressourcen löschen
Cloud Run-Dienst löschen
gcloud run services delete $SERVICE_NAME \
--region $REGION \
--quiet
Dienstkonto löschen
gcloud iam service-accounts delete \
rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--quiet
Cloud Storage-Bucket löschen
gcloud storage rm --recursive gs://$MODEL_BUCKET
Container-Image löschen
Bei diesem Build wurde ein Container-Image in Artifact Registry erstellt. Sie können den Bildnamen finden und das Bild löschen.
Listen Sie Images auf, um den genauen Namen zu finden (normalerweise gcr.io/PROJECT_ID/SERVICE_NAME).
gcloud container images list --filter="name:$SERVICE_NAME"
Löschen Sie das Bild (ersetzen Sie IMAGE_NAME durch das Ergebnis von oben).
gcloud container images delete <IMAGE_NAME> --force-delete-tags
Option 2: Projekt löschen
Wenn Sie das gesamte Projekt löschen möchten, rufen Sie Ressourcen verwalten auf, wählen Sie das Projekt aus, das Sie in Schritt 2 erstellt haben, und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie das Projekt in Ihrem Cloud SDK ändern. Sie können die Liste aller verfügbaren Projekte mit gcloud projects list aufrufen.