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. In questa pagina viene descritto come trovare e risolvere i problemi riscontrati in AI Platform Training. Se riscontri per risolvere i problemi con il framework di machine learning che stai utilizzando, leggi documentazione per gli strumenti di machine learning Google Cloud.

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 questo comando:

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

Questo errore indica che devi aggiorna 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 di nuovo 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 della versione del modello e imposta "python_version" a 3,5.
  • Esegui il deployment dello stesso file del modello nella risorsa della nuova versione del modello.

Comando virtualenv non trovato

Se hai ricevuto questo errore quando hai provato ad attivare virtualenv, è possibile che è aggiungere la directory contenente virtualenv al tuo $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 l'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 riga seguente, sostituendo [VALUES-IN-BRACKETS] con il codice valori:

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.

Logging 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 e dalla tua applicazione di addestramento. Puoi inserire eventi di logging nella tua applicazione con le librerie Python standard (registrazione, ad esempio). Acquisizioni di AI Platform Training tutti i messaggi di logging dalla 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.

Individuazione dei log

I log del job contengono tutti gli eventi per l'operazione, inclusi quelli di tutti dei processi nel tuo cluster quando utilizzi l'addestramento distribuito. Se mentre esegui un job di addestramento distribuito, i log a livello di job e il processo worker principale. Il primo passaggio per la risoluzione di un errore è in genere esaminare i log per quel processo, filtrando gli eventi registrati per altri processi nel tuo cluster. Gli esempi in questa sezione mostrano questo filtro.

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

Elemento metadati Filtro 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" solo le voci di log dell'istanza principale worker.
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 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 della stringa.

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 solo gli errori registrati per il 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 fornisce molte potenti opzioni di filtro che puoi utilizzare se hai bisogno di perfezionare eseguire una 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 c'è il passaggio aggiuntivo trovare un lavoro:

  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 di attività.

I selettori del filtro 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 per visualizzare solo gli eventi di un determinato livello, come 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 traccia:

Una voce di log senza sezioni espanse

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

Una voce di log con la sezione del payload JSON espansa

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

Ottenere il massimo dal logging

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

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

Per semplificare la risoluzione degli errori nell'applicazione di addestramento seguendo buone prassi di programmazione:

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

La documentazione Python fornisce ulteriori 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 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 i tuoi processi. Gestisce l'uscita dal programma in base al codice restituito del processo worker principale:

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 di particolare per il codice di ritorno della funzione __main__. Python restituisce automaticamente zero al completamento, e restituisce un codice positivo quando rileva un'eccezione non gestita. Se sei abituato a impostare codici di reso specifici per gli oggetti di eccezione (un valida ma insolita), non interferisce con le tue Job di AI Platform Training, a condizione che si segua il pattern nella tabella in alto. 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 note interessano alcuni utenti.

Risorsa esaurita

La domanda di GPU e risorse di calcolo è elevata nella regione us-central1. Nei log del job potrebbe essere visualizzato il messaggio di errore: 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 rimane all'infinito senza fare progressi

In alcune situazioni, l'applicazione di addestramento potrebbe essere in esecuzione continua senza fare progressi nell'attività di addestramento. La causa potrebbe essere un blocco della chiamata in attesa di 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 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 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 se nella tua applicazione di grafico e di addestramento sono presenti operazioni che utilizzano più risorse 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 la memoria all'allocazione per macchina senza aggiungere altre macchine al mix. Dovrai passare al livello CUSTOM e definire autonomamente i tipi di macchine nel cluster.
    • La configurazione esatta di ogni tipo di macchina definito è soggetta alle cambia, ma puoi fare qualche confronto approssimativo. 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. È un errore irreversibile, quindi il processo dovrebbe essere riavviato automaticamente.

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 l'addestramento dei job in base alla data di creazione usando una regola di primo accesso. 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 è 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 e il utilizzo attuale e quota del progetto.

Tieni presente che il motivo verrà registrato solo per i primi dieci job in coda ordinati al momento della creazione del job.

Se hai bisogno regolarmente 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 visualizzi un messaggio di errore del tipo "Errore di quota per numero_progetto:...", potresti aver superato una delle quote delle 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 Google Cloud Platform, uno assegnato a un&#39;area multiregionale non supportata, l&#39;altro assegnato a una regione

  • Il valore deve essere A livello di regione. In caso contrario, 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. Nel primo caso, trova istruzioni per modificare la classe di archiviazione di un bucket disponibile nella documentazione di Cloud Storage.

Il formatore chiude 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 capire un'eccezione nel formatore e a 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 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 dei nodi di elaborazione da zero. Se sul modello sono effettuate richieste di previsione regolari, mantiene uno o più nodi pronti per fornire previsioni. Se il modello non presenta ha pubblicato previsioni in molto tempo, il servizio "fa lo scale down" a zero pronto nodi. 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 e il loro significato nel contesto della previsione online:

429 - Memoria esaurita

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. Tu puoi provare a fare quanto segue per far funzionare il modello:

  • Riduci le dimensioni del modello:
    • Utilizzare variabili meno precise.
    • Quantificare i dati continui.
    • Ridurre la dimensione di altre caratteristiche di input (usando termini 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 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 di nuovo le richieste con backoff esponenziale. In questo modo, il sistema può avere 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 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 non è riuscito a caricare il modello. Prova a procedere nel seguente modo:

  • Assicurati che il trainer 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 hanno tutti a che fare con i tuoi 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 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 tua richiesta non è nel formato corretto. Deve essere un file JSON oggetto con una singola chiave denominata "instances" che contiene un elenco con tutte delle tue 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 sono presenti dati binari diversi da base64 codificati. Codifica i dati e formattali nel seguente modo:

  {"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 che gestisce un tasso elevato di richieste di previsione. Il servizio è ottimizzato per le prestazioni aggregate in tutte le richieste di pubblicazione. L'enfasi su scalabilità porta a caratteristiche di prestazioni diverse rispetto alla generazione di un un numero ridotto di previsioni sulla macchina locale.

Passaggi successivi