LLM-Inferenz auf Cloud Run-GPUs mit vLLM und dem OpenAI Python SDK ausführen

1. Einführung

Übersicht

Cloud Run hat vor Kurzem GPU-Unterstützung hinzugefügt. Er steht als öffentliche Vorschau auf der Warteliste zur Verfügung. Wenn Sie die Funktion ausprobieren möchten, füllen Sie dieses Formular aus, um sich auf die Warteliste setzen zu lassen. Cloud Run ist eine Containerplattform in Google Cloud, mit der Sie Ihren Code ganz einfach in einem Container ausführen können, ohne einen Cluster verwalten zu müssen.

Derzeit stellen wir Nvidia L4-GPUs mit 24 GB vRAM zur Verfügung. Pro Cloud Run-Instanz gibt es eine GPU. Das Autoscaling von Cloud Run gilt weiterhin. Dazu gehört das Hochskalieren auf bis zu 5 Instanzen (mit Kontingenterhöhung) sowie das Herunterskalieren auf null Instanzen, wenn keine Anfragen vorhanden sind.

Ein Anwendungsfall für GPUs ist die Ausführung eigener Open Large Language Models (LLMs). In dieser Anleitung wird beschrieben, wie Sie einen Dienst bereitstellen, der ein LLM ausführt.

Der Dienst ist ein Back-End-Dienst, der vLLM ausführt, eine Inferenz-Engine für Produktionssysteme. In diesem Codelab wird das auf Anweisung abgestimmte Modell Gemma 2 von Google mit 2 Milliarden Parametern verwendet.

Aufgaben in diesem Lab

  • GPUs in Cloud Run verwenden
  • Hier erfahren Sie, wie Sie Hugging Face zum Abrufen eines Modells verwenden.
  • Anleitung zum Bereitstellen des auf Anweisungen abgestimmten Modells Gemma 2 2b von Google in Cloud Run mithilfe von vLLM als Inferenz-Engine.
  • Wie der Back-End-Dienst aufgerufen wird, um die Satzvervollständigung auszuführen.

2. Einrichtung und Anforderungen

Voraussetzungen

  • Sie sind in der Cloud Console angemeldet.
  • Sie haben zuvor einen Cloud Run-Dienst bereitgestellt. Weitere Informationen finden Sie beispielsweise in der Kurzanleitung: Webdienst aus dem Quellcode bereitstellen.
  • Du hast ein Hugging Face-Konto und hast die Gemma 2 2b-Lizenz unter https://huggingface.co/google/gemma-2-2b-it anerkannt. Andernfalls können Sie das Modell nicht herunterladen.
  • Sie haben ein Zugriffstoken mit Zugriff auf das Modell „google/gemma-2-2b-it“ erstellt.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.

d95252b003979716.png

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.

7833d5e1c5d18f54.png

Diese virtuelle Maschine verfügt über alle erforderlichen Entwicklertools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können mit einem Browser erledigt werden.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie authentifiziert sind und das Projekt auf Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt:
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. APIs aktivieren und Umgebungsvariablen festlegen

APIs aktivieren

Bevor Sie dieses Codelab verwenden können, müssen Sie mehrere APIs aktivieren. Für dieses Codelab müssen die folgenden APIs verwendet werden. Sie können diese APIs aktivieren, indem Sie den folgenden Befehl ausführen:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    secretmanager.googleapis.com \
    artifactregistry.googleapis.com

Umgebungsvariablen einrichten

Sie können Umgebungsvariablen festlegen, die in diesem Codelab verwendet werden.

HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN>
PROJECT_ID=<YOUR_PROJECT_ID>

REGION=us-central1
SERVICE_NAME=vllm-gemma-2-2b-it
AR_REPO_NAME=vllm-gemma-2-2b-it-repo
SERVICE_ACCOUNT=vllm-gemma-2-2b-it
SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

4. Dienstkonto erstellen

Dieses Dienstkonto wird verwendet, um den Cloud Run-Dienst zu erstellen und auf ein Secret von Secret Manager zuzugreifen.

Erstellen Sie zuerst das Dienstkonto, indem Sie den folgenden Befehl ausführen:

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run vllm SA to access secrete manager"

Weisen Sie dann dem Dienstkonto die Rolle „Vertex AI User“ zu.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/secretmanager.secretAccessor

Erstellen Sie nun in Secret Manager ein Secret namens HF_TOKEN für Ihr Hugging Face-Zugriffstoken. Cloud Build verwendet das Dienstkonto, um bei der Erstellung auf dieses Secret zuzugreifen und das Gemma 2 (2B)-Modell aus Hugging Face abzurufen. Weitere Informationen zu Secrets und Cloud Build

printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-

