Risoluzione dei problemi

Trovare la causa degli errori che si verificano durante l'addestramento del modello o l'ottenimento di predizioni nel cloud può essere difficile. Questa pagina descrive come trovare e risolvere i problemi riscontrati in AI Platform Training. Se riscontri problemi con il framework di machine learning che utilizzi, leggi la documentazione del framework di machine learning.

Strumento a riga di comando

ERROR: (gcloud) Invalid choice: 'ai-platform'.

Questo errore indica che devi aggiornare gcloud. Per aggiornare gcloud, esegui questo comando:

gcloud components update
ERROR: (gcloud) unrecognized arguments: --framework=SCIKIT_LEARN.

Questo errore indica che devi aggiornare gcloud. Per aggiornare gcloud, esegui il seguente comando:

gcloud components update
ERROR: (gcloud) unrecognized arguments: --framework=XGBOOST.

Questo errore indica che devi aggiornare gcloud. Per aggiornare gcloud, esegui il seguente comando:

gcloud components update
ERROR: (gcloud) Failed to load model: Could not load the model: /tmp/model/0001/model.pkl. '\\x03'. (Error code: 0)

Questo errore indica che è stata utilizzata la libreria sbagliata per esportare il modello. Per correggere esporta nuovamente il modello utilizzando la libreria corretta. Ad esempio, esportare i modelli del modulo model.pkl con la libreria pickle e i modelli del modulo model.joblib con la raccolta joblib.

ERROR: (gcloud.ai-platform.jobs.submit.prediction) argument --data-format: Invalid choice: 'json'.

Questo errore significa che hai specificato json come valore di --data-format per l'invio di un job di previsione batch. Per utilizzare i dati di JSON formato predefinito, devi specificare text come valore del flag --data-format.

Versioni di Python

ERROR: Bad model detected with error:  "Failed to load model: Could not load the
model: /tmp/model/0001/model.pkl. unsupported pickle protocol: 3. Please make
sure the model was exported using python 2. Otherwise, please specify the
correct 'python_version' parameter when deploying the model. Currently,
'python_version' accepts 2.7 and 3.5. (Error code: 0)"

Questo errore indica che è stato eseguito il deployment di un file del modello esportato con Python 3 in un Risorsa della versione del modello AI Platform Training con un'impostazione Python 2.7.

Per risolvere questo problema:

  • Crea una nuova risorsa di versione del modello e imposta "python_version" su 3.5.
  • Esegui il deployment dello stesso file del modello nella risorsa della nuova versione del modello.

Il comando virtualenv non è stato trovato

Se hai ricevuto questo errore quando hai tentato di attivare virtualenv, è possibile che è aggiungere la directory contenente virtualenv a $PATH variabile di ambiente. Se modifichi questa variabile puoi usare virtualenv senza dover digitare il percorso completo del file.

Innanzitutto, installa virtualenv eseguendo questo comando:

pip install --user --upgrade virtualenv

Il programma di installazione ti chiede di modificare la variabile di ambiente $PATH e fornisce il percorso allo script virtualenv. Su macOS, simile a /Users/[YOUR-USERNAME]/Library/Python/[YOUR-PYTHON-VERSION]/bin.

Apri il file in cui la shell carica le variabili di ambiente. In genere, si tratta di ~/.bashrc o ~/.bash_profile in macOS.

Aggiungi la seguente riga, sostituendo [VALUES-IN-BRACKETS] con i valori appropriati:

export PATH=$PATH:/Users/[YOUR-USERNAME]/Library/Python/[YOUR-PYTHON-VERSION]/bin

Infine, esegui questo comando per caricare il file .bashrc aggiornato (o .bash_profile):

source ~/.bashrc

Utilizzo dei log dei job

Un buon punto di partenza per la risoluzione dei problemi sono i log dei job acquisiti da Cloud Logging.

Logging per i diversi tipi di operazione

L’esperienza di registrazione varia in base al tipo di operazione, come illustrato in le sezioni seguenti.

Log di addestramento

Tutti i job di addestramento vengono registrati. I log includono gli eventi e dalla tua applicazione di addestramento. Puoi inserire eventi di logging nella tua applicazione con le librerie Python standard (registrazione, ad esempio). AI Platform Training acquisisce tutti i messaggi di log della tua applicazione. Tutti i messaggi inviati a stderr vengono acquisita automaticamente del job in Cloud Logging.

Log di previsione batch

Tutti i job di previsione batch vengono registrati.

Log di previsione online

