Risoluzione dei problemi

Trovare la causa degli errori che si verificano durante l'addestramento del modello o per ottenere previsioni nel cloud può essere difficile. In questa pagina viene descritto come individuare ed eseguire il debug dei problemi riscontrati in AI Platform Training. In caso di problemi con il framework di machine learning in uso, consulta invece la documentazione relativa al framework di machine learning.

Strumento a riga di comando

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

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

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

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

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

Questo errore significa che devi aggiornare gcloud. Per aggiornare gcloud, esegui questo 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 risolvere il problema, esporta nuovamente il modello utilizzando la libreria corretta. Ad esempio, esporta i modelli del modulo model.pkl con la libreria pickle e i modelli del modulo model.joblib con la libreria joblib.

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

Questo errore indica che hai specificato json come valore del flag --data-format durante l'invio di un job di previsione batch. Per utilizzare il formato dei dati JSON, devi fornire text come valore del flag --data-format.

Versioni 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 su una risorsa della versione del modello di AI Platform Training con un'impostazione Python 2.7.

Per risolvere questo problema:

  • Crea una nuova risorsa della 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.

Impossibile trovare il comando virtualenv

Se hai ricevuto questo errore quando hai provato ad attivare virtualenv, una possibile soluzione consiste nell'aggiungere la directory contenente virtualenv alla variabile di ambiente $PATH. La modifica di questa variabile consente di utilizzare i comandi virtualenv senza 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, è ~/.bashrc o ~/.bash_profile in macOS.

Aggiungi la riga seguente, 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 (o .bash_profile) aggiornato:

source ~/.bashrc

Utilizzo dei log dei job

Un buon primo punto da cui iniziare la risoluzione dei problemi sono i log dei job acquisiti da Cloud Logging.

Logging per i diversi tipi di operazioni

L'esperienza di logging varia in base al tipo di operazione, come mostrato nelle sezioni seguenti.

Log di addestramento

Tutti i job di addestramento vengono registrati. I log includono eventi del servizio di addestramento e dell'applicazione di addestramento. Puoi inserire eventi di logging nella tua applicazione con le librerie Python standard (ad esempio logging). AI Platform Training acquisisce tutti i messaggi di logging della tua applicazione. Tutti i messaggi inviati a stderr vengono automaticamente acquisiti nella voce 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 abilitare Cloud Logging quando crei la tua risorsa del modello:

gcloud

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

Python

Imposta onlinePredictionLogging su True nella risorsa Model che utilizzi per la chiamata a projects.models.create.

Ricerca dei log

I log dei job contengono tutti gli eventi per l'operazione, inclusi gli eventi di tutti i processi nel cluster quando utilizzi l'addestramento distribuito. Se esegui un job di addestramento distribuito, i log a livello di job vengono registrati per il processo worker master. Il primo passaggio per risolvere un errore consiste nell'esaminare i log di quel processo, filtrando gli eventi registrati per altri processi nel cluster. Gli esempi in questa sezione mostrano questo tipo di filtri.

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

Elemento metadati Filtra per mostrare gli elementi dove si trova...
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 worker master.
gravità Maggiore di o uguale a ERROR per leggere solo le voci di log corrispondenti alle condizioni di errore.

Riga di comando

Usa gcloud beta logging read per creare 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 il valore letterale stringa nella posizione corretta.

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

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

Per stampare il log da visualizzare sul 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\""
Per stampare solo gli errori registrati per la visualizzazione del 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 filtraggio dei log del job di addestramento AI Platform Training. Cloud Logging offre molte opzioni avanzate per i filtri che è possibile utilizzare se è necessario 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 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 hai anche il 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 del filtro di log sono tutti espansi.

Recupero delle informazioni dai log

Dopo aver trovato il log corretto per il tuo job e averlo filtrato in base a master-replica-0, puoi esaminare gli eventi registrati per trovare l'origine del problema. Ciò prevede la procedura standard di debug di Python, ma tieni presente quanto segue:

  • Gli eventi hanno più livelli di gravità. Puoi applicare i filtri in modo da visualizzare solo gli eventi di un determinato livello, come errori o avvisi.
  • Un problema che causa l'uscita del trainer con una condizione di errore irreversibile (codice restituito > 0) viene registrato come eccezione, preceduta dalla traccia dello stack:

Una voce di log senza sezioni espanse

  • Per ottenere maggiori informazioni, espandi gli oggetti nel messaggio JSON registrato (indicato da una freccia rivolta verso destra e i contenuti elencati come {...}). Ad esempio, puoi espandere jsonPayload per visualizzare l'analisi dello stack in un formato più leggibile rispetto a quello indicato nella descrizione dell'errore principale:

Una voce di log con la sezione del payload JSON espansa

  • Alcuni errori mostrano istanze di errori non irreversibili. In genere non includono un'analisi dello stack e possono essere più difficili da diagnosticare.

