1. Einführung
Übersicht
In diesem Codelab verwenden Sie Cloud Run-Jobs, um Batch-Inferenzen mit Meta's Llama 3.2-1b LLM und vLLM auszuführen, die von der GPU von Cloud Run-Jobs unterstützt werden. Sie schreiben die Ergebnisse mithilfe von Cloud Run-Volume-Bereitstellungen direkt in Cloud Storage.
Lerninhalte
- Batch-Inferenzen mit Cloud Run-Jobs mit GPU durchführen
- Mit Cloud Run-Volume-Bereitstellungen in Cloud Storage schreiben
2. Hinweis
APIs aktivieren
Bevor Sie dieses Codelab verwenden können, müssen Sie die folgenden APIs aktivieren. Führen Sie dazu Folgendes aus:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
GPU-Kontingent
Kontingenterhöhung für eine unterstützte Region anfordern Das Kontingent beträgt nvidia_l4_gpu_allocation_no_zonal_redundancy
und wird unter „Cloud Run Admin API“ angezeigt.
Hinweis: Wenn Sie ein neues Projekt verwenden, kann es einige Minuten dauern, bis die Kontingente auf dieser Seite angezeigt werden, nachdem Sie die API aktiviert haben.
Hugging Face
In diesem Codelab wird ein Modell verwendet, das auf Hugging Face gehostet wird. Wenn Sie dieses Modell abrufen möchten, fordern Sie das Hugging Face-Nutzerzugriffstoken mit der Berechtigung „Lesen“ an. Diese wird später als YOUR_HF_TOKEN
bezeichnet.
Außerdem müssen Sie den Nutzungsbedingungen zustimmen, um das Modell verwenden zu können: https://huggingface.co/meta-llama/Llama-3.2-1B
3. Einrichtung und Anforderungen
In diesem Abschnitt finden Sie eine Anleitung zum Einrichten der folgenden Ressourcen:
- IAM-Dienstkonto und zugehörige IAM-Berechtigungen
- Secret Manager-Secret zum Speichern Ihres Hugging Face-Tokens.
- Cloud Storage-Bucket zum Speichern des Inferenzergebnisses.
So richten Sie die erforderlichen Ressourcen ein:
- Legen Sie die Umgebungsvariablen für dieses Codelab fest:
export PROJECT_ID=<your_project_id> export REGION=<your_region> export HF_TOKEN=<YOUR_HF_TOKEN> export SERVICE_ACCOUNT=inference-service-account export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com export SECRET_ID=hugging-face-token export BUCKET_NAME=inference-codelab-${PROJECT_ID}
- Erstellen Sie das Dienstkonto mit dem Befehl:
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \ --display-name="Service account for batch inference codelab"
- So speichern Sie das Hugging Face-Zugriffstoken mit Secret Manager:
gcloud secrets create $SECRET_ID \ --replication-policy="automatic" printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
- Weisen Sie Ihrem Dienstkonto die Rolle „Secret Manager Secret Accessor“ zu:
gcloud secrets add-iam-policy-binding $SECRET_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role='roles/secretmanager.secretAccessor'
- Erstellen Sie einen Bucket zum Hosten Ihres optimierten Modells:
gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
- Gewähren Sie Ihrem Dienstkonto Zugriff auf den Bucket:
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectAdmin
- Erstellen Sie ein Artifact Registry-Repository zum Speichern des Container-Images. Wenn Sie in Ihrem Projekt bereits Cloud Run-Quell-Deployments verwendet haben, überspringen Sie diesen Schritt.
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location=$REGION \ --project=$PROJECT_ID
4. Cloud Run-Job erstellen
In diesem Abschnitt erstellen Sie den Code, der Folgendes tut:
- Importiert das Llama-Modell aus Hugging Face
- Führt eine Batch-Inferenz auf dem Modell aus. Für den Job wird dabei eine einzelne L4-GPU verwendet.
- Schreibt die Ergebnisse auf das lokale Laufwerk. Diese Daten werden über Volume-Bereitstellungen in Cloud Storage geschrieben.
So erstellen Sie den Cloud Run-Job und ein Dockerfile:
- Erstellen Sie ein Verzeichnis zum Hosten des Codes für den Feinabstimmungsjob:
mkdir codelab-inference-job cd codelab-inference-job
- Erstellen Sie eine Datei mit dem Namen
main.py
.# SPDX-License-Identifier: Apache-2.0 from vllm import LLM, SamplingParams # Sample prompts. prompts = [ "Cloud Run is", "The future of AI is", "The capital of Germany is", "python as a programming language is", ] # Create a sampling params object. sampling_params = SamplingParams(temperature=0.8, top_p=0.95) # Create an LLM. llm = LLM(model="meta-llama/Llama-3.2-1B") # Generate texts from the prompts. The output is a list of RequestOutput objects # that contain the prompt, generated text, and other information. outputs = llm.generate(prompts, sampling_params) # Save the outputs to disk with open("/results/output.txt", "w") as f: for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n") print(f"Wrote {len(outputs)} to disk.")
- Erstellen Sie ein
Dockerfile
:FROM python:3.12 ADD main.py . RUN python -m pip install --upgrade pip setuptools RUN pip install vllm CMD ["python", "./main.py"]
5. Job bereitstellen und ausführen
In diesem Schritt erstellen Sie den Cloud Run-Job mit Cloud Run Source Deploy und führen ihn dann aus. Dieser Schritt umfasst auch die Cloud Run-Flags für die Volume-Bereitstellung zum Speichern der Ergebnisse.
- Erstellen Sie den Cloud Run-Job:
Mit diesem Befehl wird das Image aus der Quelle erstellt und der Job bereitgestellt. Dieser Vorgang kann einige Zeit dauern.gcloud beta run jobs deploy inference-job \ --region $REGION \ --source . \ --gpu=1 \ --set-secrets HF_TOKEN=${SECRET_ID}:latest \ --add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \ --add-volume-mount volume=results,mount-path=/results \ --service-account $SERVICE_ACCOUNT_EMAIL
- Job ausführen:
Der Job dauert einige Minuten. Sie können den Status über den Link in der Ausgabe des letzten Befehls prüfen.gcloud run jobs execute inference-job --region $REGION --async
Erfolg bestätigen
Sehen Sie sich die Logs des Jobs in der Ausgabe des letzten Befehls an, um zu prüfen, ob der Job erfolgreich ausgeführt wurde.
Prüfen Sie die Ergebnisse im Cloud Storage-Bucket:
In der Console:
- Cloud Storage aufrufen
- Wählen Sie den Bucket aus, der mit
inference-codelab
beginnt. - Wählen Sie
output.txt
aus. - Klicken Sie auf Authentifizierte URL, um den Inhalt im Browser aufzurufen.
Die Datei sollte die vier Prompts und ihre Ausgaben enthalten.
6. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs.
Lesen Sie die Cloud Run-Dokumentation.
Behandelte Themen
- Batch-Inferenzen mit Cloud Run-Jobs mit GPU durchführen
- Mit Cloud Run-Volume-Bereitstellungen in Cloud Storage schreiben
7. Bereinigen
Wenn Sie den Cloud Run-Job löschen möchten, rufen Sie die Cloud Console für Cloud Run unter https://console.cloud.google.com/run auf und löschen Sie den Job inference-job
.
Wenn Sie das gesamte Projekt löschen möchten, rufen Sie Ressourcen verwalten auf, wählen Sie das Projekt aus, das Sie in Schritt 2 erstellt haben, 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 eine Liste aller verfügbaren Projekte aufrufen, indem Sie gcloud projects list
ausführen.