Per impostazione predefinita, le richieste di previsione online non generano log. Puoi attivare Cloud Logging quando crei la risorsa del modello:

gcloud

Includi il flag --enable-logging quando esegui gcloud ai-platform models create

Python

Imposta onlinePredictionLogging su True nel Risorsa Model che utilizzi per la tua chiamata projects.models.create.

Trovare i log

I log dei job contengono tutti gli eventi relativi all'operazione, inclusi gli eventi di tutti i processi nel cluster quando utilizzi l'addestramento distribuito. Se stai eseguendo un job di addestramento distribuito, i log a livello di job vengono registrati per il processo del worker principale. In genere, il primo passaggio per la risoluzione di un errore consiste nell'esaminare i log relativi al processo, escludendo gli eventi registrati per altri processi nel cluster. Gli esempi in questa sezione mostrano questo tipo di filtro.

Puoi filtrare i log dalla riga di comando o dalla sezione Cloud Logging della console Google Cloud. In entrambi i casi, utilizza questi valori di metadati nel filtro in base alle esigenze:

Elemento metadati Filtra per visualizzare gli elementi in cui è…
resource.type Uguale a "cloud_ml_job".
resource.labels.job_id Uguale al nome del job.
resource.labels.task_name Uguale a "master-replica-0" per leggere solo le voci di log per il tuo worker master.
gravità Maggiore o uguale a ERROR per leggere solo le voci di log corrispondenti a condizioni di errore.

Riga di comando

Utilizza gcloud beta logging read per costruire una query che soddisfi le tue esigenze. Ecco alcuni esempi:

Ogni esempio si basa su queste variabili di ambiente:

PROJECT="my-project-name"
JOB="my_job_name"

Se preferisci, puoi inserire la stringa letterale in posizione.

Per stampare i log dei processi sullo schermo:
gcloud ai-platform jobs stream-logs $JOB

Consulta tutte le opzioni per gcloud ai-platform job stream-logs.

Per stampare il log del tuo worker principale sullo schermo:
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\""
Per stampare sullo schermo solo gli errori registrati per il tuo worker principale:
gcloud beta logging read --project=${PROJECT} "resource.type=\"ml_job\" and resource.labels.job_id=${JOB} and resource.labels.task_name=\"master-replica-0\" and severity>=ERROR"

Gli esempi precedenti rappresentano i casi più comuni di filtri per i log del job di addestramento di AI Platform Training. Cloud Logging offre molte opzioni efficaci per i filtri che puoi utilizzare se devi perfezionare la ricerca. La documentazione sui filtri avanzati descrive queste opzioni in dettaglio.

Console

  1. Apri la pagina Job di AI Platform Training nella console Google Cloud.

    Apri i job nella console Google Cloud

  2. Seleziona il job non riuscito dall'elenco nella pagina Job per visualizzarne i dettagli.

L'elenco dei job di AI Platform Training che mostra un job non riuscito.

  1. Fai clic su Visualizza log per aprire Cloud Logging.

La pagina dei dettagli di un job non riuscito.

Puoi anche andare direttamente a Cloud Logging, ma devi eseguire un passaggio aggiuntivo per trovare il tuo job:

  1. Espandi il selettore delle risorse.
  2. Espandi il job Cloud ML nell'elenco delle risorse.
  3. Trova il nome del tuo job nell'elenco job_id (puoi inserire le prime lettere) del nome del job nella casella di ricerca per restringere i job visualizzati).
  4. Espandi la voce del job e seleziona master-replica-0 dall'elenco delle attività.

I selettori dei filtri dei log sono tutti espansi.

Recupero delle informazioni dai log

Dopo aver trovato il log giusto per il tuo job e averlo filtrato in master-replica-0, puoi esaminare gli eventi registrati per trovare l'origine del problema. Ciò prevede una procedura di debug standard di Python, ricorda:

  • Gli eventi hanno più livelli di gravità. Puoi filtrare i dati in modo da visualizzare solo gli eventi di un determinato livello, ad esempio errori o errori e avvisi.
  • Un problema che causa l'uscita da trainer con un errore irreversibile (codice restituito > 0) viene registrata come eccezione, preceduta dallo stack trace:

Una voce di log senza sezioni espanse

  • Puoi ottenere ulteriori informazioni espandendo gli oggetti nel messaggio JSON registrato (indicato da una freccia rivolta verso destra e da contenuti elencati come {...}). Ad esempio, puoi espandere jsonPayload per visualizzare la traccia dello stack in un formato più scorrevole rispetto a quello fornito nella descrizione dell'errore principale:

