Batchvorhersagen abrufen

Wenn Sie Ihre Vorhersagen nicht sofort benötigen oder eine große Anzahl von Instanzen haben, für die Vorhersagen abzurufen sind, können Sie den Batchvorhersagedienst verwenden. Auf dieser Seite wird beschrieben, wie Sie AI Platform Prediction-Batchvorhersagejobs starten. AI Platform Prediction unterstützt nur das Abrufen von Batchvorhersagen aus TensorFlow-Modellen.

Informationen finden Sie unter Onlinevorhersage im Vergleich mit Batchvorhersage und Vorhersageübersicht.

Vorbereitung

Sie müssen zuerst folgende Schritte ausführen, um Vorhersagen anzufordern:

  • Erstellen Sie eine Modell- und eine Versionsressource oder platzieren Sie ein TensorFlow-SavedModel an einem Cloud Storage-Speicherort, auf den Ihr Projekt zugreifen kann.

    • Wenn Sie eine Versionsressource für die Batchvorhersage verwenden möchten, müssen Sie die Version mit dem Maschinentyp mls1-c1-m2 erstellen.
  • Richten Sie einen Cloud Storage-Speicherort ein, auf den das Projekt für Folgendes zugreifen kann:

    • Eingabedatendateien. Hierfür können mehrere Speicherorte verwendet werden. Das Projekt muss autorisiert sein, aus jedem dieser Speicherorte Daten zu lesen.

    • Ausgabedateien. Sie können nur einen Ausgabepfad angeben. Außerdem muss das Projekt autorisiert sein, Daten in diesen Pfad zu schreiben.

  • Achten Sie darauf, dass die Eingabedatei das richtige Format für Batchvorhersagen hat.

Batchvorhersagejob konfigurieren

Es müssen verschiedene Konfigurationsdaten eingeholt werden, um einen Batchvorhersagejob zu starten. Dies sind dieselben Daten, die sich im Objekt PredictionInput befinden, das Sie beim direkten Aufruf der API verwenden:

Datenformat

Das Eingabeformat, das Sie für die Eingabedateien verwenden. Alle Eingabedateien für einen bestimmten Job müssen im selben Datenformat vorliegen. Legen Sie einen der folgenden Werte fest:

JSON

Die Eingabedateien sind Nur-Text-Dateien mit einer Instanz pro Zeile. Dies ist das auf der Seite mit den Vorhersagekonzepten beschriebene Format.

TF_RECORD

Die Eingabedateien haben das Format TFRecord von TensorFlow.

TF_RECORD_GZIP

Die Eingabedateien sind mit GZIP komprimierte TFRecord-Dateien.

Eingabepfade

Die URIs der Eingabedatendateien, die sich in Cloud Storage-Speicherorten befinden müssen. Sie können Folgendes angeben:

  • Pfade zu bestimmten Dateien: 'gs://path/to/my/input/file.json'

  • Pfade zu Verzeichnissen mit einem einzelnen Sternchenplatzhalter, um alle Dateien in diesem Verzeichnis anzugeben: 'gs://path/to/my/input/*'

  • Pfade zu partiellen Dateinamen mit einem einzelnen Sternchenplatzhalter am Ende, um alle Dateien anzugeben, die mit der festgelegten Sequenz beginnen: 'gs://path/to/my/input/file*'

Sie können mehrere URIs kombinieren. Diese listen Sie in Python auf. Wenn Sie Google Cloud CLI verwenden oder die API direkt aufrufen, können Sie mehrere URIs durch Kommas getrennt und ohne Leerzeichen dazwischen auflisten. Dies ist das richtige Format für das Flag --input-paths:

 --input-paths gs://a/directory/of/files/*,gs://a/single/specific/file.json,gs://a/file/template/data*
Ausgabepfad

Der Pfad zum Google Cloud Storage-Speicherort, an dem der Vorhersagedienst die Ergebnisse speichern soll. Das Projekt muss die Berechtigung zum Schreiben in diesen Speicherort haben.

Modellname und Versionsname

Der Name des Modells und optional die Version, für das bzw. die Sie Vorhersagen erhalten möchten. Wenn Sie keine Version angeben, wird die Standardversion des Modells verwendet. Für die Batchvorhersage muss in der Version der Maschinentyp mls1-c1-m2 verwendet werden.

Wenn Sie einen Modell-URI wie im folgenden Abschnitt beschrieben angeben, lassen Sie diese Felder weg.

Modell-URI

