In dieser Anleitung erfahren Sie, wie Sie mithilfe der Apache Beam RunInference API ein großes Sprachmodell (LLM) in einer Dataflow-Streamingpipeline ausführen.
Weitere Informationen zur RunInference API finden Sie unter Informationen zu Beam ML in der Apache Beam-Dokumentation.
Der Beispielcode ist auf GitHub verfügbar.
Lernziele
- Pub/Sub-Themen und -Abos für die Eingabe und Antworten des Modells erstellen
- Laden Sie das Modell mithilfe eines benutzerdefinierten Vertex AI-Jobs in Cloud Storage.
- Pipeline ausführen.
- Stellen Sie dem Modell eine Frage und erhalten Sie eine Antwort.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
Führen Sie diese Anleitung auf einem Computer aus, auf dem mindestens 5 GB freier Speicherplatz zur Installation der Abhängigkeiten verfügbar sind.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Cloud Storage, Pub/Sub, and Vertex AI APIs:
gcloud services enable dataflow.googleapis.com
compute.googleapis.com storage.googleapis.com pubsub.googleapis.com aiplatform.googleapis.com -
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Cloud Storage, Pub/Sub, and Vertex AI APIs:
gcloud services enable dataflow.googleapis.com
compute.googleapis.com storage.googleapis.com pubsub.googleapis.com aiplatform.googleapis.com -
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
-
Weisen Sie Ihrem Compute Engine-Standarddienstkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.admin
roles/pubsub.editor
roles/aiplatform.user
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
Ersetzen Sie Folgendes:
PROJECT_ID
: Ihre Projekt-ID.PROJECT_NUMBER
: Ihre Projektnummer. Ihre Projektnummer finden Sie mit dem Befehlgcloud projects describe
.SERVICE_ACCOUNT_ROLE
: Jede einzelne Rolle.
- Kopieren Sie die Google Cloud-Projekt-ID. Sie benötigen diesen Wert später in dieser Anleitung.
Google Cloud-Ressourcen erstellen
In diesem Abschnitt werden die folgenden Ressourcen erstellt:
- Ein Cloud Storage-Bucket, der als temporärer Speicherort verwendet werden soll
- Ein Pub/Sub-Thema für die Prompts des Modells
- Ein Pub/Sub-Thema und ein Abo für die Antworten des Modells
Cloud Storage-Bucket erstellen
Erstellen Sie mit der gcloud CLI einen Cloud Storage-Bucket. Dieser Bucket wird von der Dataflow-Pipeline als temporärer Speicherort verwendet.
Verwenden Sie den Befehl gcloud storage buckets create
, um den Bucket zu erstellen:
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
Ersetzen Sie Folgendes:
- BUCKET_NAME: Ein Name für Ihren Cloud Storage-Bucket, der den Anforderungen für Bucket-Namen entspricht. Cloud Storage-Bucket-Namen müssen global einmalig sein.
- LOCATION: der Speicherort für den Bucket.
Kopieren Sie den Bucket-Namen. Sie benötigen diesen Wert später in dieser Anleitung.
Pub/Sub-Themen und -Abos erstellen
Erstellen Sie zwei Pub/Sub-Themen und ein Abo. Ein Thema ist für die Prompts, die Sie an das Modell senden. Das andere Thema und das zugehörige Abo wird für die Antworten des Modells genutzt.
Führen Sie zum Erstellen der Themen den Befehl
gcloud pubsub topics create
zweimal aus, einmal für jedes Thema:gcloud pubsub topics create PROMPTS_TOPIC_ID gcloud pubsub topics create RESPONSES_TOPIC_ID
Ersetzen Sie Folgendes:
- PROMPTS_TOPIC_ID: Die Themen-ID für die Prompts, die an das Modell gesendet werden sollen, z. B.
prompts
- RESPONSES_TOPIC_ID: Die Themen-ID für die Antworten des Modells, z. B.
responses
- PROMPTS_TOPIC_ID: Die Themen-ID für die Prompts, die an das Modell gesendet werden sollen, z. B.
Verwenden Sie den Befehl
gcloud pubsub subscriptions create
, um das Abo zu erstellen und an das Antwortthema anzuhängen:gcloud pubsub subscriptions create RESPONSES_SUBSCRIPTION_ID --topic=RESPONSES_TOPIC_ID
Ersetzen Sie RESPONSES_SUBSCRIPTION_ID durch die Abo-ID für die Antworten des Modells, z. B.
responses-subscription
.
Kopieren Sie die Themen-IDs und die Abo-ID. Sie benötigen diese Werte später in dieser Anleitung.
Umgebung vorbereiten
Laden Sie die Codebeispiele herunter und richten Sie Ihre Umgebung für die Ausführung der Anleitung ein.
Die Codebeispiele im GitHub-Repository "python-docs-samples" enthalten den Code, den Sie zum Ausführen dieser Pipeline benötigen. Wenn Sie bereit sind, Ihre eigene Pipeline zu erstellen, können Sie diesen Beispielcode als Vorlage verwenden.
Erstellen Sie mit venv eine isolierte virtuelle Python-Umgebung, um Ihr Pipelineprojekt auszuführen. Mit einer virtuellen Umgebung können Sie die Abhängigkeiten eines Projekts von den Abhängigkeiten anderer Projekte isolieren. Weitere Informationen zum Installieren von Python und zum Erstellen einer virtuellen Umgebung finden Sie unter Python-Entwicklungsumgebung einrichten.
Klonen Sie das GitHub-Repository mit dem Befehl
git clone
:git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Rufen Sie das Verzeichnis
run-inference
auf:cd python-docs-samples/dataflow/run-inference
Wenn Sie eine Eingabeaufforderung verwenden, prüfen Sie, ob Python 3 und
pip
in Ihrem System ausgeführt werden:python --version python -m pip --version
Installieren Sie gegebenenfalls Python 3.
Wenn Sie Cloud Shell verwenden, können Sie diesen Schritt überspringen, da in Cloud Shell bereits Python installiert ist.
Erstellen Sie eine virtuelle Python-Umgebung::
python -m venv /tmp/env source /tmp/env/bin/activate
Installieren Sie die Abhängigkeiten:
pip install -r requirements.txt --no-cache-dir
Codebeispiel zum Laden von Modellen
Mit dem Modellladecode in dieser Anleitung wird ein benutzerdefinierter Vertex AI-Job gestartet, der das state_dict
-Objekt des Modells in Cloud Storage lädt.
Die Startdatei sieht so aus:
Pipeline-Codebeispiel
Der Pipelinecode in dieser Anleitung stellt eine Dataflow-Pipeline bereit, die Folgendes ausführt:
- Liest eine Eingabeaufforderung aus Pub/Sub und codiert den Text in Tokentensoren.
- Führt die
RunInference
-Transformation aus. - Decodiert die Ausgabetoken-Tensoren in Text und schreibt die Antwort in Pub/Sub.
Die Startdatei sieht so aus:
Modell laden
LLMs können sehr große Modelle sein. Größere Modelle, die mit mehr Parametern trainiert werden, liefern in der Regel bessere Ergebnisse. Größere Modelle benötigen jedoch einen größeren Rechner und mehr Arbeitsspeicher. Größere Modelle können auf CPUs auch langsamer ausgeführt werden.
Bevor Sie ein PyTorch-Modell in Dataflow ausführen, müssen Sie das state_dict
-Objekt des Modells laden. Das Objekt state_dict
eines Modells speichert die Gewichtungen für das Modell.
In einer Dataflow-Pipeline, die die Apache Beam-RunInference
-Transformation verwendet, muss das state_dict
-Objekt des Modells in Cloud Storage geladen werden. Der Rechner, den Sie zum Laden des state_dict
-Objekts in Cloud Storage verwenden, muss genügend Arbeitsspeicher haben, um das Modell zu laden. Der Rechner benötigt außerdem eine schnelle Internetverbindung, um die Gewichtungen herunterzuladen und in Cloud Storage hochzuladen.
In der folgenden Tabelle sehen Sie die Anzahl der Parameter für die einzelnen Modelle und den Mindestspeicher, der zum Laden der jeweiligen Modelle erforderlich ist.
Modell | Parameter | Benötigter Arbeitsspeicher |
---|---|---|
google/flan-t5-small |
80 Millionen | > 320 MB |
google/flan-t5-base |
250 Millionen | > 1 GB |
google/flan-t5-large |
780 Millionen | > 3,2 GB |
google/flan-t5-xl |
3 Milliarden | > 12 GB |
google/flan-t5-xxl |
11 Milliarden | > 44 GB |
google/flan-ul2 |
20 Milliarden | > 80 GB |
Sie können zwar ein kleineres Modell lokal laden, aber in dieser Anleitung wird gezeigt, wie Sie einen benutzerdefinierten Vertex AI-Job starten, der das Modell mit einer VM mit angemessener Größe lädt.
Da LLMs so groß sein können, wird im Beispiel in dieser Anleitung das state_dict
-Objekt als float16
-Format anstelle des Standardformats float32
gespeichert.
Bei dieser Konfiguration verwendet jeder Parameter 16 Bits anstelle von 32 Bits, sodass das state_dict
-Objekt nur halb so groß ist. Mit einer kleineren Größe wird die Zeit zum Laden des Modells minimiert. Die Konvertierung des Formats bedeutet jedoch, dass die VM sowohl das Modell als auch das state_dict
-Objekt in ihren Speicher aufnehmen muss.
In der folgenden Tabelle sind die Mindestanforderungen für das Laden eines Modells aufgeführt, nachdem das state_dict
-Objekt im float16
-Format gespeichert wurde. Die Tabelle enthält auch die vorgeschlagenen Rechnertypen zum Laden eines Modells mithilfe von Vertex AI. Die minimale (und standardmäßige) Laufwerkgröße für Vertex AI beträgt 100 GB. Bei einigen Modellen ist jedoch möglicherweise ein größeres Laufwerk erforderlich.
Modellname | Benötigter Arbeitsspeicher | Maschinentyp | VM-Arbeitsspeicher | VM-Laufwerk |
---|---|---|---|---|
google/flan-t5-small |
> 480 MB | e2-standard-4 |
16 GB | 100 GB |
google/flan-t5-base |
> 1,5 GB | e2-standard-4 |
16 GB | 100 GB |
google/flan-t5-large |
> 4,8 GB | e2-standard-4 |
16 GB | 100 GB |
google/flan-t5-xl |
> 18 GB | e2-highmem-4 |
32 GB | 100 GB |
google/flan-t5-xxl |
> 66 GB | e2-highmem-16 |
128 GB | 100 GB |
google/flan-ul2 |
> 120 GB | e2-highmem-16 |
128 GB | 150 GB |
Laden Sie das Objekt state_dict
des Modells mithilfe eines benutzerdefinierten Vertex AI-Jobs in Cloud Storage:
python download_model.py vertex \
--model-name="MODEL_NAME" \
--state-dict-path="gs://BUCKET_NAME/run-inference/MODEL_NAME.pt" \
--job-name="Load MODEL_NAME" \
--project="PROJECT_ID" \
--bucket="BUCKET_NAME" \
--location="LOCATION" \
--machine-type="VERTEX_AI_MACHINE_TYPE" \
--disk-size-gb="DISK_SIZE_GB"
Ersetzen Sie Folgendes:
- MODEL_NAME: Der Name des Modells, z. B.
google/flan-t5-xl
. - VERTEX_AI_MACHINE_TYPE: Der Maschinentyp, auf dem der benutzerdefinierte Vertex AI-Job ausgeführt werden soll, z. B.
e2-highmem-4
. - DISK_SIZE_GB: Die Laufwerksgröße für die VM in GB. Die Mindestgröße beträgt 100 GB.
Je nach Größe des Modells kann es einige Minuten dauern, bis es geladen ist. Rufen Sie die Seite Benutzerdefinierte Jobs von Vertex AI auf, um den Status aufzurufen.
Benutzerdefinierte Jobs aufrufen
Pipeline ausführen
Nachdem Sie das Modell geladen haben, führen Sie die Dataflow-Pipeline aus. Zum Ausführen der Pipeline müssen sowohl das Modell als auch der von den verschiedenen Workers verwendete Arbeitsspeicher in den Speicher passen.
In der folgenden Tabelle sind die empfohlenen Maschinentypen zum Ausführen einer Inferenzpipeline aufgeführt.
Modellname | Maschinentyp | VM-Arbeitsspeicher |
---|---|---|
google/flan-t5-small |
n2-highmem-2 |
16 GB |
google/flan-t5-base |
n2-highmem-2 |
16 GB |
google/flan-t5-large |
n2-highmem-4 |
32 GB |
google/flan-t5-xl |
n2-highmem-4 |
32 GB |
google/flan-t5-xxl |
n2-highmem-8 |
64 GB |
google/flan-ul2 |
n2-highmem-16 |
128 GB |
Führen Sie die Pipeline aus:
python main.py \
--messages-topic="projects/PROJECT_ID/topics/PROMPTS_TOPIC_ID" \
--responses-topic="projects/PROJECT_ID/topics/RESPONSES_TOPIC_ID" \
--model-name="MODEL_NAME" \
--state-dict-path="gs://BUCKET_NAME/run-inference/MODEL_NAME.pt" \
--runner="DataflowRunner" \
--project="PROJECT_ID" \
--temp_location="gs://BUCKET_NAME/temp" \
--region="REGION" \
--machine_type="DATAFLOW_MACHINE_TYPE" \
--requirements_file="requirements.txt" \
--requirements_cache="skip" \
--experiments="use_sibling_sdk_workers" \
--experiments="no_use_multiple_sdk_containers"
Ersetzen Sie Folgendes:
- PROJECT_ID: die Projekt-ID
- PROMPTS_TOPIC_ID: die Themen-ID für die Prompts, die an das Modell gesendet werden sollen
- RESPONSES_TOPIC_ID: die Themen-ID für die Antworten des Modells
- MODEL_NAME: der Name des Modells, z. B.
google/flan-t5-xl
. - BUCKET_NAME: Der Name des Buckets
- REGION: Region, in der der Job bereitgestellt werden soll, z. B.
us-central1
- DATAFLOW_MACHINE_TYPE: die VM, auf der die Pipeline ausgeführt werden soll, z. B.
n2-highmem-4
Damit das Modell nur einmal pro Worker geladen wird und genügend Arbeitsspeicher zur Verfügung steht, konfigurieren Sie die Worker zur Verwendung einer einzelnen Methode. Dazu legen Sie die Pipelineoption --experiments=no_use_multiple_sdk_containers
fest. Sie müssen die Anzahl der Threads nicht begrenzen, da die Transformation RunInference
dasselbe Modell mit mehreren Threads nutzt.
Die Pipeline in diesem Beispiel wird mit CPUs ausgeführt. Bei einem größeren Modell ist mehr Zeit für die Verarbeitung der einzelnen Anfragen erforderlich. Sie können GPUs aktivieren, wenn Sie schnellere Antworten benötigen.
Den Status der Pipeline können Sie auf der Dataflow-Seite Jobs aufrufen.
Modell eine Frage stellen
Nachdem die Pipeline ausgeführt wird, übergeben Sie dem Modell einen Prompt und erhalten eine Antwort.
Senden Sie eine Nachricht an Pub/Sub, um Ihren Prompt zu senden. Führen Sie den Befehl
gcloud pubsub topics publish
aus:gcloud pubsub topics publish PROMPTS_TOPIC_ID \ --message="PROMPT_TEXT"
Ersetzen Sie
PROMPT_TEXT
durch einen String, der den Prompt enthält, den Sie bereitstellen möchten. Setzen Sie den Prompt in Anführungszeichen.Verwenden Sie einen eigenen Prompt oder versuchen Sie es mit einem der folgenden Beispiele:
Translate to Spanish: My name is Luka
Complete this sentence: Once upon a time, there was a
Summarize the following text: Dataflow is a Google Cloud service that provides unified stream and batch data processing at scale. Use Dataflow to create data pipelines that read from one or more sources, transform the data, and write the data to a destination.
Verwenden Sie den Befehl
gcloud pubsub subscriptions pull
, um die Antwort abzurufen.Je nach Größe des Modells kann es einige Minuten dauern, bis das Modell eine Antwort generiert. Bei größeren Modellen dauern Bereitstellung und Generation einer Antwort länger.
gcloud pubsub subscriptions pull RESPONSES_SUBSCRIPTION_ID --auto-ack
Ersetzen Sie
RESPONSES_SUBSCRIPTION_ID
durch die Abo-ID für die Antworten des Modells.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Einzelne Ressourcen löschen
-
Beenden Sie die virtuelle Python-Umgebung:
deactivate
-
Beenden Sie die Pipeline:
-
Listen Sie die Job-IDs der ausgeführten Dataflow-Jobs auf und notieren Sie sich die Job-ID des Jobs der Anleitung:
gcloud dataflow jobs list --region=REGION --status=active
-
Brechen Sie den Job ab:
gcloud dataflow jobs cancel JOB_ID --region=REGION
-
-
Löschen Sie den Bucket und seinen Inhalt:
gcloud storage rm gs://BUCKET_NAME --recursive
-
Löschen Sie die Themen und das Abo:
gcloud pubsub topics delete PROMPTS_TOPIC_ID gcloud pubsub topics delete RESPONSES_TOPIC_ID gcloud pubsub subscriptions delete RESPONSES_SUBSCRIPTION_ID
-
Widerrufen Sie die Rollen, die Sie dem Compute Engine-Standarddienstkonto zugewiesen haben. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.admin
roles/pubsub.editor
roles/aiplatform.user
gcloud projects remove-iam-policy-binding PROJECT_ID --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com --role=SERVICE_ACCOUNT_ROLE
Optional: Löschen Sie Rollen aus Ihrem Google-Konto.
gcloud projects remove-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=roles/iam.serviceAccountUser
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
Wie geht es weiter?
- Dataflow ML entdecken.
- Weitere Informationen zur RunInference API.
- Ausführliche Informationen zur Verwendung von ML mit Apache Beam finden Sie in der Apache Beam-Dokumentation zu KI/ML-Pipelines.
- Arbeiten Sie das Notebook RunInference for Generative AI durch.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center