1. Einführung
Übersicht
In diesem Codelab verwenden Sie Cloud Run-Jobs, um Batchinferenzen mit dem Llama 3.2-1b LLM von Meta und vLLM auszuführen, die von Cloud Run-Jobs-GPUs unterstützt werden. Sie schreiben die Ergebnisse direkt in Cloud Storage, indem Sie Cloud Run-Volume-Bereitstellungen verwenden.
Lerninhalte
- Batchinferenzen mit Cloud Run-Jobs-GPUs durchführen
- Mit Cloud Run-Volume-Bereitstellungen in Cloud Storage schreiben
2. Hinweis
APIs aktivieren
Bevor Sie dieses Codelab verwenden können, aktivieren Sie die folgenden APIs, indem Sie Folgendes ausführen:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
GPU-Kontingent
Fordern Sie eine Kontingenterhöhung für eine unterstützte Region an. Das Kontingent ist nvidia_l4_gpu_allocation_no_zonal_redundancy unter Cloud Run Admin API.
Hinweis: Wenn Sie ein neues Projekt verwenden, kann es einige Minuten dauern, bis die Kontingente auf dieser Seite angezeigt werden.
Hugging Face
In diesem Codelab wird ein Modell verwendet, das auf Hugging Face gehostet wird. Um dieses Modell zu erhalten, fordern Sie das Hugging Face-Nutzerzugriffstoken mit der Berechtigung „Lesen“ an. Sie verweisen später als YOUR_HF_TOKEN darauf.
Außerdem müssen Sie den Nutzungsbedingungen zustimmen, um das Modell zu verwenden: 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 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 folgendem Befehl:
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \ --display-name="Service account for batch inference codelab" - Verwenden Sie Secret Manager, um das Hugging Face-Zugriffstoken zu speichern:
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 abgestimmten Modells:
gcloud storage buckets create -l europe-west4 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-Quellbereitstellungen 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 ausführt:
- Importiert das Llama-Modell aus Hugging Face
- Führt Batchinferenzen für das Modell aus. Für diesen Vorgang verwendet der Job eine einzelne L4-GPU.
- Schreibt die Ergebnisse auf die lokale Festplatte. Diese 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 der Cloud Run-Quellbereitstellung und führen ihn dann aus. Dieser Schritt enthält auch die Cloud Run-Volume-Bereitstellungsflags zum Speichern von Ergebnissen.
- Cloud Run-Job erstellen:
Mit diesem Befehl wird das Image aus der Quelle erstellt und der Job bereitgestellt. Das kann einige Zeit dauern.gcloud 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:
Die Ausführung des Jobs dauert einige Minuten. Sie können den Status über den Link prüfen, der in der Ausgabe des letzten Befehls angegeben ist.gcloud run jobs execute inference-job --region $REGION --async
Erfolg bestätigen
Um zu bestätigen, dass der Job erfolgreich ausgeführt wurde, sehen Sie sich die Logs des Jobs an, wie in der Ausgabe des letzten Befehls.
Prüfen Sie die Ergebnisse im Cloud Storage-Bucket:
In der Console:
- Cloud Storage aufrufen
- Wählen Sie den Bucket aus, der mit
inference-codelabbeginnt. - Wählen Sie
output.txtaus. - Klicken Sie auf Authentifizierte URL , um den Inhalt im Browser anzusehen.
Der Inhalt der Datei sollte die vier Prompts und ihre Ausgaben sein.
6. Glückwunsch!
Sie haben das Codelab abgeschlossen.
Wir empfehlen, die Cloud Run-Dokumentation zu lesen.
Behandelte Themen
- Batchinferenzen mit Cloud Run-Jobs-GPUs 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 Run-Cloud Console 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 wählen Sie „Löschen“ aus. 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.