Sie können Vorhersagen von einem Modell erhalten, das nicht in AI Platform Prediction bereitgestellt wird, indem Sie den URI des gespeicherten Modells angeben, das Sie verwenden möchten. Das SavedModel muss in Cloud Storage gespeichert sein.

Zusammengefasst bedeutet dies, dass Sie drei Möglichkeiten zur Angabe des Modells haben, das für die Batchvorhersage zu verwenden ist. Sie können Folgendes angeben:

  • Den Namen des Modells selbst, um die Standardversion des Modells zu verwenden.

  • Die Namen des Modells und der Version, um eine bestimmte Modellversion zu verwenden.

  • Den Modell-URI zur Verwendung eines SavedModels, das sich in Cloud Storage befindet, jedoch nicht in AI Platform Prediction bereitgestellt ist.

Region

Die Google Compute Engine-Region, in der Sie Ihren Job ausführen möchten. Sie erzielen insbesondere bei sehr großen Datasets die beste Leistung, wenn die Ausführung des Vorhersagejobs und die Speicherung der Eingabe- und Ausgabedaten in derselben Region erfolgen. Die Batchvorhersagen von AI Platform Prediction sind in den folgenden Regionen verfügbar:

  -   us-central1
  -   us-east1
  -   europe-west1
  -   asia-east1

Mehr Informationen zu den verfügbaren Regionen für AI Platform Prediction-Dienste, einschließlich Modelltraining und Onlinevorhersagen, finden Sie im Leitfaden für Regionen.

Jobname

Ein Name für den Job, für den Folgendes gilt:

  • Er darf nur Buchstaben (unter Berücksichtigung der Groß-/Kleinschreibung), Ziffern und Unterstriche enthalten.
  • Er muss mit einem Buchstaben beginnen.
  • Er darf nicht mehr als 128 Zeichen enthalten.
  • Er muss unter allen Namen für Trainings- und Batchvorhersagejobs, die je im Projekt verwendet wurden, eindeutig sein. Dazu gehören alle Jobs, die Sie im Projekt erstellt haben, unabhängig davon, ob sie erfolgreich verliefen oder welchen Status sie haben.
Batch-Größe (optional)

Die Anzahl der Datensätze pro Batch. Der Dienst puffert die batch_size-Anzahl der Datensätze im Arbeitsspeicher, bevor das Modell aufgerufen wird. Wenn keine Angabe gemacht wird, ist der Standardwert 64.

Labels (optional)

Sie können Ihrem Job Labels hinzufügen, um Jobs beim Anzeigen oder Monitoring von Ressourcen in Kategorien zu organisieren und zu sortieren. Sie können Jobs beispielsweise nach Team (durch Hinzufügen von Labels wie engineering oder research) oder nach Entwicklungsphase (prod oder test) sortieren. Geben Sie eine Liste mit KEY=VALUE-Paaren an, um Ihrem Vorhersagejob Labels hinzuzufügen.

Maximale Anzahl der Worker (optional)

Die maximale Anzahl von Vorhersageknoten, die im Verarbeitungscluster für diesen Job verwendet werden sollen. Damit haben Sie die Möglichkeit, ein oberes Limit für die Funktion zur automatischen Skalierung von Batchvorhersagen festzulegen. Wenn Sie keinen Wert angeben, wird die Anzahl standardmäßig auf 10 festgelegt. Unabhängig von dem von Ihnen angegebenen Wert wird die Skalierung durch das Kontingent für Vorhersagenknoten begrenzt.

Laufzeitversion (optional)

Die AI Platform Prediction-Version, die für den Job verwendet werden soll. Diese Option ist enthalten, damit Sie eine Laufzeitversion angeben können, die mit Modellen verwendet werden soll, die nicht in AI Platform Prediction bereitgestellt sind. Für bereitgestellte Modellversionen sollten Sie diesen Wert immer weglassen. Damit wird dem Dienst signalisiert, dass dieselbe Version zu verwenden ist, die bei Bereitstellung der Modellversion angegeben wurde.

Signaturname (optional)

Wenn das gespeicherte Modell mehrere Signaturen hat, können Sie mit dieser Option einen benutzerdefinierten TensorFlow-Signaturnamen festlegen. Sie haben dann die Möglichkeit, eine alternative Eingabe-/Ausgabe-Zuordnung auszuwählen, die im TensorFlow-SavedModel definiert ist. In der TensorFlow-Dokumentation zu SavedModel finden Sie eine Anleitung zum Verwenden von Signaturen und zum Festlegen der Ausgaben eines benutzerdefinierten Modells. Die Standardeinstellung ist DEFAULT_SERVING_SIGNATURE_DEF_KEY mit dem Wert serving_default.

