1. Einführung
Large Language Models (LLMs) verändern die Art und Weise, wie wir intelligente Anwendungen entwickeln. Es kann jedoch schwierig sein, diese leistungsstarken Modelle für den Einsatz in der Praxis vorzubereiten. Sie benötigen viel Rechenleistung, insbesondere Grafikkarten (GPUs), und intelligente Methoden, um viele Anfragen gleichzeitig zu verarbeiten. Außerdem möchten Sie die Kosten niedrig halten und Ihre Anwendung soll reibungslos und ohne Verzögerungen laufen.
In diesem Codelab erfahren Sie, wie Sie diese Herausforderungen meistern können. Wir verwenden dazu zwei wichtige Tools:
- vLLM: Das ist eine superschnelle Engine für LLMs. So können Ihre Modelle viel effizienter ausgeführt werden, da mehr Anfragen gleichzeitig verarbeitet werden können und der Arbeitsspeicherverbrauch sinkt.
- Google Cloud Run: Dies ist die serverlose Plattform von Google. Das ist ideal für die Bereitstellung von Anwendungen, da die gesamte Skalierung für Sie übernommen wird – von null auf Tausende von Nutzern und wieder zurück. Das Beste daran: Cloud Run unterstützt jetzt GPUs, die für das Hosten von LLMs unerlässlich sind.
Zusammen bieten vLLM und Cloud Run eine leistungsstarke, flexible und kostengünstige Möglichkeit, Ihre LLMs bereitzustellen. In diesem Leitfaden stellen Sie ein offenes Modell bereit, das als Standard-Web-API verfügbar ist.
Lerninhalte**:**
- So wählen Sie die richtige Modellgröße und ‑variante für die Bereitstellung aus.
- Einrichten von vLLM zum Bereitstellen von OpenAI-kompatiblen API-Endpunkten
- vLLM-Server mit Docker in einen Container packen
- Container-Image per Push an Google Artifact Registry übertragen
- So stellen Sie den Container in Cloud Run mit GPU-Beschleunigung bereit.
- So testen Sie Ihr bereitgestelltes Modell.
Voraussetzungen**:**
- Ein Browser wie Chrome für den Zugriff auf die Google Cloud Console
- Eine zuverlässige Internetverbindung
- Ein Google Cloud-Projekt mit aktivierter Abrechnung
- Ein Hugging Face-Zugriffstoken (hier erstellen, falls Sie noch keines haben)
- Grundkenntnisse in Python, Docker und der Befehlszeile
- Neugier und Lernbereitschaft
2. Vorbereitung
Google Cloud-Projekt einrichten
Für dieses Codelab ist ein Google Cloud-Projekt mit einem aktiven Rechnungskonto erforderlich.
- Bei von Kursleitern geleiteten Sitzungen:Wenn Sie sich in einem Kursraum befinden, stellt Ihnen Ihr Kursleiter die erforderlichen Projekt- und Abrechnungsinformationen zur Verfügung. Folgen Sie der Anleitung Ihres Kursleiters, um die Einrichtung abzuschließen.
- Für unabhängige Lernende:Wenn Sie dies selbst tun, müssen Sie ein neues Projekt einrichten und ein Testabrechnungskonto aktivieren. Gehen Sie dazu so vor:
- Öffnen Sie ein Inkognitofenster, indem Sie Strg + Umschalt + N oder Cmd + Umschalt + N drücken.
- Rufen Sie dieses Einlösungsportal über das Inkognitofenster auf.
- Melden Sie sich mit Ihrem privaten Gmail-Konto an und erhalten Sie ein Testabrechnungskonto.
- Folgen Sie der Anleitung in dieser Präsentation, um die Einrichtung abzuschließen.
Cloud Shell konfigurieren
Richten wir nun Cloud Shell ein, eine praktische Befehlszeilenschnittstelle direkt in der Google Cloud Console.
Cloud Shell starten
Klicken Sie rechts oben in der Google Cloud Console auf das Terminalsymbol >_
, um Cloud Shell zu aktivieren.
Zugriff gewähren
Wenn Sie dazu aufgefordert werden, klicken Sie auf Autorisieren, um Cloud Shell die erforderlichen Berechtigungen für die Interaktion mit Ihrem Google Cloud-Projekt zu erteilen.
Projekt-ID bestätigen
Sehen Sie sich die Project ID
in Ihrem Terminal an. Sie wird gelb geschrieben, wie im Bild unten zu sehen ist. Achten Sie darauf, dass es sich um dieselbe ID handelt, die Sie beim Erstellen des Projekts notiert haben.
Wenn Project ID
korrekt im Terminal angezeigt wird, fahren Sie mit dem Schritt Erforderliche APIs aktivieren fort.
Korrekte Projekt-ID (falls erforderlich)
Wenn die Project ID
falsch ist oder gar nicht angezeigt wird, können Sie das Problem mit diesem Befehl beheben. Ersetzen Sie den Text your-project-id
durch Ihre korrekte Project ID
, bevor Sie den Befehl ausführen.
gcloud config set project your-project-id
Erforderliche APIs aktivieren
Wenn Sie Google Cloud-Dienste wie Cloud Run verwenden möchten, müssen Sie zuerst die entsprechenden APIs für Ihr Projekt aktivieren. Führen Sie die folgenden Befehle in Cloud Shell aus, um die für dieses Codelab erforderlichen Dienste zu aktivieren:
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable secretmanager.googleapis.com
gcloud services enable artifactregistry.googleapis.com
3. Das richtige Modell auswählen
Viele Open-Source-Modelle finden Sie auf Websites wie Hugging Face Hub und Kaggle. Wenn Sie eines dieser Modelle in einem Dienst wie Google Cloud Run verwenden möchten, müssen Sie eines auswählen, das zu den verfügbaren Ressourcen passt (z.B. NVIDIA L4-GPU).
Denken Sie nicht nur an die Größe, sondern auch daran, was das Modell tatsächlich leisten kann. Modelle sind nicht alle gleich. Jedes hat seine eigenen Vor- und Nachteile. Einige Modelle können beispielsweise verschiedene Arten von Eingaben verarbeiten (z. B. Bilder und Text – das wird als multimodale Funktion bezeichnet), während andere mehr Informationen gleichzeitig speichern und verarbeiten können (d. h. sie haben größere Kontextfenster). Größere Modelle haben oft erweiterte Funktionen wie Funktionsaufrufe und Denken.
Außerdem ist es wichtig, zu prüfen, ob das gewünschte Modell vom Serving-Tool (in diesem Fall vLLM) unterstützt wird. Hier finden Sie alle Modelle, die von vLLM unterstützt werden.
Sehen wir uns nun Gemma 3 an, die neueste Familie von öffentlich verfügbaren Large Language Models (LLMs) von Google. Gemma 3 ist in vier verschiedenen Größen erhältlich, die auf ihrer Komplexität basieren, gemessen in Parametern: 1 Milliarde, 4 Milliarden, 12 Milliarden und 27 Milliarden.
Für jede dieser Größen gibt es zwei Haupttypen:
- Eine Basisversion (vortrainiert): Dies ist das Foundation Model, das mit einer riesigen Datenmenge trainiert wurde.
- Eine auf Anweisungen abgestimmte Version: Diese Version wurde weiter verfeinert, um bestimmte Anweisungen oder Befehle besser zu verstehen und zu befolgen.
Die größeren Modelle (4 Milliarden, 12 Milliarden und 27 Milliarden Parameter) sind multimodal, d. h., sie können sowohl Bilder als auch Text verstehen und verarbeiten. Die kleinste Variante mit 1 Milliarde Parametern konzentriert sich jedoch ausschließlich auf Text.
In diesem Codelab verwenden wir 1 Milliarde Varianten von Gemma 3: gemma-3-1b-it. Wenn Sie ein kleineres Modell verwenden, lernen Sie auch, wie Sie mit begrenzten Ressourcen arbeiten. Das ist wichtig, um die Kosten niedrig zu halten und dafür zu sorgen, dass Ihre App reibungslos in der Cloud ausgeführt wird.
4. Umgebungsvariablen und Secrets
Umgebungsdatei erstellen
Bevor wir fortfahren, sollten Sie alle Konfigurationen, die Sie in diesem Codelab verwenden, an einem Ort zusammenfassen. So gehts:
- Erstellen Sie einen neuen Ordner für dieses Projekt.
- Wechseln Sie zum neu erstellten Ordner.
- Erstellen Sie eine leere .env-Datei in diesem Ordner. Diese Datei enthält später Ihre Umgebungsvariablen.
Hier ist der Befehl, mit dem Sie diese Schritte ausführen:
mkdir vllm-gemma3
cd vllm-gemma3
touch .env
Kopieren Sie als Nächstes die unten aufgeführten Variablen und fügen Sie sie in die .env-Datei ein, die Sie gerade erstellt haben. Ersetzen Sie die Platzhalterwerte (your_project_id
und your_region
) durch die spezifischen Projektinformationen. Beispiel: PROJECT_ID=unique-ai-project
und REGION=us-central1
PROJECT_ID=your_project_id
REGION=your_region
MODEL_PROVIDER=google
MODEL_VARIANT=gemma-3-1b-it
MODEL_NAME=${MODEL_PROVIDER}/${MODEL_VARIANT}
AR_REPO_NAME=vllm-gemma3-repo
SERVICE_NAME=${MODEL_VARIANT}-service
IMAGE_NAME=${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}/${SERVICE_NAME}
SERVICE_ACC_NAME=${SERVICE_NAME}-sa
SERVICE_ACC_EMAIL=${SERVICE_ACC_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Nachdem Sie die .env-Datei bearbeitet und gespeichert haben, geben Sie diesen Befehl ein, um die Umgebungsvariablen in die Terminalsitzung zu laden:
source .env
Sie können testen, ob die Variablen erfolgreich geladen wurden, indem Sie eine der Variablen ausgeben. Beispiel:
echo $SERVICE_NAME
Wenn Sie denselben Wert erhalten, den Sie in der .env-Datei zugewiesen haben, wurden die Variablen erfolgreich geladen.
Secret in Secret Manager speichern
Für alle vertraulichen Daten, einschließlich Zugangscodes, Anmeldedaten und Passwörter, wird die Verwendung eines Secret-Managers empfohlen.
Bevor Sie Gemma 3-Modelle verwenden können, müssen Sie zuerst die Nutzungsbedingungen zur Kenntnis nehmen, da sie eingeschränkt sind. Rufen Sie die Gamma3-Modellkarte im Hugging Face Hub auf und akzeptieren Sie die Nutzungsbedingungen.
Sobald Sie das Hugging Face-Zugriffstoken haben, rufen Sie die Secret Manager-Seite auf und erstellen Sie ein Secret. Folgen Sie dazu dieser Anleitung.
- Google Cloud Console aufrufen
- Wählen Sie das Projekt im Drop-down-Menü oben links aus.
- Suchen Sie in der Suchleiste nach Secret Manager und klicken Sie auf diese Option, wenn sie angezeigt wird.
So rufen Sie die Secret Manager-Seite auf:
- Klicken Sie auf die Schaltfläche + Secret erstellen.
- Geben Sie die folgenden Informationen ein:
- Name: HF_TOKEN
- Secret-Wert: <your_hf_access_token>
- Klicken Sie auf die Schaltfläche Secret erstellen, wenn Sie fertig sind.
Sie sollten jetzt das Hugging Face-Zugriffstoken als Secret in Google Cloud Secret Manager haben.
Sie können Ihren Zugriff auf das Secret testen, indem Sie den folgenden Befehl im Terminal ausführen. Dadurch wird es aus Secret Manager abgerufen:
gcloud secrets versions access latest --secret=HF_TOKEN
Ihr Zugriffstoken sollte abgerufen und im Terminalfenster angezeigt werden.
5. Dienstkonto erstellen
Um die Sicherheit zu erhöhen und den Zugriff in einer Produktionsumgebung effektiv zu verwalten, sollten Dienste unter dedizierten Dienstkonten ausgeführt werden, die streng auf die für ihre spezifischen Aufgaben erforderlichen Berechtigungen beschränkt sind.
Führen Sie diesen Befehl aus, um ein Dienstkonto zu erstellen.
gcloud iam service-accounts create $SERVICE_ACC_NAME --display-name='Cloud Run vLLM Model Serving SA'
Mit dem folgenden Befehl wird die erforderliche Berechtigung angehängt.
gcloud secrets add-iam-policy-binding HF_TOKEN \
--member="serviceAccount:${SERVICE_ACC_EMAIL}" \
--role="roles/secretmanager.secretAccessor"
6. Image in Artifact Registry erstellen
In diesem Schritt wird ein Docker-Image erstellt, das die Modellgewichte und ein vorinstalliertes vLLM enthält.
1. Docker-Repository in Artifact Registry erstellen
Erstellen wir ein Docker-Repository in Artifact Registry, in das Sie Ihre erstellten Images übertragen können. Führen Sie im Terminal den folgenden Befehl aus:
gcloud artifacts repositories create ${AR_REPO_NAME} \
--repository-format docker \
--location ${REGION}
2. Modell speichern
Gemäß der Dokumentation zu GPU-Best Practices können Sie ML-Modelle entweder in Container-Images speichern oder das Laden aus Cloud Storage optimieren. Jeder Ansatz hat natürlich seine Vor- und Nachteile. Weitere Informationen finden Sie in der Dokumentation. Der Einfachheit halber speichern wir das Modell im Container-Image.
3. Dockerfile erstellen
Erstellen Sie eine Datei mit dem Namen Dockerfile und kopieren Sie den folgenden Inhalt hinein:
FROM vllm/vllm-openai:v0.9.0
ARG MODEL_NAME
ARG HF_TOKEN
ENV HF_HOME=/model-cache
ENV MODEL_NAME=${MODEL_NAME}
# Use the HF_TOKEN argument to log in and download the model
RUN huggingface-cli login --token ${HF_TOKEN} && \
huggingface-cli download ${MODEL_NAME}
ENV HF_HUB_OFFLINE=1
EXPOSE 8080
ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \
--port ${PORT:-8080} \
--model ${MODEL_NAME} \
--gpu-memory-utilization 0.90 \
${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
4. cloudbuild.yaml
-Datei erstellen
Erstellen Sie als Nächstes im selben Verzeichnis eine Datei mit dem Namen cloudbuild.yaml
. In dieser Datei werden die Schritte definiert, die Cloud Build ausführen soll. Kopieren Sie den folgenden Inhalt und fügen Sie ihn in die Datei „cloudbuild.yaml“ ein:
steps:
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- '-c'
- |
docker build \
--build-arg MODEL_NAME=${_MODEL_NAME} \
--build-arg HF_TOKEN=$$HF_TOKEN_SECRET \
-t ${_IMAGE_NAME} .
secretEnv: ['HF_TOKEN_SECRET']
images:
- '${_IMAGE_NAME}'
availableSecrets:
secretManager:
- versionName: projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest
env: 'HF_TOKEN_SECRET'
5. Build an Cloud Build senden
Kopieren Sie den folgenden Code und führen Sie ihn im Terminal aus:
gcloud builds submit . \
--config=cloudbuild.yaml \
--region=${REGION} \
--substitutions=_MODEL_NAME=${MODEL_NAME},_IMAGE_NAME=${IMAGE_NAME}
Mit diesem Befehl wird Ihr Code (Dockerfile
und cloudbuild.yaml
) hochgeladen, Ihre Shell-Variablen werden als Ersetzungen (_MODEL_NAME
und _IMAGE_NAME
) übergeben und der Build wird gestartet.
Cloud Build führt nun die in cloudbuild.yaml
definierten Schritte aus. Sie können die Logs in Ihrem Terminal verfolgen oder auf den Link zu den Build-Details in der Cloud Console klicken. Nach Abschluss des Vorgangs ist das Container-Image in Ihrem Artifact Registry-Repository verfügbar und kann bereitgestellt werden.
7. Dienst testen
Führen Sie im Terminal den folgenden Befehl aus, um einen Proxy zu erstellen, damit Sie auf den Dienst zugreifen können, während er auf localhost ausgeführt wird:
gcloud run services proxy ${SERVICE_NAME} --region ${REGION}
Führen Sie in einem neuen Terminalfenster diesen curl
-Befehl aus, um die Verbindung zu testen.
curl -X POST http://localhost:8080/v1/completions \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-3-1b-it",
"prompt": "Cloud Run is a ",
"max_tokens": 128,
"temperature": 0.90
}'
Wenn Sie eine ähnliche Ausgabe wie unten sehen:
{"id":"cmpl-e96d05d2893d42939c1780d44233defa","object":"text_completion","created":1746870778,"model":"google/gemma-3-1b-it","choices":[{"index":0,"text":"100% managed Kubernetes service. It's a great option for many use cases.\n\nHere's a breakdown of key features and considerations:\n\n* **Managed Kubernetes:** This means Google handles the underlying infrastructure, including scaling, patching, and maintenance. You don't need to worry about managing Kubernetes clusters.\n* **Serverless:** You only pay for the compute time your application actually uses. No charges when your code isn't running.\n* **Scalability:** Cloud Run automatically scales your application based on demand. You can easily scale up or down to handle fluctuating traffic.\n*","logprobs":null,"finish_reason":"length","stop_reason":null,"prompt_logprobs":null}],"usage":{"prompt_tokens":6,"total_tokens":134,"completion_tokens":128,"prompt_tokens_details":null}}
8. Fazit
Glückwunsch! Sie haben dieses Codelab erfolgreich abgeschlossen. Sie haben Folgendes gelernt:
- Wählen Sie eine geeignete Modellgröße für die Zielbereitstellung aus.
- vLLM für die Bereitstellung einer OpenAI-kompatiblen API einrichten
- vLLM-Server und Modellgewichte mit Docker sicher containerisieren
- Container-Image per Push an Google Artifact Registry übertragen
- GPU-beschleunigten Dienst in Cloud Run bereitstellen
- Ein authentifiziertes, bereitgestelltes Modell testen
Sie können auch andere interessante Modelle wie Llama, Mistral oder Qwen bereitstellen, um Ihren Lernprozess fortzusetzen.
9. Bereinigen
Um zukünftige Gebühren zu vermeiden, ist es wichtig, dass Sie die von Ihnen erstellten Ressourcen löschen. Führen Sie die folgenden Befehle aus, um Ihr Projekt zu bereinigen.
1. Löschen Sie den Cloud Run-Dienst:
gcloud run services delete ${SERVICE_NAME} --region=${REGION} --quiet
2. Löschen Sie das Artifact Registry-Repository:
gcloud artifacts repositories delete ${AR_REPO_NAME} --location=${REGION} --quiet
3. Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete ${SERVICE_ACC_EMAIL} --quiet
4. Löschen Sie das Secret aus Secret Manager:
gcloud secrets delete HF_TOKEN --quiet