Una voce di log con la sezione del payload JSON espansa

  • Alcuni errori mostrano istanze di errori ripetibili. In genere non includono una traccia dello stack e possono essere più difficili da diagnosticare.

Ottenere il massimo dal logging

Il servizio di addestramento AI Platform Training registra automaticamente questi eventi:

  • Informazioni sullo stato interno al servizio.
  • Messaggi inviati dall'applicazione di addestramento a stderr.
  • Testo di output inviato dall'applicazione di addestramento a stdout.

Puoi semplificare la risoluzione dei problemi nell'applicazione per formatori seguendo buone pratiche di programmazione:

  • Invia messaggi significativi allo stderr (con registrazione ad esempio).
  • Quando si verifica un problema, solleva l'eccezione più logica e descrittiva.
  • Aggiungi stringhe descrittive agli oggetti eccezione.

La documentazione di Python fornisce maggiori informazioni sulle eccezioni.

Formazione sulla risoluzione dei problemi

Questa sezione descrive concetti e condizioni di errore che si applicano all'addestramento di lavoro.

Informazioni sui codici di reso dell'applicazione di addestramento

Il job di addestramento nel cloud è controllato dal programma principale in esecuzione il processo worker master del tuo cluster di addestramento:

  • Se esegui l'addestramento in un singolo processo (non distribuito), hai un solo worker, ovvero il master.
  • Il tuo programma principale è la funzione __main__ dell'addestramento su TensorFlow un'applicazione.
  • Il servizio di addestramento di AI Platform Training esegue l'applicazione di addestramento finché non viene completata correttamente o riscontra un errore irreversibile. Questo significa che potrebbe riavviare i processi in caso di errori irreversibili.

Il servizio di addestramento gestisce le tue procedure. Gestisce l'uscita dal programma in base al codice restituito del processo worker master:

Codice di ritorno Significato Risposta di AI Platform Training
0 Completamento riuscito Chiude e rilascia le risorse del job.
1 - 128 Errore irreversibile Termina il job e registra l'errore.

Non devi fare nulla in particolare per quanto riguarda il codice di reso del tuo Funzione __main__. Python restituisce automaticamente zero al completamento, e restituisce un codice positivo quando rileva un'eccezione non gestita. Se hai l'abitudine di impostare codici di ritorno specifici per gli oggetti eccezione (una pratica valida, ma non comune), questi non interferiranno con il tuo job AI Platform Training, a condizione che tu segua il pattern nella tabella sopra. Anche in questo caso, il codice client in genere non indica errori irreversibili direttamente dall'ambiente operativo.

Gestione di condizioni di errore specifiche

Questa sezione fornisce indicazioni su alcune condizioni di errore che sono note per colpire alcuni utenti.

Risorsa esaurita

La domanda di GPU e risorse di calcolo è elevata nella regione us-central1. Nei log del job potresti visualizzare il messaggio di errore: Resources are insufficient in region: <region>. Please try a different region..

Per risolvere il problema, prova a utilizzare una regione diversa o riprova più tardi.

Il formatore rimane all'infinito senza fare progressi

Alcune situazioni possono causare l'esecuzione continua dell'applicazione di addestramento senza fare progressi nell'attività di addestramento. Il problema potrebbe essere causato da una chiamata bloccante che attende una risorsa che non diventa mai disponibile. Puoi mitigare questo problema problema configurando un intervallo di timeout nel trainer.

Configurare un intervallo di timeout per il tuo trainer

Puoi impostare un timeout in millisecondi quando crei la sessione o quando esegui un passaggio del grafico:

  • Imposta l'intervallo di timeout desiderato utilizzando il parametro config quando crea l'oggetto Session:

    sess = tf.Session(config=tf.ConfigProto(operation_timeout_in_ms=500))
    
  • Imposta l'intervallo di timeout desiderato per una singola chiamata a Session.run utilizzando il parametro options:

    v = session.run(fetches, options=tf.RunOptions(timeout_in_ms=500))
    

Consulta le Documentazione relativa alla sessione di TensorFlow per ulteriori informazioni.

Chiusura del programma con un codice -9