In den folgenden Beispielen werden Variablen definiert, die Konfigurationsdaten aufnehmen.

gcloud

Bei der Verwendung des Befehlszeilentools gcloud müssen zum Starten eines Jobs keine Variablen erstellt werden. Wenn Sie es allerdings doch tun, lässt sich der Befehl zum Senden des Jobs viel einfacher eingeben und lesen.

DATA_FORMAT="text" # JSON data format
INPUT_PATHS='gs://path/to/your/input/data/*'
OUTPUT_PATH='gs://your/desired/output/location'
MODEL_NAME='census'
VERSION_NAME='v1'
REGION='us-east1'
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="census_batch_predict_$now"
MAX_WORKER_COUNT="20"
BATCH_SIZE="32"
LABELS="team=engineering,phase=test,owner=sara"

Python

Wenn Sie die Google APIs-Clientbibliothek für Python verwenden, können Sie die Ressourcen Job und PredictionInput mithilfe von Python-Wörterbüchern darstellen.

  1. Formatieren Sie den Projektnamen und den Modell- oder Versionsnamen in der Syntax, die von den AI Platform Prediction REST APIs verwendet wird:

    • project_name -> 'projects/project_name'
    • model_name -> 'projects/project_name/models/model_name'
    • version_name -> 'projects/project_name/models/model_name/versions/version_name'
  2. Erstellen Sie ein Wörterbuch für die Jobressource und fügen Sie diesem zwei Elemente hinzu:

    • Einen Schlüssel namens 'jobId' mit dem zu verwendenden Jobnamen als Wert

    • Einen Schlüssel namens 'predictionInput', der ein anderes Wörterbuchobjekt mit allen erforderlichen Mitgliedern von PredictionInput und allen optionalen Mitgliedern enthält, die Sie verwenden möchten

    Im folgenden Beispiel wird eine Funktion gezeigt, die die Konfigurationsinformationen als Eingabevariablen empfängt und den Vorhersageanfragetext zurückgibt. Neben den grundlegenden Elementen generiert das Beispiel außerdem eine eindeutige Jobkennung basierend auf dem Projektnamen, dem Modellnamen und der aktuellen Uhrzeit.

    import time
    import re
    
    def make_batch_job_body(project_name, input_paths, output_path,
            model_name, region, data_format='JSON',
            version_name=None, max_worker_count=None,
            runtime_version=None):
    
        project_id = 'projects/{}'.format(project_name)
        model_id = '{}/models/{}'.format(project_id, model_name)
        if version_name:
            version_id = '{}/versions/{}'.format(model_id, version_name)
    
        # Make a jobName of the format "model_name_batch_predict_YYYYMMDD_HHMMSS"
        timestamp = time.strftime('%Y%m%d_%H%M%S', time.gmtime())
    
        # Make sure the project name is formatted correctly to work as the basis
        # of a valid job name.
        clean_project_name = re.sub(r'\W+', '_', project_name)
    
        job_id = '{}_{}_{}'.format(clean_project_name, model_name,
                               timestamp)
    
        # Start building the request dictionary with required information.
        body = {'jobId': job_id,
                'predictionInput': {
                    'dataFormat': data_format,
                    'inputPaths': input_paths,
                    'outputPath': output_path,
                    'region': region}}
    
        # Use the version if present, the model (its default version) if not.
        if version_name:
            body['predictionInput']['versionName'] = version_id
        else:
            body['predictionInput']['modelName'] = model_id
    
        # Only include a maximum number of workers or a runtime version if specified.
        # Otherwise let the service use its defaults.
        if max_worker_count:
            body['predictionInput']['maxWorkerCount'] = max_worker_count
    
        if runtime_version:
            body['predictionInput']['runtimeVersion'] = runtime_version
    
        return body
    

Batchvorhersagejob senden

Jobs werden gesendet, indem projects.jobs.create oder das Äquivalent des Befehlszeilentools, gcloud ai-platform jobs submit prediction, aufgerufen wird.

gcloud

Im folgenden Beispiel werden die im vorherigen Abschnitt definierten Variablen zum Starten der Batchvorhersage verwendet.

gcloud ai-platform jobs submit prediction $JOB_NAME \
    --model $MODEL_NAME \
    --input-paths $INPUT_PATHS \
    --output-path $OUTPUT_PATH \
    --region $REGION \
    --data-format $DATA_FORMAT

Python

