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.
- 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.
- Richten Sie Ihre Cloud Run-Entwicklungsumgebung in Ihrem Google Cloud -Projekt ein.
- Installieren und initialisieren Sie die gcloud CLI.
- Prüfen Sie, ob Ihrem Konto die folgenden IAM-Rollen zugewiesen sind:
- Cloud Run-Administrator (
roles/run.admin
) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
)
- Cloud Run-Administrator (
-
Rufen Sie in der Google Cloud Console die Seite IAM auf.
IAM aufrufen - Wählen Sie das Projekt aus.
- Klicken Sie auf Zugriff erlauben.
-
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.
- Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
- Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
- Klicken Sie auf Speichern.
- 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.
- Beantragen Sie unter „Cloud Run Admin API“ auf der Seite Kontingente und Systemlimits ein
Total Nvidia L4 GPU allocation, per project per region
-Kontingent. - Preise für Cloud Run Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
- 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.
- Gemma 3 1B (
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.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} ...
Für „Inhalte generieren“ verwenden Sie
/v1beta/{model=models/*}:generateContent
: Generiert eine Modellantwort für eine EingabeGenerateContentRequest
.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 EingabeGenerateContentRequest
.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."}] }] }'
- 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. - GPU konfigurieren
- Best Practices: KI-Inferenz in Cloud Run mit GPUs
- Gemma 3-Modelle mit verschiedenen KI-Laufzeit-Frameworks ausführen
Rollen zuweisen
Console
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:
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:
Die anderen Einstellungen sind:
Option | Beschreibung |
---|---|
--concurrency |
Die maximale Anzahl von Anfragen, die von einer bestimmten Instanz gleichzeitig verarbeitet werden können, z. B. |
--cpu |
Die Menge an zugewiesener CPU für Ihren Dienst, z. B. |
--set-env-vars |
Die für Ihren Dienst festgelegten Umgebungsvariablen. Beispiel: |
--gpu |
Der GPU-Wert für Ihren Dienst, z. B. |
--gpu-type |
Der GPU-Typ, der für Ihren Dienst verwendet werden soll, z. B. |
--max-instances |
Die maximale Anzahl von Containerinstanzen für Ihren Dienst, z. B. |
--memory |
Die Menge an zugewiesenem Arbeitsspeicher für Ihren Dienst, z. B. |
--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. |
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:
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:
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.
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: