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
.
- Se scegli di utilizzare una risorsa di versione per le previsioni in batch, devi creare la versione con il tipo di macchina
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
oresearch
) o per fase di sviluppo (prod
otest
). Per aggiungere etichette al job di previsione, fornisci un elenco diKEY=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.
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'
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:
Prepara il corpo della richiesta da utilizzare per la chiamata (questo viene mostrato nel sezione precedente).
Forma la richiesta chiamando ml.projects.jobs.create.
Chiama execute sulla richiesta per ricevere una risposta, assicurandoti di controllare gli errori HTTP.
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:
Vai alla pagina dei job di previsione di AI Platform nella console Google Cloud:
Fai clic sul nome del job nell'elenco ID job. Si apre Pagina Dettagli job.
Lo stato attuale viene mostrato con il nome del job nella parte superiore della pagina.
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
- Utilizza la previsione online.
- Leggi ulteriori dettagli sul processo di previsione.
- Risolvi i problemi che si verificano quando richiedi previsioni online.
- Scopri come utilizzare le etichette per organizzare i job.