Auf dieser Seite erfahren Sie, wie Sie mithilfe der Google Cloud Console oder der Vertex AI API Batchinferenzen aus Ihren benutzerdefinierten trainierten Modellen abrufen.
Für eine Batchinferenz geben Sie eine Eingabequelle und einen Ausgabespeicherort an, entweder Cloud Storage oder BigQuery, wobei Vertex AI die Ergebnisse der Batchinferenz speichert.
Beschränkungen und Anforderungen
Beachten Sie die folgenden Einschränkungen und Anforderungen, wenn Sie Batchvorhersagen abrufen:
- Damit die Verarbeitungszeit möglichst gering ist, müssen sich die Ein- und Ausgabestandorte in derselben Region oder Multiregion befinden. Wenn Ihre Eingabe beispielsweise in
us-central1
liegt, kann die Ausgabe inus-central1
oderUS
liegen, aber nicht ineurope-west4
. Weitere Informationen finden Sie unter Cloud Storage-Standorte und BigQuery-Standorte. - Ihre Eingabe und Ausgabe müssen sich außerdem in derselben Region oder Mehrfachregion befinden wie Ihr Modell.
- BigQuery ML-Modelle sind keine benutzerdefinierten trainierten Modelle. Die Informationen auf dieser Seite können jedoch verwendet werden, um Batchinferenzen aus einem BigQuery ML-Modell unter den folgenden Bedingungen abzurufen:
- Das BigQuery ML-Modell muss bei Vertex AI Model Registry registriert sein.
- Wenn Sie eine BigQuery-Tabelle als Eingabe verwenden möchten, müssen Sie
InstanceConfig.instanceType
mit der Vertex AI API auf"object"
festlegen.
- Das Laden eines Batchinferenzmodells dauert etwa 40 Minuten.
Wenn die folgende Fehlermeldung angezeigt wird, verwenden Sie ein kleineres Modell für Batchvorhersagen:
Error: model server never became ready. Please validate that your model file or container configuration are valid.
Anforderungen an Eingabedaten
Die Eingabe für Batchanfragen gibt die Elemente an, die zur Inferenz an Ihr Modell gesendet werden sollen. Wir unterstützen die folgenden Eingabeformate:
JSON Lines
Mit einer JSON Lines-Datei können Sie eine Liste der Eingabeinstanzen festlegen, für die Inferenzvorhersagen getroffen werden sollen. Speichern Sie die Datei in einem Cloud Storage-Bucket.
Beispiel 1
Das folgende Beispiel zeigt eine JSON Lines-Datei, in der jede Zeile ein Array enthält:
[1, 2, 3, 4]
[5, 6, 7, 8]
Folgendes wird an den Container im HTTP-Anfragetext gesendet:
Alle anderen Container
{"instances": [ [1, 2, 3, 4], [5, 6, 7, 8] ]}
PyTorch-Container
{"instances": [ { "data": [1, 2, 3, 4] }, { "data": [5, 6, 7, 8] } ]}
Beispiel 2
Das folgende Beispiel zeigt eine JSON Lines-Datei, in der jede Zeile ein Objekt enthält.
{ "values": [1, 2, 3, 4], "key": 1 }
{ "values": [5, 6, 7, 8], "key": 2 }
Folgendes wird an den Container im HTTP-Anfragetext gesendet. Beachten Sie, dass derselbe Anfragetext an alle Container gesendet wird.
{"instances": [
{ "values": [1, 2, 3, 4], "key": 1 },
{ "values": [5, 6, 7, 8], "key": 2 }
]}
Beispiel 3:
Bei vordefinierten PyTorch-Containern muss jede Instanz gemäß dem Standard-Handler von TorchServe in ein data
-Feld eingebunden werden. Vertex AI verpackt Ihre Instanzen nicht. Beispiel:
{ "data": { "values": [1, 2, 3, 4], "key": 1 } }
{ "data": { "values": [5, 6, 7, 8], "key": 2 } }
Folgendes wird an den Inferenzcontainer im HTTP-Anfragetext gesendet:
{"instances": [
{ "data": { "values": [1, 2, 3, 4], "key": 1 } },
{ "data": { "values": [5, 6, 7, 8], "key": 2 } }
]}
TFRecord
Speichern Sie Eingabeinstanzen im TFRecord-Format. Optional können Sie die TFRecord-Dateien mit Gzip komprimieren. Speichern Sie die TFRecord-Dateien in einem Cloud Storage-Bucket.
Vertex AI liest jede Instanz in Ihren TFRecord-Dateien als Binärcode und codiert dann die Instanz mit base64 als JSON-Objekt mit einem einzigen Schlüssel namens b64
.
Folgendes wird an den Container im HTTP-Anfragetext gesendet:
Alle anderen Container
{"instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}
PyTorch-Container
{"instances": [ { "data": {"b64": "b64EncodedASCIIString" } }, { "data": {"b64": "b64EncodedASCIIString" } } ]}
Sorgen Sie dafür, dass Ihr Container weiß, wie die Instanz decodiert werden soll.
CSV
Geben Sie eine Eingabeinstanz pro Zeile in einer CSV-Datei an. Die erste Zeile muss eine Kopfzeile sein. Alle Strings müssen in doppelte Anführungszeichen (") eingeschlossen werden. Vertex AI akzeptiert Zellenwerte, die Zeilenumbrüche enthalten, nicht. Werte ohne umschließende Anführungszeichen werden als Gleitkommazahlen gelesen.
Das folgende Beispiel zeigt eine CSV-Datei mit zwei Eingabeinstanzen:
"input1","input2","input3"
0.1,1.2,"cat1"
4.0,5.0,"cat2"
Folgendes wird an den Container im HTTP-Anfragetext gesendet:
Alle anderen Container
{"instances": [ [0.1,1.2,"cat1"], [4.0,5.0,"cat2"] ]}
PyTorch-Container
{"instances": [ { "data": [0.1,1.2,"cat1"] }, { "data": [4.0,5.0,"cat2"] } ]}
Dateiliste
Erstellen Sie eine Textdatei, in der jede Zeile der Cloud Storage-URI für eine Datei ist. Vertex AI liest den Inhalt jeder Datei als Binärcode und codiert dann die Instanz mit base64 als JSON-Objekt mit einem einzigen Schlüssel namens b64
.
Wenn Sie die Google Cloud Console zum Abrufen von Batchinferenzen verwenden möchten, fügen Sie Ihre Dateiliste direkt in die Google Cloud Console ein. Speichern Sie die Liste andernfalls in einem Cloud Storage-Bucket.
Das folgende Beispiel zeigt eine Dateiliste mit zwei Eingabeinstanzen:
gs://path/to/image/image1.jpg
gs://path/to/image/image2.jpg
Folgendes wird an den Container im HTTP-Anfragetext gesendet:
Alle anderen Container
{ "instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}
PyTorch-Container
{ "instances": [ { "data": { "b64": "b64EncodedASCIIString" } }, { "data": { "b64": "b64EncodedASCIIString" } } ]}
Sorgen Sie dafür, dass Ihr Container weiß, wie die Instanz decodiert werden soll.
BigQuery
Geben Sie eine BigQuery-Tabelle als projectId.datasetId.tableId
an.
Vertex AI wandelt jede Zeile aus der Tabelle in eine JSON-Instanz um.
Angenommen, Ihre Tabelle enthält Folgendes:
Spalte 1 | Spalte 2 | Spalte 3 |
---|---|---|
1.0 | 3.0 | "Cat1" |
2.0 | 4.0 | "Cat2" |
Folgendes wird an den Container im HTTP-Anfragetext gesendet:
Alle anderen Container
{"instances": [ [1.0,3.0,"cat1"], [2.0,4.0,"cat2"] ]}
PyTorch-Container
{"instances": [ { "data": [1.0,3.0,"cat1"] }, { "data": [2.0,4.0,"cat2"] } ]}
So werden BigQuery-Datentypen in JSON konvertiert:
BigQuery-Typ | JSON-Typ | Beispielwert |
---|---|---|
String | String | "abc" |
Ganzzahl | Ganzzahl | 1 |
Float | Float | 1.2 |
Numerisch | Float | 4925.000000000 |
Boolesch | Boolesch | true |
TimeStamp | String | "2019-01-01 23:59:59.999999+00:00" |
Datum | String | "2018-12-31" |
Zeit | String | "23:59:59.999999" |
DateTime | String | "2019-01-01T00:00:00" |
Datensatz | Object | { "A": 1,"B": 2} |
Wiederkehrender Typ | Array[Type] | [1, 2] |
Verschachtelter Datensatz | Object | {"A": {"a": 0}, "B": 1} |
Daten partitionieren
Die Batchinferenz verwendet MapReduce, um die Eingabe auf jedes Replikat zu fragmentieren. Damit die MapReduce-Funktionen genutzt werden können, muss die Eingabe partitionierbar sein.
Vertex AI partitioniert automatisch die BigQuery-, Dateilisten- und JSON Lines-Eingaben.
Vertex AI partitioniert CSV-Dateien nicht automatisch, da sie nicht von Natur aus partitionierbar sind. Zeilen in CSV-Dateien sind weder selbstbeschreibend noch typisiert und können Zeilenumbrüche enthalten. Wir raten davon ab, CSV-Eingaben für durchsatzsensible Anwendungen zu verwenden.
Partitionieren Sie bei der TFRecord-Eingabe die Daten manuell. Teilen Sie dazu die Instanzen in kleinere Dateien auf und übergeben Sie die Dateien mit einem Platzhalter (z. B. gs://my-bucket/*.tfrecord
) an den Job. Die Anzahl der Dateien sollte mindestens der angegebenen Anzahl an Replikaten entsprechen.
Eingabedaten filtern und transformieren
Um Ihre Batcheingabe zu filtern oder zu transformieren, können Sie instanceConfig
in der BatchPredictionJob
-Anfrage angeben.
Mit der Filterung können Sie entweder bestimmte Felder aus den Eingabedaten aus Ihrer Inferenzanfrage ausschließen oder nur einen Teil der Felder aus den Eingabedaten in Ihrer Inferenzanfrage einschließen, ohne dass benutzerdefinierte Vor-/Nachverarbeitung im Inferenzcontainer ausführen. Dies ist nützlich, wenn die Eingabedatendatei zusätzliche Spalten enthält, die vom Modell nicht benötigt werden, z. B. Schlüssel oder zusätzliche Daten.
Mit der Transformation können Sie die Instanzen im JSON-Format array
oder object
an den Container senden. Weitere Informationen finden Sie unter instanceType
.
Angenommen, Ihre Eingabetabelle enthält Folgendes:
customerId | col1 | col2 |
---|---|---|
1001 | 1 | 2 |
1002 | 5 | 6 |
und Sie geben die folgende instanceConfig
an:
{
"name": "batchJob1",
...
"instanceConfig": {
"excludedFields":["customerId"]
"instanceType":"object"
}
}
Anschließend werden die Instanzen in Ihrer Inferenzanfrage als JSON-Objekte gesendet und die Spalte customerId
wird ausgeschlossen:
{"col1":1,"col2":2}
{"col1":5,"col2":6}
Beachten Sie, dass bei Angabe des folgenden instanceConfig
dasselbe Ergebnis zurückgegeben wird:
{
"name": "batchJob1",
...
"instanceConfig": {
"includedFields": ["col1","col2"]
"instanceType":"object"
}
}
Eine Demonstration zur Verwendung von Featurefiltern finden Sie im Notebook Batchinferenz mit einem benutzerdefinierten Modell und mit Featurefilterung.
Batchinferenz anfordern
Für Batchinferenzanfragen können Sie die Google Cloud -Konsole oder die Vertex AI API verwenden. Abhängig von der Anzahl der Eingabeelemente, die Sie eingereicht haben, kann die Batchinferenz eine Weile dauern.
Wenn Sie eine Batchinferenz anfordern, wird der Inferenzcontainer als vom Nutzer bereitgestelltes benutzerdefiniertes Dienstkonto ausgeführt. Die Lese-/Schreibvorgänge, z. B. das Lesen der Inferenzinstanzen aus der Datenquelle oder das Schreiben der Inferenz-Ergebnisse, erfolgen standardmäßig mit dem Vertex AI-Dienst-Agent, der standardmäßig Zugriff auf BigQuery und Cloud Storage hat.
Google Cloud console
Verwenden Sie die Google Cloud Console, um eine Batchinferenz anzufordern.
- Rufen Sie in der Google Cloud Console unter „Vertex AI“ die Seite Batchvorhersagen auf.
Klicken Sie auf Erstellen, um das Fenster Neue Batchvorhersage zu öffnen.
Führen Sie für Batchvorhersage definieren folgende Schritte aus:
Geben Sie einen Namen für die Batchinferenz ein.
Wählen Sie für Modellname den Namen des Modells aus, das für diese Batchinferenz verwendet werden soll.
Wählen Sie unter Quelle auswählen die Quelle aus, die auf Ihre Eingabedaten angewendet wird:
- Wenn Sie Ihre Eingabe im Format JSON Lines, CSV oder TFRecord formatiert haben, wählen Sie Datei in Cloud Storage (JSON Lines, CSV, TFRecord, TFRecord Gzip) aus. Geben Sie Ihre Eingabedatei dann im Feld Quellpfad an.
- Wenn Sie eine Dateiliste als Eingabe verwenden, wählen Sie Dateien in Cloud Storage (other) aus und fügen Sie die Dateiliste in das folgende Feld ein.
- Wählen Sie für die BigQuery-Eingabe die Option BigQuery-Pfad aus. Wenn Sie BigQuery als Eingabe auswählen, müssen Sie auch BigQuery als Ausgabe und Google-managed encryption keyauswählen. Der vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK) wird nicht mit BigQuery als Eingabe/Ausgabe unterstützt.
Geben Sie im Feld Zielpfad das Cloud Storage-Verzeichnis an, in dem Vertex AI die Batchinferenzausgabe speichern soll.
Optional können Sie Feature-Attributionen für dieses Modell aktivieren anklicken, um Feature-Attributionen als Teil der Batchinferenzantwort zu erhalten. Klicken Sie anschließend auf Bearbeiten, um die Erläuterungseinstellungen zu konfigurieren. (Das Bearbeiten der Erläuterungseinstellungen ist optional, wenn Sie zuvor die Erläuterungseinstellungen für das Modell konfiguriert und andernfalls angefordert haben.)
Legen Sie Computing-Optionen für den Batchinferenzjob fest: Anzahl der Computing-Knoten, Maschinentyp und (optional) Beschleunigertyp und Beschleunigeranzahl.
Optional: Die Modellmonitoring-Analyse für Batchinferenzen ist in der Vorschau verfügbar. Informationen für das Hinzufügen einer Konfiguration zur Abweichungserkennung zu Ihrem Batchinferenzjob finden Sie unter Voraussetzungen.
Klicken Sie, um die Option Model Monitoring für diese Batchvorhersage aktivieren einzuschalten.
Wählen Sie eine Quelle der Trainingsdaten aus. Geben Sie den Datenpfad oder den Speicherort für die ausgewählte Trainingsdatenquelle ein.
Optional: Geben Sie unter Benachrichtigungsgrenzwerte Grenzwerte an, ab denen Benachrichtigungen ausgelöst werden sollen.
Geben Sie unter Benachrichtigungs-E-Mails eine oder mehrere durch Kommas getrennte E-Mail-Adressen ein, um Benachrichtigungen zu erhalten, wenn ein Modell einen Benachrichtigungsgrenzwert überschreitet.
Optional: Fügen Sie unter Benachrichtigungskanäle Cloud Monitoring-Kanäle hinzu, um Benachrichtigungen zu erhalten, wenn ein Modell einen Benachrichtigungsgrenzwert überschreitet. Sie können vorhandene Cloud Monitoring-Kanäle auswählen oder neue erstellen. Klicken Sie dazu auf Benachrichtigungskanäle verwalten. Die Google Cloud Console unterstützt PagerDuty-, Slack- und Pub/Sub-Benachrichtigungskanäle.
Klicken Sie auf Erstellen.
API
Verwenden Sie die Vertex AI API, um Batchinferenzanfragen zu senden. Wählen Sie einen Tab aus, je nachdem, mit welchem Tool Sie Batchinferenzen abrufen.
REST
Ersetzen Sie dabei folgende Werte für die Anfragedaten:
LOCATION_ID: Region, in der das Modell gespeichert ist .und der Batchvorhersagejob ausgeführt wird. Beispiel:
us-central1
.PROJECT_ID: Ihre Projekt-ID.
BATCH_JOB_NAME: Anzeigename für den Batchvorhersagejob.
MODEL_ID: Die ID für das Modell, das für Vorhersagen verwendet werden soll.
INPUT_FORMAT: Das Format der Eingabedaten:
jsonl
,csv
,tf-record
,tf-record-gzip
oderfile-list
.INPUT_URI: Cloud Storage-URI Ihrer Eingabedaten. Kann Platzhalter enthalten.
OUTPUT_DIRECTORY: Cloud Storage-URI eines Verzeichnisses, in dem Vertex AI die Ausgabe speichern soll.
MACHINE_TYPE: Die Maschinenressourcen, die für diesen Batchvorhersagejob zu verwenden sind.
Optional können Sie das Feld
machineSpec
konfigurieren, um Beschleuniger zu verwenden. Im folgenden Beispiel wird dies jedoch nicht veranschaulicht.BATCH_SIZE: Die Anzahl der Instanzen, die in jeder Vorhersageanfrage gesendet werden sollen. Der Standardwert ist 64. Das Erhöhen der Batchgröße kann den Durchsatz erhöhen, aber auch zu Zeitüberschreitungen bei Anfragen führen.
STARTING_REPLICA_COUNT: Die Anzahl der Knoten für diesen Batchvorhersagejob.
HTTP-Methode und URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
JSON-Text der Anfrage:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "INPUT_FORMAT", "gcsSource": { "uris": ["INPUT_URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY", }, }, "dedicatedResources" : { "machineSpec" : { "machineType": MACHINE_TYPE }, "startingReplicaCount": STARTING_REPLICA_COUNT }, "manualBatchTuningParameters": { "batch_size": BATCH_SIZE, } }
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
und führen Sie den folgenden Befehl aus:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME 202005291958", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "INPUT_URI" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", }
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Java-Einrichtungsschritten in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Java API.
Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ersetzen Sie im folgenden Beispiel PREDICTIONS_FORMAT durch jsonl
.
Informationen zum Ersetzen der anderen Platzhalter finden Sie auf dem Tab REST & CMD LINE
dieses Abschnitts.
Python
Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Python-API-Referenzdokumentation.
BigQuery
Im vorherigen REST-Beispiel werden Cloud Storage für die Quelle und das Ziel verwendet. Wenn Sie stattdessen BigQuery verwenden möchten, nehmen Sie die folgenden Änderungen vor:
Ändern Sie das Feld
inputConfig
so:"inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "bq://SOURCE_PROJECT_ID.SOURCE_DATASET_NAME.SOURCE_TABLE_NAME" } }
Ändern Sie das Feld
outputConfig
so:"outputConfig": { "predictionsFormat":"bigquery", "bigqueryDestination":{ "outputUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_DATASET_NAME.DESTINATION_TABLE_NAME" } }
Ersetzen Sie Folgendes:
SOURCE_PROJECT_ID
: ID des Google Cloud QuellprojektsSOURCE_DATASET_NAME
: Name des BigQuery-QuelldatasetsSOURCE_TABLE_NAME
: Name der BigQuery-QuelltabelleDESTINATION_PROJECT_ID
: ID des Google Cloud ZielprojektsDESTINATION_DATASET_NAME
: Name des BigQuery-Ziel-DatasetsDESTINATION_TABLE_NAME
: Name der BigQuery-Zieltabelle
Featurewichtigkeit
Wenn Sie für Vorhersagen Featurewichtigkeitswerte zurückgeben möchten, legen Sie für das Attribut generateExplanation
den Wert true
fest. Beachten Sie, dass Prognosemodelle die Featurewichtigkeit nicht unterstützen, sodass Sie sie nicht in Ihre Batchinferenzanfragen aufnehmen können.
Die Featurewichtigkeit, manchmal auch Featureattributionen genannt, ist Teil von Vertex Explainable AI.
Sie können für generateExplanation
nur dann true
festlegen, wenn Sie Ihr Model
für Erläuterungen konfiguriert haben oder wenn Sie das Feld explanationSpec
von BatchPredictionJob
angeben.
Maschinentyp und Anzahl der Replikate wählen
Durch horizontale Skalierung durch eine Steigerung der Anzahl der Replikate wird der Durchsatz linearer und vorhersehbarer verbessert als durch die Verwendung größerer Maschinentypen.
Im Allgemeinen empfehlen wir, den kleinstmöglichen Maschinentyp für Ihren Job anzugeben und die Anzahl der Replikate zu erhöhen.
Aus Gründen der Kosteneffizienz empfehlen wir, dass Sie die Replikatanzahl so auswählen, dass Ihr Batchinferenzjob mindestens 10 Minuten lang ausgeführt wird. Der Grund ist, dass Ihnen Kosten pro Replikatknotenstunde in Rechnung gestellt werden, inklusive der etwa 5 Minuten, die jedes Replikat zum Start benötigt. Es ist nicht kostengünstig, nur wenige Sekunden Rechenarbeiten auszuführen und dann herunterzufahren.
Als allgemeine Orientierungshilfe empfehlen wir für Tausende von Instanzen einen starting_replica_count
in mehreren Zehntausend. Bei Millionen von Instanzen empfehlen wir einen starting_replica_count
in mehreren Hunderten. Sie können auch die folgende Formel verwenden, um die Anzahl der Replikate zu schätzen:
N / (T * (60 / Tb))
Dabei gilt:
- N: Die Anzahl der Batches im Job. Beispiel: 1 Million Instanzen/Batchgröße von 100 = 10.000 Batches.
- T: Die erwartete Zeit für den Batchinferenzjob. Beispiel: 10 Minuten.
- Tb: Die Zeit in Sekunden, die ein Replikat benötigt, um einen einzelnen Batch zu verarbeiten. Beispiel: 1 Sekunde pro Batch bei einem Maschinentyp mit 2 Kernen.
In unserem Beispiel werden 10.000 Batches/(10 Minuten * (60/1 s)) auf 17 Replikate aufgerundet.
Anders als bei der Onlineinferenz werden Batchinferenzjobs nicht automatisch skaliert. Da alle Eingabedaten im Voraus bekannt sind, partitioniert das System die Daten beim Start des Jobs in die einzelnen Replikate. Das System verwendet den Parameter starting_replica_count
. Der Parameter max_replica_count
wird ignoriert.
Diese Empfehlungen sind ungefähre Richtlinien. Es ist nicht sicher, dass sie für jedes Modell einen optimalen Durchsatz bieten. Sie liefern keine genauen Schätzungen in Bezug auf Verarbeitungszeit und Kosten. Und sie bieten nicht unbedingt für jedes Szenario die besten Kompromisse in Bezug auf Kosten/Durchsatz. Verwenden Sie sie als guten Ausgangspunkt und passen Sie sie bei Bedarf an. Führen Sie zum Messen von Merkmalen wie dem Durchsatz für Ihr Modell das Notebook Idealen Maschinentyp ermitteln aus.
Für GPU- oder TPU-beschleunigte Maschinen
Beachten Sie die vorherigen Richtlinien (die auch für reine CPU-Modelle gelten) und die folgenden zusätzlichen Überlegungen:
- Möglicherweise benötigen Sie mehr CPUs und GPUs (z. B. für die Datenvorverarbeitung).
- GPU-Maschinentypen benötigen mehr Zeit für den Start (10 Minuten). Daher sollten Sie für den Batchinferenzjob längere Zeiten (z. B. mindestens 20 Minuten anstelle von 10 Minuten) einplanen, damit ein angemessener Anteil der Zeit und Kosten für die Generierung von Inferenzen aufgewendet wird.
Batchinferenzergebnisse abrufen
Wenn eine Batchinferenz abgeschlossen ist, wird die Ausgabe der Inferenzen in dem Cloud Storage-Bucket oder BigQuery-Speicherort gespeichert, den Sie in Ihrer Anfrage angegeben haben.
Beispiel für ein Batchinferenzergebnis
Der Ausgabeordner enthält eine Reihe von JSON-Lines-Dateien.
Die Dateien heißen {gcs_path}/prediction.results-{file_number}-of-{number_of_files_generated}
.
Die Anzahl der Dateien ist aufgrund der verteilten Natur von Batchinferenz nicht deterministisch.
Jede Zeile in der Datei entspricht einer Instanz aus der Eingabe und hat die folgenden Schlüssel/Wert-Paare:
prediction
: Enthält den vom Container zurückgegebenen Wert.instance
: Enthält für Dateilisten den Cloud Storage-URI. Bei allen anderen Eingabeformaten enthält es den Wert, der an den Container im HTTP-Anfragetext gesendet wurde.
Beispiel 1
Wenn die HTTP-Anfrage Folgendes enthält:
{
"instances": [
[1, 2, 3, 4],
[5, 6, 7, 8]
]}
Der Container gibt Folgendes zurück:
{
"predictions": [
[0.1,0.9],
[0.7,0.3]
],
}
Dann ist dies die JSON-Lines-Ausgabedatei:
{ "instance": [1, 2, 3, 4], "prediction": [0.1,0.9]}
{ "instance": [5, 6, 7, 8], "prediction": [0.7,0.3]}
Beispiel 2
Wenn die HTTP-Anfrage Folgendes enthält:
{
"instances": [
{"values": [1, 2, 3, 4], "key": 1},
{"values": [5, 6, 7, 8], "key": 2}
]}
Der Container gibt Folgendes zurück:
{
"predictions": [
{"result":1},
{"result":0}
],
}
Dann ist dies die JSON-Lines-Ausgabedatei:
{ "instance": {"values": [1, 2, 3, 4], "key": 1}, "prediction": {"result":1}}
{ "instance": {"values": [5, 6, 7, 8], "key": 2}, "prediction": {"result":0}}
Explainable AI verwenden
Wir empfehlen, funktionsbasierten Erklärungen nicht für große Datenmengen zu verwenden. Das liegt daran, dass jede Eingabe potenziell zu Tausenden von Anfragen führen kann, basierend auf den möglichen Feature-Werten. Dies kann zu einer massiv erhöhten Verarbeitungszeit und ‑kosten führen. Im Allgemeinen reicht ein kleines Dataset aus, um die Merkmalwichtigkeit zu ermitteln.
Die Batchinferenz unterstützt keine beispielbasierten Erklärungen.