Richiedere previsioni batch

Quando non ti servono subito le previsioni o quando disponi di un numero elevato di istanze per le quali ottenere previsioni, puoi usare il servizio di previsione batch. Questa pagina descrive come avviare i job di previsione batch di AI Platform Prediction. AI Platform Prediction supporta solo l'ottenimento di previsioni batch dai modelli TensorFlow.

Informazioni su previsione online e batch o leggi un panoramica dei concetti di previsione.

Prima di iniziare

Per richiedere previsioni, devi prima:

  • Crea una risorsa del modello e una versione risorsa o metti un SavedModel di TensorFlow da una località di Cloud Storage a cui può accedere il tuo progetto.

    • Se scegli di utilizzare una risorsa di versione per le previsioni in batch, devi creare la versione con il tipo di macchina mls1-c1-m2.
  • Configura una località di Cloud Storage a cui ha accesso il tuo progetto per:

    • File di dati di input. Può trattarsi di più località e il progetto deve di avere l'autorizzazione a leggere.

    • File di output. Puoi specificare un solo percorso di output e il progetto deve l'autorizzazione a scrivere dati al suo interno.

  • Verifica che il file di input si trovi nel formato corretto per la previsione batch.

Configurazione di un job di previsione batch

Per avviare il job di previsione batch, è necessario raccogliere alcune configurazioni e i dati di Google Cloud. Si tratta degli stessi dati contenuti nell'oggetto PredictionInput che utilizzi quando chiami direttamente l'API:

Formato dei dati

Il tipo di formato di input utilizzato per i file di input. Tutti i tuoi input per un determinato job devono usare lo stesso formato dati. Imposta su uno di questi valori:

JSON

I file di input sono in testo normale con un'istanza su ogni riga. Questo è il formato descritti nella pagina dei concetti di previsione.

TF_RECORD

I file di input utilizzano il formato TFRecord di TensorFlow.

TF_RECORD_GZIP

I file di input sono file TFRecord compressi con GZIP.

Percorsi di input

Gli URI dei file di dati di input, che devono trovarsi in Cloud Storage luoghi. Puoi specificare:

  • Percorsi di file specifici: 'gs://path/to/my/input/file.json'.

  • Percorsi delle directory con un singolo carattere jolly asterisco, per indicare tutte file in quella directory: 'gs://path/to/my/input/*'.

  • Percorsi di nomi file parziali con un singolo carattere jolly asterisco alla fine, per indicare tutti i file che iniziano con la sequenza fornita: 'gs://path/to/my/input/file*'.

Puoi combinare più URI. In Python, crei un elenco di queste funzionalità. Se utilizzi Google Cloud CLI o di chiamare direttamente l'API, puoi elencare più URI, separati da virgole, ma senza spazi. Questo è il formato corretto per l'indicatore --input-paths:

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

Il percorso della posizione Cloud Storage in cui vuoi che il servizio di previsione salvi i risultati. Il progetto deve disporre delle autorizzazioni di scrittura in questa posizione.

Nome modello e nome versione

Il nome del modello e, facoltativamente, la versione da ottenere le previsioni. Se non specifichi una versione, il valore predefinito . Per la previsione batch, la versione deve utilizzare mls1-c1-m2 macchina predefinito.

Se fornisci un URI del modello (vedi la sezione seguente), ometti questi campi.

URI del modello

Puoi ottenere previsioni da un modello di cui non è stato eseguito il deployment AI Platform Prediction specificando l'URI del SavedModel che vuoi per gli utilizzi odierni. Il SavedModel deve essere archiviato su Cloud Storage.

In sintesi, hai tre opzioni per specificare il modello da utilizzare per la previsione batch. Puoi utilizzare:

  • Il nome del modello da solo per utilizzare la versione predefinita del modello.

  • I nomi del modello e delle versioni per utilizzare una specifica versione del modello.

  • L'URI del modello per utilizzare un modello SavedModel su Cloud Storage, ma non di cui è stato eseguito il deployment in Previsione di AI Platform.

Regione

La regione Google Compute Engine in cui vuoi eseguire il job. Per ottenere prestazioni ottimali, devi eseguire il job di previsione e archiviare di input e output nella stessa regione, soprattutto per i dati e set di dati. La previsione batch di AI Platform Prediction è disponibile in nelle seguenti regioni:

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

Per comprendere appieno le regioni disponibili per Servizi di AI Platform Prediction, tra cui l'addestramento di modelli e per la previsione, leggi la guida alle regioni.

Nome job

Un nome per il job, che deve:

  • Contenere solo lettere maiuscole e minuscole, numeri e trattini bassi.
  • Inizia con una lettera.
  • Non contenere più di 128 caratteri.
  • Essere univoci tra tutti i nomi di job di addestramento e previsione batch mai utilizzati in del progetto. Sono inclusi tutti i job creati nel progetto, indipendentemente dal successo o dallo stato.
Dimensione del batch (facoltativa)

Il numero di record per batch. Il servizio memorizzerà il numero di record batch_size nel buffer prima di richiamare il modello. Se non specificato, il valore predefinito è 64.

Etichette (facoltative)

Puoi aggiungere etichette al job per organizzare e ordinare i job in categorie durante la visualizzazione o il monitoraggio delle risorse. Ad esempio, puoi ordinare i job per team (aggiungendo etichette come engineering o research) o per fase di sviluppo (prod o test). Per aggiungere etichette al job di previsione, fornisci un elenco di KEY=VALUE coppie.

Numero massimo di worker (facoltativo)

Il numero massimo di nodi di previsione da utilizzare nel cluster di elaborazione per questo job. Questo è il modo per porre un limite massimo alla scalabilità automatica di previsione batch. Se non specifichi un valore, il valore predefinito è 10. Indipendentemente dal valore specificato, la scalabilità è limitata quota del nodo di previsione.

