Batch-Inferenzen von einem benutzerdefinierten trainierten Modell abrufen

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 in us-central1 oder US liegen, aber nicht in europe-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.

  1. Rufen Sie in der Google Cloud Console unter „Vertex AI“ die Seite Batchvorhersagen auf.

Zur Seite "Batchvorhersagen"

  1. Klicken Sie auf Erstellen, um das Fenster Neue Batchvorhersage zu öffnen.

  2. Führen Sie für Batchvorhersage definieren folgende Schritte aus:

    1. Geben Sie einen Namen für die Batchinferenz ein.

    2. Wählen Sie für Modellname den Namen des Modells aus, das für diese Batchinferenz verwendet werden soll.

    3. 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.
    4. Geben Sie im Feld Zielpfad das Cloud Storage-Verzeichnis an, in dem Vertex AI die Batchinferenzausgabe speichern soll.

    5. 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.)

    6. Legen Sie Computing-Optionen für den Batchinferenzjob fest: Anzahl der Computing-Knoten, Maschinentyp und (optional) Beschleunigertyp und Beschleunigeranzahl.

  3. 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.

    1. Klicken Sie, um die Option Model Monitoring für diese Batchvorhersage aktivieren einzuschalten.

    2. Wählen Sie eine Quelle der Trainingsdaten aus. Geben Sie den Datenpfad oder den Speicherort für die ausgewählte Trainingsdatenquelle ein.

    3. Optional: Geben Sie unter Benachrichtigungsgrenzwerte Grenzwerte an, ab denen Benachrichtigungen ausgelöst werden sollen.

    4. 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.

    5. 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.

  4. 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 oder file-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.

import com.google.cloud.aiplatform.util.ValueConverter;
import com.google.cloud.aiplatform.v1.AcceleratorType;
import com.google.cloud.aiplatform.v1.BatchDedicatedResources;
import com.google.cloud.aiplatform.v1.BatchPredictionJob;
import com.google.cloud.aiplatform.v1.GcsDestination;
import com.google.cloud.aiplatform.v1.GcsSource;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.MachineSpec;
import com.google.cloud.aiplatform.v1.ModelName;
import com.google.protobuf.Value;
import java.io.IOException;

public class CreateBatchPredictionJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String modelName = "MODEL_NAME";
    String instancesFormat = "INSTANCES_FORMAT";
    String gcsSourceUri = "GCS_SOURCE_URI";
    String predictionsFormat = "PREDICTIONS_FORMAT";
    String gcsDestinationOutputUriPrefix = "GCS_DESTINATION_OUTPUT_URI_PREFIX";
    createBatchPredictionJobSample(
        project,
        displayName,
        modelName,
        instancesFormat,
        gcsSourceUri,
        predictionsFormat,
        gcsDestinationOutputUriPrefix);
  }

  static void createBatchPredictionJobSample(
      String project,
      String displayName,
      String model,
      String instancesFormat,
      String gcsSourceUri,
      String predictionsFormat,
      String gcsDestinationOutputUriPrefix)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient client = JobServiceClient.create(settings)) {

      // Passing in an empty Value object for model parameters
      Value modelParameters = ValueConverter.EMPTY_VALUE;

      GcsSource gcsSource = GcsSource.newBuilder().addUris(gcsSourceUri).build();
      BatchPredictionJob.InputConfig inputConfig =
          BatchPredictionJob.InputConfig.newBuilder()
              .setInstancesFormat(instancesFormat)
              .setGcsSource(gcsSource)
              .build();
      GcsDestination gcsDestination =
          GcsDestination.newBuilder().setOutputUriPrefix(gcsDestinationOutputUriPrefix).build();
      BatchPredictionJob.OutputConfig outputConfig =
          BatchPredictionJob.OutputConfig.newBuilder()
              .setPredictionsFormat(predictionsFormat)
              .setGcsDestination(gcsDestination)
              .build();
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-2")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_T4)
              .setAcceleratorCount(1)
              .build();
      BatchDedicatedResources dedicatedResources =
          BatchDedicatedResources.newBuilder()
              .setMachineSpec(machineSpec)
              .setStartingReplicaCount(1)
              .setMaxReplicaCount(1)
              .build();
      String modelName = ModelName.of(project, location, model).toString();
      BatchPredictionJob batchPredictionJob =
          BatchPredictionJob.newBuilder()
              .setDisplayName(displayName)
              .setModel(modelName)
              .setModelParameters(modelParameters)
              .setInputConfig(inputConfig)
              .setOutputConfig(outputConfig)
              .setDedicatedResources(dedicatedResources)
              .build();
      LocationName parent = LocationName.of(project, location);
      BatchPredictionJob response = client.createBatchPredictionJob(parent, batchPredictionJob);
      System.out.format("response: %s\n", response);
      System.out.format("\tName: %s\n", response.getName());
    }
  }
}

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.

def create_batch_prediction_job_dedicated_resources_sample(
    project: str,
    location: str,
    model_resource_name: str,
    job_display_name: str,
    gcs_source: Union[str, Sequence[str]],
    gcs_destination: str,
    instances_format: str = "jsonl",
    machine_type: str = "n1-standard-2",
    accelerator_count: int = 1,
    accelerator_type: Union[str, aiplatform_v1.AcceleratorType] = "NVIDIA_TESLA_K80",
    starting_replica_count: int = 1,
    max_replica_count: int = 1,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    my_model = aiplatform.Model(model_resource_name)

    batch_prediction_job = my_model.batch_predict(
        job_display_name=job_display_name,
        gcs_source=gcs_source,
        gcs_destination_prefix=gcs_destination,
        instances_format=instances_format,
        machine_type=machine_type,
        accelerator_count=accelerator_count,
        accelerator_type=accelerator_type,
        starting_replica_count=starting_replica_count,
        max_replica_count=max_replica_count,
        sync=sync,
    )

    batch_prediction_job.wait()

    print(batch_prediction_job.display_name)
    print(batch_prediction_job.resource_name)
    print(batch_prediction_job.state)
    return batch_prediction_job

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 Quellprojekts
    • SOURCE_DATASET_NAME: Name des BigQuery-Quelldatasets
    • SOURCE_TABLE_NAME: Name der BigQuery-Quelltabelle
    • DESTINATION_PROJECT_ID: ID des Google Cloud Zielprojekts
    • DESTINATION_DATASET_NAME: Name des BigQuery-Ziel-Datasets
    • DESTINATION_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.

Notebooks

Nächste Schritte