Beim Starten eines Batchvorhersagejobs mit der Google APIs-Clientbibliothek für Python gehen Sie ähnlich wie bei anderen Client SDK-Vorgängen vor:

  1. Bereiten Sie den Anfragetext vor, der für den Aufruf verwendet werden soll (dies wurde im vorherigen Abschnitt gezeigt).

  2. Formulieren Sie die Anfrage durch Aufruf von "ml.projects.jobs.create".

  3. Rufen Sie "execute" für die Anfrage auf, um eine Antwort zu erhalten. Vergessen Sie nicht, eine Prüfung auf HTTP-Fehler durchzuführen.

  4. Verwenden Sie die Antwort als Wörterbuch, um Werte aus der Jobressource abzurufen.

Mit der Google API-Clientbibliothek für Java können Sie die AI Platform Training and Prediction API aufrufen, ohne manuell HTTP-Anfragen erstellen zu müssen. Bevor Sie das folgende Codebeispiel ausführen, müssen Sie die Authentifizierung einrichten.

    import googleapiclient.discovery as discovery

    project_id = 'projects/{}'.format(project_name)

    ml = discovery.build('ml', 'v1')
    request = ml.projects().jobs().create(parent=project_id,
                                          body=batch_predict_body)

    try:
        response = request.execute()

        print('Job requested.')

        # The state returned will almost always be QUEUED.
        print('state : {}'.format(response['state']))

    except errors.HttpError as err:
        # Something went wrong, print out some information.
        print('There was an error getting the prediction results.' +
              'Check the details:')
        print(err._get_reason())

Batchvorhersagejob überwachen

Die Ausführung eines Batchvorhersagejobs kann viel Zeit in Anspruch nehmen. In der Google Cloud Console können Sie den Fortschritt des Jobs verfolgen:

  1. Rufen Sie in der Cloud Console unter „AI Platform Prediction” die Seite „Jobs” auf:

    Zur Seite der Google Cloud Console.

  2. Klicken Sie in der Liste Job-ID auf den Namen Ihres Jobs. Damit wird die Seite Jobdetails geöffnet.

  3. Oben auf der Seite wird der aktuelle Status mit dem Jobnamen angezeigt.

  4. Wenn Sie weitere Details wünschen, können Sie auf Logs ansehen klicken, um sich den Eintrag des Jobs in Cloud Logging anzeigen zu lassen.

Es gibt noch andere Möglichkeiten, den Fortschritt des Batchvorhersagejobs zu verfolgen. Dabei gehen Sie genau wie bei der Überwachung von Trainingjobs vor. Weitere Informationen dazu finden Sie auf der Seite zur Überwachung von Trainingsjobs. Möglicherweise müssen Sie die dortigen Anleitungen leicht für Vorhersagejobs anpassen, die Vorgehensweise bleibt jedoch dieselbe.

Vorhersageergebnisse abrufen

Der Dienst schreibt Vorhersagen in den von Ihnen angegebenen Cloud Storage-Speicherort. Es gibt zwei Arten von Dateiausgaben, die interessante Ergebnisse enthalten können:

  • Dateien mit dem Namen prediction.errors_stats-NNNNN-of-NNNNN enthalten Informationen zu Problemen, die unter Umständen während des Jobs aufgetreten sind.

  • JSON-Zeilendateien mit dem Namen prediction.results-NNNNN-of-NNNNN enthalten die Vorhersagen selbst, wie durch die Ausgabe des Modells definiert.

Die Dateinamen umfassen Indexnummern (oben als "N" für jede Ziffer dargestellt), die darüber Aufschluss geben, wie viele Dateien Sie insgesamt vorfinden sollten. Ein Job mit sechs Ergebnisdateien enthält beispielsweise prediction.results-00000-of-00006 bis prediction.results-00005-of-00006.

Jede Zeile jeder Vorhersagedatei ist ein JSON-Objekt, das ein einzelnes Vorhersageergebnis darstellt. Sie können die Vorhersagedateien mit einem beliebigen Texteditor öffnen. Sie können gcloud storage cat ausführen, um über die Befehlszeile einen schnellen Blick darauf zu werfen:

gcloud storage cat $OUTPUT_PATH/prediction.results-NNNNN-of-NNNNN|less

Beachten Sie, dass die Vorhersageergebnisse nicht zwangsläufig in derselben Reihenfolge wie die Eingabeinstanzen ausgegeben werden, auch wenn Sie nur eine einzige Eingabedatei verwenden. Sie können die Vorhersage für eine Instanz ermitteln, indem Sie die Instanzschlüssel abgleichen.

Weiteres Vorgehen