Se ricevi sempre il codice di uscita -9, la tua applicazione di addestramento potrebbe utilizzare di quella allocata per il suo processo. Correggi questo errore riducendo la memoria all'utilizzo, utilizzando tipi di macchina con più memoria o entrambi.

  • Controlla l'applicazione del grafico e dell'allenatore per individuare le operazioni che utilizzano più memoria del previsto. La memoria utilizzata dipende dalla complessità del tuo e la complessità delle operazioni nel grafico computazionale.
  • L'aumento della memoria allocata al job può richiedere alcuni controlli:
    • Se utilizzi un livello di scalabilità definito, non puoi aumentare l'allocazione della memoria per macchina senza aggiungere altre macchine al mix. Dovrai passare al livello CUSTOM e definire autonomamente i tipi di macchine nel cluster.
    • La configurazione precisa di ogni tipo di macchina definito è soggetta a modifiche, ma puoi fare alcuni confronti approssimativi. Troverai una tabella comparativa dei tipi di macchina nella pagina dei concetti di addestramento.
    • Quando testi i tipi di macchine per l'allocazione di memoria appropriata, potresti utilizzare una singola macchina o un cluster di dimensioni ridotte per ridurre al minimo gli addebiti.

Uscita dal programma con il codice -15

In genere, un codice di uscita -15 indica la manutenzione da parte del sistema. Si tratta di un errore ripetibile, pertanto la procedura dovrebbe essere riavviata automaticamente.

Il job è in coda da molto tempo

Se lo stato di un addestramento il job è QUEUED per un periodo di tempo prolungato, potresti aver superato quota di richieste di job.

AI Platform Training avvia l'addestramento dei job in base alla data di creazione usando una regola di primo accesso. Se il job è in coda, di solito significa che l'intera quota del progetto viene consumata da altri job inviati prima o il primo job in coda ha richiesto più unità ML/GPU rispetto la quota disponibile.

Il motivo per cui un job è stato messo in coda viene registrato nei log di addestramento. Cerca nel log messaggi simili a:

This job is number 2 in the queue and requires
4.000000 ML units and 0 GPUs. The project is using 4.000000 ML units out of 4
allowed and 0 GPUs out of 10 allowed.

Il messaggio spiega la posizione corrente del job nella coda, nonché l'utilizzo e la quota attuali del progetto.

Tieni presente che il motivo verrà registrato solo per i primi dieci job in coda ordinati in base all'ora di creazione.

Se hai regolarmente bisogno di un numero di richieste superiore a quello previsto, puoi richiedere un aumento della quota. Contatta l'assistenza se hai un pacchetto di assistenza premium. Altrimenti puoi invia la tua richiesta via email a Feedback su AI Platform Training .

Quota superata

Se ricevi un messaggio di errore simile a "Errore quota per project_number:…", potresti aver superato una delle quote di risorse. Puoi monitorare il consumo di risorse e richiedere un aumento Pagina delle quote di AI Platform Training nel gestore API della console.

Percorso di salvataggio non valido

Se il job viene chiuso con un messaggio di errore che include "Ripristino chiamato con percorso di salvataggio non valido gs://..." è possibile che tu stia utilizzando un modello configurato in modo errato Google bucket Cloud Storage.

  1. Apri la pagina Browser di Google Cloud Storage nella console Google Cloud.

    Apri l'applicazione Browser nella console Google Cloud

  2. Controlla la classe di archiviazione predefinita per il bucket che stai utilizzando:

Due bucket della piattaforma Google Cloud, uno assegnato a una regione con più zone non supportata e l&#39;altro a una regione

  • Il valore deve essere A livello di regione. In tal caso, significa che si è verificato un altro problema. Prova eseguendo di nuovo il job.
  • Se è Multi-regionale, devi impostarlo su Regionale o spostare i materiali di formazione in un altro bucket. Per il primo, consulta le istruzioni per modificare la classe di archiviazione di un bucket nella documentazione di Cloud Storage.

Il trainer esce con AbortedError

Questo errore può verificarsi se esegui un trainer che utilizza Supervisore TensorFlow per gestire i job distribuiti. A volte TensorFlow genera eccezioni AbortedError in situazioni in cui non dovresti interrompere l'intero lavoro. Puoi rilevare questa eccezione nel tuo trainer e rispondere di conseguenza. Tieni presente che TensorFlow Supervisor non è supportato dai trainer utilizzati con AI Platform Training.

Risoluzione dei problemi relativi alla previsione

Questa sezione elenca alcuni problemi comuni riscontrati durante l'acquisizione delle previsioni.

Gestione di condizioni specifiche per la previsione online

Questa sezione fornisce indicazioni su alcune condizioni di errore di previsione online. che è noto per alcuni utenti.

