Gemma 3 in Cloud Run ausführen

In dieser Anleitung wird beschrieben, wie Sie offene Gemma 3-Modelle in Cloud Run mit einem vorgefertigten Container bereitstellen. Außerdem finden Sie Informationen zur Verwendung des bereitgestellten Cloud Run-Dienstes mit dem Google Gen AI SDK.

Hinweise

Wenn Sie Google AI Studio für die Bereitstellung in Cloud Run verwendet haben, fahren Sie mit dem Abschnitt Sichere Interaktion mit dem Google Gen AI SDK fort.

Wenn Sie Google AI Studio nicht verwendet haben, führen Sie die folgenden Schritte aus, bevor Sie mit Cloud Run einen neuen Dienst erstellen.

  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. Richten Sie Ihre Cloud Run-Entwicklungsumgebung in Ihrem Google Cloud -Projekt ein.
  7. Installieren und initialisieren Sie die gcloud CLI.
  8. Prüfen Sie, ob Ihrem Konto die folgenden IAM-Rollen zugewiesen sind:
  9. Rollen zuweisen

    Console

    1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

      IAM aufrufen
    2. Wählen Sie das Projekt aus.
    3. Klicken Sie auf Zugriff erlauben.
    4. Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Dies ist in der Regel die E-Mail-Adresse des Google-Kontos, das zum Bereitstellen des Cloud Run-Dienstes verwendet wird.

    5. Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
    6. Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
    7. Klicken Sie auf Speichern.

    gcloud

    So weisen Sie Ihrem Konto die erforderlichen IAM-Rollen für Ihr Projekt zu:

            gcloud projects add-iam-policy-binding PROJECT_ID \
                --member=PRINCIPAL \
                --role=ROLE
            

    Ersetzen Sie:

    • PROJECT_NUMBER durch Ihre Google Cloud Projektnummer.
    • PROJECT_ID durch Ihre Google Cloud Projekt-ID.
    • PRINCIPAL durch das Konto, für das Sie die Bindung hinzufügen. Dies ist in der Regel die E-Mail-Adresse des Google-Kontos, mit dem der Cloud Run-Dienst bereitgestellt wird.
    • ROLE durch die Rolle, die Sie dem Bereitstellerkonto hinzufügen.
  10. Beantragen Sie unter „Cloud Run Admin API“ auf der Seite Kontingente und Systemlimits ein Total Nvidia L4 GPU allocation, per project per region-Kontingent.
  11. Preise für Cloud Run Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
  12. Gemma-Modell mit einem vordefinierten Container bereitstellen

    Cloud Run bietet einen vordefinierten Container zum Bereitstellen von offenen Gemma-Modellen in Cloud Run.

    Verwenden Sie den folgenden gcloud CLI-Befehl mit den empfohlenen Einstellungen, um Gemma-Modelle in Cloud Run bereitzustellen:

    gcloud run deploy SERVICE_NAME \
       --image us-docker.pkg.dev/cloudrun/container/gemma/GEMMA_PARAMETER \
       --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 \
       --timeout=600 \
       --region REGION

    Ersetzen Sie:

    • Ersetzen Sie SERVICE_NAME durch einen eindeutigen Namen für den Cloud Run-Dienst.
    • GEMMA_PARAMETER mit dem verwendeten Gemma-Modell:

      • Gemma 3 1B (gemma-3-1b-it): gemma3-1b
      • Gemma 3 4B (gemma-3-4b-it): gemma3-4b
      • Gemma 3 12B (gemma-3-12b-it): gemma3-12b
      • Gemma 3 27B (gemma-3-27b-it): gemma3-27b

      Optional können Sie die gesamte Bild-URL durch ein Docker-Image ersetzen, das Sie aus dem GitHub-Repository für Gemma auf Cloud Run erstellt haben.

    • REGION durch die Google Cloud Region, in der Ihr Cloud Run-Dienst bereitgestellt wird, z. B.europe-west1. Wenn Sie die Region ändern müssen, finden Sie unter GPU-Konfiguration Informationen zu unterstützten Regionen für GPU-fähige Bereitstellungen.

    Die anderen Einstellungen sind:

    Option Beschreibung
    --concurrency

    Die maximale Anzahl von Anfragen, die von einer bestimmten Instanz gleichzeitig verarbeitet werden können, z. B. 4. Unter Nebenläufigkeit für optimale Leistung festlegen finden Sie Empfehlungen zur optimalen Anfragelatenz.

    --cpu

    Die Menge an zugewiesener CPU für Ihren Dienst, z. B. 8.

    --set-env-vars

    Die für Ihren Dienst festgelegten Umgebungsvariablen. Beispiel: OLLAMA_NUM_PARALLEL=4. Unter Nebenläufigkeit für optimale Leistung festlegen finden Sie Empfehlungen zur optimalen Anfragelatenz.

    --gpu

    Der GPU-Wert für Ihren Dienst, z. B. 1.

    --gpu-type

    Der GPU-Typ, der für Ihren Dienst verwendet werden soll, z. B. nvidia-l4.

    --max-instances

    Die maximale Anzahl von Containerinstanzen für Ihren Dienst, z. B. 1.

    --memory

    Die Menge an zugewiesenem Arbeitsspeicher für Ihren Dienst, z. B. 32Gi.

    --no-invoker-iam-check

    IAM-Prüfungen für Aufrufer deaktivieren. Unter Sichere Interaktion mit dem Google Gen AI SDK finden Sie Empfehlungen dazu, wie Sie Ihre App besser schützen können.

    --no-cpu-throttling

    Diese Einstellung deaktiviert die CPU-Drosselung, wenn der Container keine Anfragen aktiv verarbeitet.

    --timeout

    Die Zeit, in der eine Antwort zurückgegeben werden muss, z. B. 600 Sekunden.

    Wenn Sie die Standardeinstellungen ändern oder Ihrem Cloud Run-Dienst weitere benutzerdefinierte Einstellungen hinzufügen müssen, lesen Sie den Abschnitt Dienste konfigurieren.

    Nach Abschluss des bereitgestellten Dienstes wird eine Erfolgsmeldung zusammen mit der Cloud Run-Endpunkt-URL angezeigt, die mit run.app endet.

    Bereitgestellten Gemma-Dienst mit curl testen

    Nachdem Sie den Gemma-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 Gemma-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}
      ...
      

    Sicher mit dem Google Gen AI SDK interagieren

    Nachdem Sie Ihren Cloud Run-Dienst bereitgestellt haben, können Sie den Cloud Run-Endpunkt mit dem Google Gen AI SDK verwenden.

    Bevor Sie das Google Gen AI SDK verwenden, müssen Sie dafür sorgen, dass eingehende Anfragen das entsprechende Identitätstoken übergeben. Weitere Informationen zur Verwendung der IAM-Authentifizierung und Cloud Run finden Sie unter Dienst-zu-Dienst-Authentifizierung.

    In den folgenden Beispielen wird gezeigt, wie Sie das Google Gen AI SDK mit der IAM-Authentifizierung verwenden.

    JavaScript oder TypeScript

    Wenn Sie das Google Gen AI SDK für JavaScript und TypeScript verwenden, sieht der Code möglicherweise so aus:

    import { GoogleGenAI, setDefaultBaseUrls } from "@google/genai";
    import { GoogleAuth} from 'google-auth-library'
    
    const cloudrunurl = 'https://CLOUD_RUN_SERVICE_URL';
    const targetAudience = url;
    
    const auth = new GoogleAuth();
    
    async function main() {
    
      const client = await auth.getIdTokenClient(targetAudience);
      const headers = await client.getRequestHeaders(targetAudience);
      const idToken = headers['Authorization']
    
    const ai = new GoogleGenAI({
      apiKey:"placeholder",
      httpOptions: { baseUrl: url, headers: {'Authorization': idToken}  },
    });
    
      const response = await ai.models.generateContent({
        model: "gemma-3-1b-it",
        contents: "I want a pony",
      });
      console.log(response.text);
    }
    
    main();
    

    curl

    Wenn Sie curl verwenden, führen Sie die folgenden Befehle aus, um die Endpunkte des Google Gen AI SDK zu erreichen:

    • Für „Inhalte generieren“ verwenden Sie /v1beta/{model=models/*}:generateContent: Generiert eine Modellantwort für eine Eingabe GenerateContentRequest.

      curl "<cloud_run_url>/v1beta/models/<model>:generateContent" \
      -H 'Content-Type: application/json' \
      -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
      -X POST \
      -d '{
        "contents": [{
          "parts":[{"text": "Write a story about a magic backpack. You are the narrator of an interactive text adventure game."}]
          }]
          }'
      
    • Verwenden Sie für „Stream Generate Content“ (Inhalte streamen) /v1beta/{model=models/*}:streamGenerateContent: Generiert eine gestreamte Antwort vom Modell auf Grundlage einer Eingabe GenerateContentRequest.

      curl "<cloud_run_url>/v1beta/models/<model>:streamGenerateContent" \
        -H 'Content-Type: application/json' \
        -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
        -X POST \
        -d '{
          "contents": [{
            "parts":[{"text": "Write a story about a magic backpack. You are the narrator of an interactive text adventure game."}]
            }]
            }'
      

    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.

    Bereinigen

    Löschen Sie die folgenden Google Cloud Ressourcen, die Sie erstellt haben:

    Nächste Schritte