Ottieni il massimo dal logging

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

  • Informazioni sullo stato interne al servizio.
  • Messaggi inviati dall'applicazione trainer a stderr.
  • Testo di output che l'applicazione di addestramento invia a stdout.

Puoi semplificare la risoluzione degli errori nell'applicazione trainer seguendo buone prassi di programmazione:

  • Invia messaggi significativi a stderr (ad esempio, con il logging).
  • Solleva l'eccezione più logica e descrittiva quando si verifica un problema.
  • Aggiungi stringhe descrittive agli oggetti di eccezione.

La documentazione di Python fornisce ulteriori informazioni sulle eccezioni.

Formazione per la risoluzione dei problemi

Questa sezione descrive i concetti e le condizioni di errore che si applicano ai job di addestramento.

Informazioni sui codici restituiti delle applicazioni di addestramento

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

  • Se esegui l'addestramento in un singolo processo (non distribuito), hai un solo worker, ovvero il master.
  • Il programma principale è la funzione __main__ dell'applicazione di addestramento TensorFlow.
  • Il servizio di addestramento di AI Platform Training esegue l'applicazione trainer fino al completamento o fino a quando non si verifica un errore irreversibile. Ciò significa che i processi potrebbero essere riavviati in caso di errori non irreversibili.

Il servizio di formazione gestisce i tuoi processi. Gestisce un'uscita dal programma in base al codice di ritorno del processo worker principale:

Codice di reso Significato Risposta di AI Platform Training
0 Completamento riuscito Arresto e rilascia le risorse del job.
1 - 128 Errore irreversibile Termina il job e l'errore viene registrato.

Non devi fare nulla in particolare per quanto riguarda il codice restituito della funzione __main__. Python restituisce automaticamente zero al completamento riuscito e un codice positivo quando rileva un'eccezione non gestita. Se sei abituato a impostare codici di ritorno specifici per gli oggetti di eccezione (una pratica valida ma non comune), non interferirà con il job di AI Platform Training, purché tu segua il pattern nella tabella precedente. Anche in questo caso, il codice client in genere non indica direttamente errori non irreversibili, ma provenienti dall'ambiente operativo.

Gestione di condizioni di errore specifiche

Questa sezione fornisce indicazioni su alcune condizioni di errore che notoriamente interessano alcuni utenti.

Risorsa esaurita

La domanda è elevata per GPU e risorse di calcolo nella regione us-central1. Nei log del job potrebbe essere visualizzato un messaggio di errore che indica: Resources are insufficient in region: <region>. Please try a different region..

Per risolvere il problema, prova a utilizzare un'altra regione o riprova più tardi.

Il formatore corre all'infinito senza fare progressi

Alcune situazioni possono causare l'esecuzione continua dell'applicazione di addestramento senza alcun progresso nell'attività di addestramento. Ciò può essere causato da una chiamata di blocco che attende una risorsa che non diventa mai disponibile. Puoi mitigare questo problema configurando un intervallo di timeout nel tuo trainer.

Configura un intervallo di timeout per il formatore

Puoi impostare un timeout in millisecondi durante la creazione della sessione o durante l'esecuzione di un passaggio del grafico:

  • Imposta l'intervallo di timeout desiderato utilizzando il parametro config quando crei 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))
    

Per ulteriori informazioni, consulta la documentazione relativa alle sessioni di TensorFlow.

Uscita dal programma con codice -9

Se ottieni regolarmente il codice di uscita -9, l'applicazione trainer potrebbe utilizzare più memoria di quella allocata per il suo processo. Correggi questo errore riducendo l'utilizzo della memoria, utilizzando tipi di macchina con più memoria o entrambi.

  • Controlla il grafico e l'applicazione di addestramento per individuare le operazioni che utilizzano più memoria del previsto. L'utilizzo della memoria dipende dalla complessità dei dati e dalle operazioni nel grafico di calcolo.
  • L'aumento della memoria allocata al job potrebbe richiedere un certo livello di dettaglio:
    • Se utilizzi un livello di scalabilità definito, non puoi aumentare l'allocazione della memoria per macchina senza aggiungere altre macchine alla combinazione. Dovrai passare al livello PERSONALIZZATO e definire personalmente i tipi di macchina 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 macchina per l'allocazione di memoria appropriata, ti consigliamo di utilizzare una singola macchina o un cluster di dimensioni ridotte, per ridurre al minimo i costi sostenuti.

Uscita dal programma con codice -15

In genere, un codice di uscita pari a -15 indica la manutenzione da parte del sistema. È un errore ripetibile, quindi il processo dovrebbe essere riavviato automaticamente.

Job in coda per molto tempo

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

AI Platform Training inizia ad addestrare i job in base al momento della creazione, usando una regola di autorizzazione all'accesso. Se il job è in coda, di solito significa che tutta la quota del progetto viene consumata da altri job inviati prima del job o del primo job in coda che ha richiesto più unità ML/GPU rispetto alla 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 attuale del job nella coda, nonché l'utilizzo corrente e la quota del progetto.

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

Se hai regolarmente bisogno di un numero di richieste superiore a quello allocato, puoi richiedere un aumento della quota. Contatta l'assistenza se hai un pacchetto di assistenza premium. In alternativa, puoi inviare la richiesta via email al feedback su AI Platform Training .

Quota superata

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

Percorso di salvataggio non valido

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

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

    Apri il browser nella console Google Cloud

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

Due bucket Google Cloud Platform, uno assegnato a una località multiregionale non supportata, l'altro assegnato a una regione

  • Deve essere regionale. Se sì, significa che si è verificato un altro problema. Prova a eseguire di nuovo il job.
  • Se è impostata su Più regioni, devi impostare l'opzione su regionale o spostare i materiali di formazione in un altro bucket. Nel primo, consulta le istruzioni per modificare la classe di archiviazione di un bucket nella documentazione di Cloud Storage.

Il formatore esce con AbortedError

Questo errore può verificarsi se esegui un addestramento che utilizza TensorFlow Supervisor per gestire i job distribuiti. TensorFlow a volte genera eccezioni AbortedError in situazioni in cui non è necessario interrompere l'intero job. Puoi individuare l'eccezione nel formatore e intervenire di conseguenza. Tieni presente che TensorFlow Supervisor non è supportato nei addestratori eseguiti con AI Platform Training.

Risoluzione dei problemi di previsione

Questa sezione raccoglie alcuni problemi comuni riscontrati durante la generazione delle previsioni.

Gestione di condizioni specifiche per la previsione online

Questa sezione fornisce indicazioni su alcune condizioni di errore di previsione online che in genere interessano alcuni utenti.

Previsioni che richiedono troppo tempo per essere completate (30-180 secondi)

La causa più comune di previsioni online lente è lo scale up dei nodi di elaborazione da zero. Se il modello riceve regolarmente richieste di previsione, il sistema mantiene uno o più nodi pronti per fornire previsioni. Se il modello non ha pubblicato previsioni per un lungo periodo di tempo, il servizio "fa lo scale down" a zero nodi pronti. La successiva richiesta di previsione dopo questo scale down richiederà molto più tempo del solito perché il servizio deve eseguire il provisioning dei nodi per gestirlo.

Codici di stato HTTP

Quando si verifica un errore con una richiesta di previsione online, in genere ricevi un codice di stato HTTP dal servizio. Di seguito sono riportati alcuni codici comuni e 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. Per eseguire il modello, puoi provare queste soluzioni:

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

Il modello riceve più richieste di quante sia in grado di gestire. Se utilizzi la scalabilità automatica, le richieste vengono ricevute più velocemente di quanto il sistema possa fare lo scale up.

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

429 - Quota

Il tuo progetto Google Cloud Platform è limitato a 10.000 richieste ogni 100 secondi (circa 100 al secondo). Se ricevi questo errore nei picchi temporanei, spesso puoi riprovare con il backoff esponenziale per elaborare tutte le richieste in tempo. Se ricevi sempre questo codice, puoi richiedere un aumento della quota. Consulta la pagina della quota per ulteriori dettagli.

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

La frequenza di richieste che il modello ha ricevuto da un singolo IP è talmente elevata che il sistema sospetta un attacco denial of service. Interrompi l'invio delle richieste per un minuto e riprendi l'invio a una velocità inferiore.

500 - Impossibile caricare il modello

Si è verificato un problema durante il caricamento del modello. Prova a procedere nel seguente modo:

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

Errori di formattazione per le richieste di previsione

Questi messaggi sono tutti relativi all'input di previsione.

"JSON vuoto o in un formato non valido/non valido nel corpo della richiesta"
Il servizio non è riuscito ad analizzare il JSON nella tua richiesta oppure quest'ultima è vuota. Controlla che nel messaggio non siano presenti errori od omissioni che rendono JSON non valido.
"Campo 'istanze' mancante nel corpo della richiesta"
Il corpo della richiesta non è nel 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 formato JSON corretto. Ogni stringa con codifica Base64 deve essere rappresentata da un oggetto con una singola chiave denominata "b64". Ad esempio:

  {"b64": "an_encoded_string"}

Se i dati binari non sono codificati in Base64, si verifica un altro errore in base64. Codifica i dati e formattali nel seguente modo:

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

Leggi ulteriori informazioni sulla formattazione e sulla codifica di dati binari.

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

La previsione online è progettata per essere un servizio scalabile che pubblica rapidamente richieste di previsione elevate. Il servizio è ottimizzato per aggregare le prestazioni di tutte le richieste di distribuzione. L'enfasi sulla scalabilità porta a caratteristiche delle prestazioni diverse rispetto alla generazione di un piccolo numero di previsioni sulla tua macchina locale.

Passaggi successivi