Il completamento delle previsioni richiede troppo tempo (30-180 secondi)

La causa più comune della previsione online lenta è l'aumento della scalabilità dei nodi di elaborazione da zero. Se il modello riceve regolarmente richieste di previsione, il sistema mantiene uno o più nodi pronti per fornire le previsioni. Se il tuo modello non ha fornito alcuna previsione da molto tempo, il servizio "riduce le dimensioni" a zero nodi pronti. La successiva richiesta di previsione dopo lo scale down richiederà molto più di tornare indietro rispetto al solito perché il servizio deve eseguire il provisioning dei nodi per gestire li annotino.

Codici di stato HTTP

Quando si verifica un errore con una richiesta di previsione online, solitamente ricevi una richiesta il codice di stato restituito dal servizio. Di seguito sono riportati alcuni codici comuni il loro significato nel contesto della previsione online:

429 - Memoria insufficiente

Il nodo di elaborazione ha esaurito la memoria durante l'esecuzione del modello. Al momento non è possibile aumentare la memoria allocata ai nodi di previsione. Puoi provare a eseguire il modello nel seguente modo:

  • Riduci le dimensioni del modello:
    • Utilizzare variabili meno precise.
    • Quantificare i dati continui.
    • Ridurre la dimensione di altre caratteristiche di input (utilizzando vocaboli più piccoli) dimensioni, ad esempio).
    • Invia di nuovo la richiesta con un batch di istanze più piccolo.
429 - Troppe richieste in attesa

Il modello riceve più richieste di quante possa gestire. Se utilizzi con scalabilità automatica, riceve le richieste più velocemente di quanto il sistema possa fare lo scale up.

Con la scalabilità automatica, puoi provare a inviare nuovamente le richieste con backoff esponenziale. In questo modo il sistema avrà il tempo di adattarsi.

429 - Quota

Il tuo progetto Google Cloud è limitato a 10.000 richieste ogni 100 secondi (circa 100 al secondo). Se visualizzi questo errore nei picchi temporanei, spesso puoi riprovare con il backoff esponenziale per elaborare tutte le richieste nel tempo. Se ricevi regolarmente questo codice, puoi richiedere una quota aumentano. Consulta la pagina della quota per maggiori dettagli.

503 - I nostri sistemi hanno rilevato traffico insolito dalla rete del tuo computer

La frequenza di richieste che il tuo modello ha ricevuto da un singolo IP è talmente alta che il sistema sospetti un attacco denial of service. Interrompi l'invio delle richieste per un minuto, per poi riprendere l'invio a una velocità inferiore.

500 - Impossibile caricare il modello

Il sistema ha avuto difficoltà a caricare il modello. Prova a procedere nel seguente modo:

  • Assicurati che l'addestratore stia esportando il modello corretto.
  • Prova una previsione di test con gcloud ai-platform local predict .
  • Esporta di nuovo il modello e riprova.

Errori di formattazione per le richieste di previsione

Questi messaggi riguardano tutti il tuo input di previsione.

"JSON vuoto o non valido/non valido nel corpo della richiesta"
Il servizio non è riuscito ad analizzare il file JSON nella tua richiesta oppure la tua richiesta è vuoto. Controlla se nel messaggio sono presenti errori o omissioni che invalidano il codice JSON.
"Manca il campo "instances" nel corpo della richiesta"
Il corpo della richiesta non segue il formato corretto. Deve essere un oggetto JSON con una singola chiave denominata "instances" che contiene un elenco con tutte le istanze di input.
Errore di codifica JSON durante la creazione di una richiesta

La tua richiesta include dati codificati in base64, ma non nel JSON corretto formato. Ogni stringa codificata in base64 deve essere rappresentata da un oggetto con un chiave singola denominata "b64". Ad esempio:

  {"b64": "an_encoded_string"}

Un altro errore base64 si verifica quando i dati binari non sono codificati in base64. Codifica i dati e formattali come segue:

  {"b64": base64.b64encode(binary_data)}

Scopri di più sulla formattazione e sulla codifica dei dati binari.

La previsione nel cloud richiede più tempo rispetto a quella sul desktop

La previsione online è progettata per essere un servizio scalabile che e gestisce un tasso elevato di richieste di previsione. Il servizio è ottimizzato per il rendimento aggregato di tutte le richieste di pubblicazione. L'attenzione alla scalabilità comporta caratteristiche di rendimento diverse rispetto alla generazione di un numero ridotto di previsioni sulla tua macchina locale.

Passaggi successivi