Versione runtime (facoltativa)

La versione di AI Platform Prediction da utilizzare per il job. Questa opzione è inclusa per consentirti di specificare la versione runtime da utilizzare con i modelli di cui non è stato eseguito il deployment AI Platform Prediction. Devi sempre omettere questo valore per le versioni del modello di cui è stato eseguito il deployment, in modo da indicare al servizio di utilizzare la stessa versione specificata al momento del deployment.

(Facoltativo) Nome della firma

Se il modello salvato ha più firme, utilizza questa opzione per specificare un nome di firma TensorFlow personalizzato, che consente di selezionare una mappa alternativa di input/output definita nel SavedModel di TensorFlow. Consulta la documentazione di TensorFlow SavedModel una guida all'uso delle firme e una guida per specificare output di un modello personalizzato. L'impostazione predefinita è DEFAULT_SERVING_SIGNATURE_DEF_KEY, che ha il valore serving_default.

Gli esempi seguenti definiscono le variabili in cui conservare i dati di configurazione.

gcloud

Non è necessario creare variabili quando utilizzi la riga di comando gcloud per avviare un job. In questo caso, però, il comando di invio del job molto più facile da inserire e leggere.

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

Quando utilizzi la libreria client dell'API di Google per Python, puoi utilizzare i dizionari Python per rappresentare le risorse Job e PredictionInput.

  1. Formatta il nome del progetto e il nome del modello o della versione con la sintassi utilizzata dalle API REST AI Platform Prediction:

    • nome_progetto -> 'projects/project_name'
    • model_name -> 'projects/project_name/models/model_name'
    • nome_versione -> 'projects/project_name/models/model_name/versions/version_name'
  2. Crea un dizionario per la risorsa Job e compilalo con due elementi:

    • Una chiave denominata 'jobId' con il nome del job che vuoi utilizzare come valore.

    • Una chiave denominata 'predictionInput' che contiene un altro oggetto dizionario che ospita tutti i membri richiesti PredictionInput, ed eventuali membri facoltativi che vuoi utilizzare.

    L'esempio seguente mostra una funzione che prende la configurazione come variabili di input e restituisce il corpo della richiesta di previsione. Oltre alle nozioni di base, l'esempio genera anche un job unico basato sul nome del progetto, sul nome del modello e sull'ora attuale.

    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
    

Invio di un job di previsione batch

Inviare il job è una semplice chiamata projects.jobs.create o equivalente allo strumento a riga di comando, gcloud ai-platform job send Prediction.

gcloud

L'esempio seguente utilizza le variabili definite nella sezione precedente per per avviare la previsione batch.

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

Avvio di un job di previsione batch con la libreria client dell'API di Google per Python segue uno schema simile ad altre procedure relative all'SDK del client:

  1. Prepara il corpo della richiesta da utilizzare per la chiamata (questo viene mostrato nel sezione precedente).

  2. Forma la richiesta chiamando ml.projects.jobs.create.

  3. Chiama execute sulla richiesta per ricevere una risposta, assicurandoti di controllare gli errori HTTP.

  4. Utilizza la risposta come dizionario per recuperare i valori dalla risorsa Job.

Puoi utilizzare lo Libreria client dell'API di Google per Python chiamare l'API AI Platform Training and Prediction senza creare manualmente HTTP richieste. Prima di eseguire il seguente esempio di codice, devi configurare autenticazione.

    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())

Monitoraggio del job di previsione batch

Il completamento di un job di previsione batch può richiedere molto tempo. Puoi monitorare avanzamento del job utilizzando la console Google Cloud:

  1. Vai alla pagina dei job di previsione di AI Platform nella console Google Cloud:

    Vai alla pagina Job della console Google Cloud

  2. Fai clic sul nome del job nell'elenco ID job. Si apre Pagina Dettagli job.

  3. Lo stato attuale viene mostrato con il nome del job nella parte superiore della pagina.

  4. Se vuoi maggiori dettagli, puoi fare clic su Visualizza log per visualizzare i dati in Cloud Logging.

Esistono altri modi per monitorare l'avanzamento del job di previsione batch. Loro gli stessi pattern del monitoraggio dei job di addestramento. Puoi trovare maggiori informazioni nella pagina che descrive come monitorare i job di addestramento. Per lavorare con la previsione, potresti dover modificare leggermente le istruzioni lì riportate di lavoro, ma i meccanismi sono gli stessi.

Recupero dei risultati delle previsioni

Il servizio scrive le previsioni nella località di Cloud Storage specificata. Esistono due tipi di file di output che potrebbero includere risultati interessanti:

  • I file denominati prediction.errors_stats-NNNNN-of-NNNNN contengono informazioni su eventuali problemi riscontrati durante il job.

  • File JSON Lines denominati prediction.results-NNNNN-of-NNNNN contengono le previsioni come definito dall'output del modello.

I nomi file includono numeri di indice (indicati sopra con una "N" per ogni cifra) che e registrare quanti file dovresti trovare in totale. Ad esempio, un job con sei i file dei risultati includono da prediction.results-00000-of-00006 a prediction.results-00005-of-00006.

Ogni riga di ciascun file di previsione è un oggetto JSON che rappresenta un singolo risultato della previsione. Puoi aprire i file di previsione con l'editor di testo che preferisci. Per dare un'occhiata veloce alla riga di comando possono usare gcloud storage cat:

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

Ricorda che i risultati della previsione solitamente non vengono restituiti nello stesso ordine. come istanze di input, anche se utilizzi un solo file di input. Puoi visualizzare la previsione per un'istanza mediante la corrispondenza chiavi delle istanze.

Passaggi successivi