Gewähren Sie dem Dienstkonto Zugriff auf das Secret HF_TOKEN in Secret Manager.

gcloud secrets add-iam-policy-binding HF_TOKEN \
    --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role='roles/secretmanager.secretAccessor'

5. Image in Artifact Registry erstellen

Erstellen Sie zuerst ein Repository in Artifact Registry.

gcloud artifacts repositories create $AR_REPO_NAME \
  --repository-format docker \
  --location us-central1

Erstellen Sie als Nächstes einen Dockerfile, der das Secret aus Secret Manager enthält. Weitere Informationen zum Flag „Docker buildx –secrets“

FROM vllm/vllm-openai:latest

ENV HF_HOME=/model-cache
RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \
    huggingface-cli download google/gemma-2-2b-it

ENV HF_HUB_OFFLINE=1

ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \
    --port ${PORT:-8000} \
    --model ${MODEL_NAME:-google/gemma-2-2b-it} \
    ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}

Erstellen Sie jetzt eine cloudbuild.yaml-Datei.

steps:
- name: 'gcr.io/cloud-builders/docker'
  id: build
  entrypoint: 'bash'
  secretEnv: ['HF_TOKEN']
  args: 
    - -c
    - |
        SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN .

availableSecrets:
  secretManager:
  - versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest'
    env: 'HF_TOKEN'

images: ["${_IMAGE}"]

substitutions:  
  _IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it'

options:
  dynamicSubstitutions: true
  machineType: "E2_HIGHCPU_32"

Reichen Sie zum Schluss einen Build ein.

gcloud builds submit --config=cloudbuild.yaml

Der Build kann ungefähr 8 Minuten dauern.

6. Dienst bereitstellen

Sie können das Image jetzt in Cloud Run bereitstellen.

gcloud beta run deploy $SERVICE_NAME \
--image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \
--service-account $SERVICE_ACCOUNT_ADDRESS \
--cpu=8 \
--memory=32Gi \
--gpu=1 --gpu-type=nvidia-l4 \
--region us-central1 \
--no-allow-unauthenticated \
--max-instances 5 \
--no-cpu-throttling

Die Bereitstellung kann bis zu 5 Minuten dauern.

7. Dienst testen

Nach der Bereitstellung können Sie entweder den Entwicklungs-Proxydienst von Cloud Run verwenden, der automatisch ein ID-Token für Sie hinzufügt, oder Sie kopieren die Dienst-URL direkt.

Dev-Proxy-Dienst von Cloud Run verwenden

So verwenden Sie den Dev-Proxy-Dienst von Cloud Run:

Führen Sie zuerst den folgenden Befehl aus:

gcloud run services proxy $SERVICE_NAME --region us-central1

curl für den Dienst

curl -X POST http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
  "model": "google/gemma-2-2b-it",
  "prompt": "Cloud Run is a",
  "max_tokens": 128,
  "temperature": 0.90
}'

Dienst-URL direkt verwenden

Rufen Sie zuerst die URL für den bereitgestellten Dienst ab.

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')

Den Dienst lockern

curl -X POST $SERVICE_URL/v1/completions \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
  "model": "google/gemma-2-2b-it",
  "prompt": "Cloud Run is a",
  "max_tokens": 128,
  "temperature": 0.90
}'

Ergebnisse

Die Ergebnisse sollten in etwa so aussehen:

{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}

8. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs!

Weitere Informationen finden Sie in der Dokumentation zu Cloud Run.

Behandelte Themen

  • GPUs in Cloud Run verwenden
  • Hier erfahren Sie, wie Sie Hugging Face zum Abrufen eines Modells verwenden.
  • Hier erfahren Sie, wie Sie das Gemma 2 (2B)-Modell von Google mit vLLM als Inferenz-Engine in Cloud Run bereitstellen.
  • Wie der Back-End-Dienst aufgerufen wird, um die Satzvervollständigung auszuführen.

9. Bereinigen

Um versehentliche Gebühren zu vermeiden, z. B. wenn die Cloud Run-Dienste versehentlich häufiger aufgerufen werden als Ihre monatliche Zuweisung von Cloud Run-Aufrufen in der kostenlosen Stufe, können Sie entweder Cloud Run oder das in Schritt 2 erstellte Projekt löschen.

Wenn Sie den Cloud Run-Dienst löschen möchten, rufen Sie die Cloud Run-Cloud Console unter https://console.cloud.google.com/run auf und löschen Sie den vllm-gemma-2-2b-Dienst. Sie können auch das Dienstkonto vllm-gemma-2-2b löschen.

Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das in Schritt 2 erstellte Projekt aus und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie die Projekte in Ihrem Cloud SDK ändern. Sie können die Liste aller verfügbaren Projekte mit dem Befehl gcloud projects list aufrufen.