LLM-Inferenzen auf Cloud Run-GPUs mit Gemma 3 und Ollama ausführen


Lernziele

  • Ollama mit dem Gemma 3-Modell in einem GPU-fähigen Cloud Run-Dienst bereitstellen.
  • Prompts an den Ollama-Dienst über seinen privaten Endpunkt senden.

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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  7. Installieren und initialisieren Sie die gcloud CLI.
  8. 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:

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:

  1. 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.

  2. 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

  1. Erstellen Sie ein Verzeichnis für den Ollama-Dienst und ändern Sie Ihr Arbeitsverzeichnis in dieses neue Verzeichnis:

    mkdir ollama-backend
    cd ollama-backend
  2. 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 Umgebungsvariablen OLLAMA_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:

  1. Starten Sie den Proxy und wählen Sie Y aus, wenn Sie aufgefordert werden, die Komponente cloud-run-proxy zu installieren:

    gcloud run services proxy ollama-gemma --port=9090
  2. 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:

Nächste Schritte