Batchvorhersagenvon einem benutzerdefinierten trainierten Modell abrufen

Auf dieser Seite erfahren Sie, wie Sie mithilfe der Google Cloud Console oder der Vertex AI API Batchvorhersagen aus Ihren benutzerdefiniert trainierten Modellen abrufen.

Für eine Batchvorhersage geben Sie eine Eingabequelle und einen Ausgabespeicherort an, entweder Cloud Storage oder BigQuery, wobei Vertex AI die Ergebnisse der Batchvorhersage speichert.

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.

Anforderungen an Eingabedaten

Die Eingabe für Batchanfragen gibt die Elemente an, die zur Vorhersage 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 Vorhersagen 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 Vorhersagecontainer 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 Vorhersagecontainer 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 Vorhersagecontainer 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 Vorhersagecontainer 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 Vorhersagecontainer 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 Vorhersagecontainer 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 Batchvorhersagen 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 Vorhersagecontainer 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 Vorhersagecontainer 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 Vorhersagecontainer 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"
Integer Integer 1
Gleitkommazahl Gleitkommazahl 1.2
Numerisch Gleitkommazahl 4925.000000000
Boolesch Boolesch wahr
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}

Partitionsdaten

Die Batchvorhersage verwendet MapReduce, um die Eingabe auf jedes Replikat zu fragmentieren. Um die MapReduce-Funktionen nutzen zu können, sollte 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, die CSV-Eingabe für Anwendungen zu verwenden, die einen Durchsatz erfordern.

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 Vorhersageanfrage ausschließen oder nur einen Teil der Felder aus den Eingabedaten in Ihrer Vorhersageanfrage einschließen, ohne dass benutzerdefinierte Vor-/Nachverarbeitung im Vorhersagecontainer 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 Vorhersagecontainer 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 Vorhersageanfrage 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 Batchvorhersage mit einem benutzerdefiniertes Modell und mit Featurefilterung.

Eine Batchvorhersage anfordern

Für Batchvorhersageanfragen können Sie die Google Cloud Console oder die Vertex AI API verwenden. Abhängig von der Anzahl der Eingabeelemente, die Sie eingereicht haben, kann die Batchvorhersage eine Weile dauern.

Wenn Sie eine Batchvorhersage anfordern, wird der Vorhersagecontainer als vom Nutzer bereitgestelltes benutzerdefiniertes Dienstkonto ausgeführt. Die Lese-/Schreibvorgänge, z. B. das Lesen der Vorhersageinstanzen aus der Datenquelle oder das Schreiben der Vorhersageergebnisse, 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 Batchvorhersage anzufordern.

  1. Rufen Sie in der Google Cloud Console im Abschnitt 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 Batchvorhersage ein.

    2. Wählen Sie für Modellname den Namen des Modells aus, das für diese Batchvorhersage 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 den von Google verwalteten Verschlüsselungsschlüssel auswä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 Batchvorhersageausgabe speichern soll.

    5. Sie können optional Featureattributionen für dieses Modell aktivieren anklicken, um Featureattributionen als Teil der Batchvorhersageantwort 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 Batchvorhersagejob fest: Anzahl der Computing-Knoten, Maschinentyp und (optional) Beschleunigertyp und Beschleunigeranzahl.

  3. Optional: Die Model Monitoring-Analyse für Batchvorhersagen ist in der Vorschau verfügbar. Informationen für das Hinzufügen einer Konfiguration zur Abweichungserkennung zu Ihrem Batchvorhersagejob 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 zum Senden von Batchvorhersageanfragen. Wählen Sie einen Tab aus, je nachdem, mit welchem Tool Sie Batchvorhersagen 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 in etwa folgende JSON-Antwort 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 Referenzdokumentation zur Python API.

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 wird Cloud Storage als Quelle und 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-Quell-Datasets
    • 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 Batchvorhersageanfragen 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 als bei Verwendung größerer Maschinentypen verbessert.

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 Batchvorhersagejob 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. Für 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))

Wobei:

  • 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 Batchvorhersagejob. 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.

Im Gegensatz zur Onlinevorhersage werden Batchvorhersagejobs 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. Sie bieten nicht unbedingt für jedes Modell einen optimalen Durchsatz. Sie liefern keine genauen Vorhersagen 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 vorhergehenden Richtlinien (die auch nur für CPU-Modelle gelten), und beachten Sie folgende zusätzliche Ü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 Batchvorhersagejob längere Zeiten (z. B. mindestens 20 Minuten anstelle von 10 Minuten) einplanen, damit eine angemessener Menge Zeit und Kosten für die Generierung von Vorhersagen genutzt wird.

Batchvorhersageergebnisse abrufen

Wenn eine Batchvorhersage abgeschlossen ist, wird die Ausgabe der Vorhersage in dem Cloud Storage-Bucket oder BigQuery-Speicherort gespeichert, den Sie in Ihrer Anfrage angegeben haben.

Beispiel für ein Batchvorhersageergebnis

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 Batchvorhersagen unbestimmt.

Jede Zeile in der Datei entspricht einer Instanz aus der Eingabe und hat die folgenden Schlüssel/Wert-Paare:

  • prediction: Enthält den vom Vorhersagecontainer 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 Vorhersagecontainer im HTTP-Anfragetext gesendet wurde.

Beispiel 1

Wenn die HTTP-Anfrage Folgendes enthält:

{
  "instances": [
    [1, 2, 3, 4],
    [5, 6, 7, 8]
]}

Und der Vorhersagecontainer Folgendes zurückgibt:

{
  "predictions": [
    [0.1,0.9],
    [0.7,0.3]
  ],
}

Dann ist 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}
]}

Und der Vorhersagecontainer Folgendes zurückgibt:

{
  "predictions": [
    {"result":1},
    {"result":0}
  ],
}

Dann ist 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 raten davon ab, funktionsbasierte Erläuterungen für große Datenmengen auszuführen. Dies liegt daran, dass jede Eingabe basierend auf der Menge der möglichen Merkmalswerte potenziell zu Tausenden von Anfragen führen kann, was zu einer deutlich erhöhten Verarbeitungszeit und höheren Kosten führen kann. Im Allgemeinen reicht ein kleines Dataset aus, um die Merkmalwichtigkeit zu verstehen.

Die Batchvorhersage unterstützt keine beispielbasierten Erläuterungen.

Nächste Schritte