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-Batchvorhersagejobs starten.

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

Vorbereitung

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

  • Erstellen Sie mit AI Platform eine Modellressource und -version oder platzieren Sie ein TensorFlow SavedModel an einem Cloud-Speicherort, auf den Ihr Projekt zugreifen kann.

  • 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 einzigen Sternchenplatzhalter, um alle Dateien in diesem Verzeichnis anzugeben: 'gs://path/to/my/input/*'.

  • Pfade zu partiellen Dateinamen mit einem einzigen 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, die Sie in Python auflisten. Wenn Sie das Befehlszeilentool gcloud 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. Wenn Sie möchten, können Sie den Cloud Storage-Pfad für ein nicht bereitgestelltes SavedModel verwenden, den sogenannten Modell-URI.

Modell-URI

Sie können Vorhersagen von einem Modell erhalten, das nicht auf AI Platform 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 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 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-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.
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-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 auf AI Platform bereitgestellt werden. 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, um Konfigurationsdaten aufzunehmen.

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"

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 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 Text der Vorhersageanfrage 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

Zum Senden des Jobs rufen Sie einfach projects.jobs.create oder das Äquivalent des Befehlszeilentools, gcloud ml-engine jobs submit prediction, auf.

gcloud

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

gcloud ml-engine 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.

Sie können die Google APIs-Clientbibliothek für Python verwenden, um die AI Platform API für Training und Vorhersagen aufzurufen, ohne manuell HTTP-Anforderungen zu erstellen. 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 Platform Console können Sie den Fortschritt des Jobs überwachen:

  1. Wechseln Sie zur Seite "AI Platform-Jobs" in der Google Cloud Platform Console:

    Zur Seite "Jobs" der GCP 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 Stackdriver Logging anzeigen zu lassen.

Es gibt noch andere Möglichkeiten, um 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.

  • Dateien mit dem Namen prediction.results-NNNNN-of-NNNNN enthalten die Vorhersagen selbst, wie von der 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.

Vorhersageergebnisse werden als JSON-Objekte in Textdateien formatiert. Sie können sie in einem Texteditor Ihrer Wahl öffnen. Sie können gsutil cat ausführen, um über die Befehlszeile einen schnellen Blick darauf zu werfen:

gsutil 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, selbst 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

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

AI Platform für TensorFlow