Lernziele
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Installieren und initialisieren Sie die gcloud CLI.
- Beantragen Sie unter „Cloud Run Admin API“ auf der Seite Kontingente und Systemlimits ein
Total Nvidia L4 GPU allocation, per project per region
-Kontingent, um diese Anleitung abzuschließen.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Anleitung benötigen:
-
Artifact Registry-Administrator (
roles/artifactregistry.admin
) -
Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor
) -
Cloud Run-Administrator (
roles/run.admin
) -
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) -
Storage-Administrator (
roles/storage.admin
)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
gcloud einrichten
So konfigurieren Sie die Google Cloud CLI für Ihren Cloud Run-Dienst:
Legen Sie ein Standardprojekt fest:
gcloud config set project PROJECT_ID
Klicken Sie auf das Symbol , um die Variable PROJECT_ID durch den Namen des Projekts zu ersetzen, das Sie für diese Anleitung erstellt haben. So ist sichergestellt, dass für alle Einträge auf dieser Seite, die auf PROJECT_ID verweisen, bereits der richtige Wert angegeben ist.
Konfigurieren Sie die Google Cloud CLI so, dass die Region
europe-west1
für Cloud Run-Befehle verwendet wird.gcloud config set run/region europe-west1
Mit Docker ein Container-Image mit Ollama und Gemma erstellen
Erstellen Sie ein Verzeichnis für den Ollama-Dienst und ändern Sie Ihr Arbeitsverzeichnis in dieses neue Verzeichnis:
mkdir ollama-backend cd ollama-backend
Erstellen Sie eine
Dockerfile
-Datei mit folgendem Inhalt:FROM ollama/ollama:latest # Listen on all interfaces, port 8080 ENV OLLAMA_HOST 0.0.0.0:8080 # 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 gemma3:4b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
Modellgewichte im Container-Image speichern, um Instanzen schneller zu starten
Google empfiehlt, die Modellgewichte für Gemma 3 (4 B) und Modelle ähnlicher Größe direkt im Container-Image zu speichern.
Modellgewichte sind die numerischen Parameter, die das Verhalten eines LLM definieren. Ollama muss diese Dateien vollständig lesen und die Gewichte beim Starten der Containerinstanz in den GPU-Speicher (VRAM) laden, bevor mit der Ausführung von Inferenzanfragen begonnen werden kann.
Bei Cloud Run ist ein schneller Start der Containerinstanz wichtig, um die Anfragelatenz zu minimieren. Wenn die Startzeit Ihrer Containerinstanz lang ist, dauert es länger, bis der Dienst von null auf eine Instanz skaliert wird. Bei einem Traffic-Anstieg dauert es auch länger, bis der Dienst horizontal skaliert wird.
Speichern Sie die Modelldateien im Container-Image selbst, um einen schnellen Start zu ermöglichen. Das ist schneller und zuverlässiger als das Herunterladen der Dateien von einem Remote-Speicherort während des Starts. Der interne Container-Image-Speicher von Cloud Run ist für die Verarbeitung von Traffic-Spitzen optimiert. So kann das Dateisystem des Containers beim Starten einer Instanz schnell eingerichtet werden.
Die Modellgewichte für Gemma 3 (4B) belegen 8 GB Speicherplatz. Größere Modelle haben größere Modellgewichtsdateien, die sich möglicherweise nicht im Container-Image speichern lassen. Eine Übersicht über die Vor- und Nachteile finden Sie unter Best Practices: KI-Inferenz in Cloud Run mit GPUs.
Cloud Run-Dienst erstellen und bereitstellen
Erstellen Sie den Dienst und stellen Sie ihn in Cloud Run bereit:
gcloud run deploy ollama-gemma \
--source . \
--concurrency 4 \
--cpu 8 \
--set-env-vars OLLAMA_NUM_PARALLEL=4 \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 1 \
--memory 32Gi \
--no-allow-unauthenticated \
--no-cpu-throttling \
--no-gpu-zonal-redundancy \
--timeout=600
Beachten Sie die folgenden wichtigen Flags in diesem Befehl:
--concurrency 4
ist auf den Wert der UmgebungsvariablenOLLAMA_NUM_PARALLEL
festgelegt.--gpu 1
mit--gpu-type nvidia-l4
weist jeder Cloud Run-Instanz im Dienst eine NVIDIA L4-GPU zu.--max-instances 1
gibt die maximale Anzahl von Instanzen an, auf die skaliert werden soll. Es muss dem Kontingent für NVIDIA L4-GPUs (Total Nvidia L4 GPU allocation, per project per region
) Ihres Projekts entsprechen oder niedriger sein.--no-allow-unauthenticated
schränkt den nicht authentifizierten Zugriff auf den Dienst ein. Wenn Sie den Dienst privat nutzen, können Sie die integrierte Identity and Access Management (IAM)-Authentifizierung von Cloud Run für die Dienst-zu-Dienst-Kommunikation verwenden. Weitere Informationen finden Sie unter Zugriff mit IAM verwalten.--no-cpu-throttling
ist erforderlich, um die GPU zu aktivieren.--no-gpu-zonal-redundancy
Legen Sie je nach Ihren Anforderungen an das zonale Failover und dem verfügbaren Kontingent die Optionen für die zonale Redundanz fest. Weitere Informationen finden Sie unter Optionen für die GPU-Zonenredundanz.
Nebenläufigkeit für optimale Leistung festlegen
In diesem Abschnitt finden Sie weitere Informationen zu den empfohlenen Einstellungen für die Nebenläufigkeit. Für eine optimale Anfragelatenz muss die Einstellung --concurrency
der Umgebungsvariablen OLLAMA_NUM_PARALLEL
von Ollama entsprechen.
- Mit
OLLAMA_NUM_PARALLEL
wird festgelegt, wie viele Anfrageslots für jedes Modell verfügbar sind, um Inferenzanfragen gleichzeitig zu verarbeiten. - Mit
--concurrency
wird festgelegt, wie viele Anfragen Cloud Run gleichzeitig an eine Ollama-Instanz sendet.
Wenn --concurrency
OLLAMA_NUM_PARALLEL
überschreitet, kann Cloud Run mehr Anfragen an ein Modell in Ollama senden, als für die verfügbaren Anfrageslots vorgesehen sind.
Dies führt zu einer Anfragewarteschlange in Ollama, was die Anfragelatenz für die anstehenden Anfragen erhöht. Außerdem führt es zu einem weniger reaktionsfähigen Autoscaling, da die anstehenden Anfragen nicht dazu führen, dass Cloud Run skaliert und neue Instanzen startet.
Ollama unterstützt auch die Bereitstellung mehrerer Modelle von einer GPU aus. Um Anfragen in der Ollama-Instanz vollständig zu vermeiden, sollten Sie --concurrency
weiterhin auf OLLAMA_NUM_PARALLEL
festlegen.
Beachten Sie, dass parallele Anfragen bei einer Erhöhung von OLLAMA_NUM_PARALLEL
auch länger dauern.
Auslastung optimieren
Für eine optimale GPU-Auslastung erhöhen Sie --concurrency
, wobei der Wert unter dem Doppelten von OLLAMA_NUM_PARALLEL
liegen muss. Dies führt zwar zu einer Anfragewarteschlange in Ollama, kann aber die Auslastung verbessern: Ollama-Instanzen können Anfragen aus ihrer Warteschlange sofort verarbeiten und die Warteschlangen helfen, Trafficspitzen abzufangen.
Bereitgestellten Ollama-Dienst mit curl testen
Nachdem Sie den Ollama-Dienst bereitgestellt haben, können Sie Anfragen an ihn senden. Wenn Sie jedoch eine Anfrage direkt senden, antwortet Cloud Run mit HTTP 401 Unauthorized
.
Das ist beabsichtigt, da eine LLM-Inferenz-API für andere Dienste gedacht ist, z. B. für eine Frontend-Anwendung. Weitere Informationen zur Dienst-zu-Dienst-Authentifizierung in Cloud Run finden Sie unter Dienst-zu-Dienst-Authentifizierung.
Wenn Sie Anfragen an den Ollama-Dienst senden möchten, fügen Sie den Anfragen einen Header mit einem gültigen OIDC-Token hinzu, z. B. mit dem Cloud Run-Entwicklerproxy:
Starten Sie den Proxy und wählen Sie
Y
aus, wenn Sie aufgefordert werden, die Komponentecloud-run-proxy
zu installieren:gcloud run services proxy ollama-gemma --port=9090
Senden Sie in einem separaten Terminaltab eine Anfrage an den Proxy und lassen Sie den Proxy laufen. Der Proxy wird auf
localhost:9090
ausgeführt:curl http://localhost:9090/api/generate -d '{ "model": "gemma3:4b", "prompt": "Why is the sky blue?" }'
Dieser Befehl sollte eine Streamingausgabe ähnlich der folgenden liefern:
{"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.641492408Z","response":"That","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.687529153Z","response":"'","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.753284927Z","response":"s","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.812957381Z","response":" a","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.889102649Z","response":" fantastic","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.925748116Z","response":",","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.958391572Z","response":" decept","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.971035028Z","response":"ively","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.989678484Z","response":" tricky","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.999321940Z","response":" question","done":false} ...
Bereinigen
Löschen Sie die folgenden Google Cloud Ressourcen, die Sie in dieser Anleitung erstellt haben: