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 il seguente 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 risolvere il problema, esporta di nuovo 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 quando hai inviato un job di previsione batch. Per utilizzare il formato dei dati JSON, devi fornire 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 un file del modello esportato con Python 3 è stato disegnato in una risorsa della versione del modello di 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 visualizzato questo errore quando hai provato ad attivare virtualenv, una possibile soluzione è aggiungere la directory contenente virtualenv alla variabile di ambiente $PATH. La modifica di questa variabile ti consente di utilizzare i comandi virtualenv senza digitare il percorso file completo.

Innanzitutto, installa virtualenv eseguendo il seguente 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, questo pulsante è 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 il seguente comando per caricare il file .bashrc (o .bash_profile) aggiornato:

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.

Log per i diversi tipi di operazioni

L'esperienza di registrazione 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 gli eventi del servizio di formazione e della tua applicazione di formazione. Puoi inserire eventi di logging nella tua applicazione con le librerie Python standard (ad esempio logging). AI Platform Training acquisisce tutti i messaggi di log della tua applicazione. Tutti i messaggi inviati a stderr vengono acquisiti automaticamente 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 attivare Cloud Logging quando crei la risorsa 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.

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 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, se necessario:

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 alle 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 job sullo schermo:
gcloud ai-platform jobs stream-logs $JOB

Consulta tutte le opzioni per gcloud ai-platform jobs 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 solo gli errori registrati per il 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\" 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.

    Aprire 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 Job Cloud ML nell'elenco delle risorse.
  3. Trova il nome del 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.

Ottenere informazioni dai log

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

  • 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 dell'addestratore con una condizione di errore irrecuperabile (codice di ritorno > 0) viene registrato come eccezione preceduta dalla traccia di stack:

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 analisi 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 analisi 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 degli errori nell'applicazione per formatori seguendo buone pratiche di programmazione:

  • Invia messaggi significativi a stderr (ad esempio con il logging).
  • 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 i concetti e le condizioni di errore che si applicano ai job di addestramento.

Informazioni sui codici di ritorno dell'applicazione di addestramento

Il job di addestramento nel cloud è controllato dal programma principale in esecuzione sul processo worker principale 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__ della tua applicazione di addestramento TensorFlow.
  • Il servizio di addestramento di AI Platform Training esegue l'applicazione di addestramento fino al completamento o all'incontro di un errore non recuperabile. Ciò significa che potrebbero essere riavviate le procedure se si verificano errori ripetibili.

Il servizio di addestramento gestisce le tue procedure. Gestisce l'uscita da un programma in base al codice di ritorno del processo di lavoro principale:

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

Non devi fare nulla di particolare per il codice di ritorno della funzione __main__. Python restituisce automaticamente 0 al termine dell'operazione, 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. Tuttavia, in genere il codice client non indica direttamente gli errori ripetibili, che provengono 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.

L'allenatore viene eseguito all'infinito senza fare alcun progresso

In alcune situazioni, l'applicazione di addestramento potrebbe essere in esecuzione continua 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 ovviare al problema configurando un intervallo di tempo di attesa nel tuo trainer.

Configurare un intervallo di timeout per il tuo istruttore

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 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 di Session di TensorFlow.

Chiusura del programma con un codice -9

Se ricevi costantemente il codice di uscita -9, l'applicazione per formatori potrebbe utilizzare più memoria di quella allocata per il processo. Correggi questo errore riducendo l'utilizzo della memoria, utilizzando tipi di macchine con più memoria o entrambe le cose.

  • Controlla l'applicazione del grafico e dell'allenatore per individuare le operazioni che utilizzano più memoria del previsto. L'utilizzo della memoria è influenzato dalla complessità dei dati e delle operazioni nel grafo di calcolo.
  • L'aumento della memoria allocata al tuo job potrebbe richiedere un po' di attenzione:
    • 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. Nella pagina dei concetti di addestramento troverai una tabella comparativa dei tipi di macchine.
    • 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.

Il programma esce con un 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 job di addestramento è QUEUED per un periodo prolungato, potresti aver superato la quota di richieste di job.

AI Platform Training avvia i job di addestramento in base all'ora di creazione, utilizzando una regola di primo arrivato, primo servito. Se il tuo job è in coda, in genere significa che tutta la quota del progetto è stata utilizzata da altri job inviati prima del tuo job o che il primo job in coda ha richiesto più unità/GPU di ML rispetto alla quota disponibile.

Il motivo per cui un job è 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 maggiore di richieste rispetto a quello consentito, puoi richiedere un aumento della quota. Contatta l'assistenza se hai un pacchetto di assistenza premium. In caso contrario, puoi inviare la tua richiesta via email all'indirizzo Feedback di 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 delle risorse e richiedere un aumento nella pagina delle quote di AI Platform Training nel gestore API della console.

Percorso di salvataggio non valido

Se il job esce con un messaggio di errore che include "Restore called with invalid save path gs://...", potresti utilizzare un bucket Google Cloud Storage configurato in modo errato.

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

    Aprire il 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

  • Deve essere Regionale. In caso contrario, si è verificato un altro problema. Prova a eseguire 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 TensorFlow Supervisor per gestire i job distribuiti. A volte TensorFlow genera eccezioni AbortedError in situazioni in cui non dovresti interrompere l'intero job. Puoi rilevare questa eccezione nel tuo trainer e rispondere di conseguenza. Tieni presente che TensorFlow Supervisor non è supportato negli allenatori che esegui con AI Platform Training.

Risoluzione dei problemi relativi alla previsione

Questa sezione raccoglie alcuni problemi comuni riscontrati durante l'ottenimento delle previsioni.

Gestione di condizioni specifiche per la previsione online

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

Le previsioni richiedono troppo tempo per essere completate (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 uno scale-down di questo tipo richiederà molto più tempo del solito per essere soddisfatta perché il servizio deve eseguire il provisioning dei nodi per gestirla.

Codici di stato HTTP

Quando si verifica un errore con una richiesta di previsione online, in genere viene restituito 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. Puoi provare a eseguire il modello nel seguente modo:

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

Il tuo modello riceve più richieste di quante possa gestire. Se utilizzi la scalabilità automatica, le richieste vengono ricevute più velocemente di quanto il sistema possa eseguire 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 adeguarsi.

429 - Quota

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

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

La frequenza delle richieste ricevute dal tuo modello da un singolo indirizzo IP è così elevata che il sistema sospetta un attacco di tipo denial of service. Interrompi l'invio di richieste per un minuto e poi riprendilo a una frequenza 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 il comando 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 con formato non corretto/non valido nel corpo della richiesta"
Il servizio non è riuscito ad analizzare il JSON nella richiesta o la richiesta è vuota. Controlla il messaggio per verificare la presenza di errori o omissioni che invalidano il 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 richiesta include dati con codifica 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"}

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 che su computer

La previsione online è progettata per essere un servizio scalabile che gestisce rapidamente un elevato tasso 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