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 Prediction. 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

ERRORE: (gcloud) Scelta non valida: 'ai-platform'.

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

gcloud components update
ERRORE: (gcloud) unRecognize users: --framework=SCIKIT_LEARN.

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

gcloud components update
ERRORE: (gcloud) unRecognize users: --framework=XGBOOST.

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

gcloud components update
ERRORE: (gcloud) Impossibile caricare il modello: Impossibile caricare il modello: /tmp/model/0001/model.pkl. '\x03'. (Codice di errore: 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.

ERRORE: (gcloud.ai-platform.jobs.submit.prediction) argomento --data-format: Scelta non valida: '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

ERRORE: è stato rilevato un modello non valido con l'errore: "Impossibile caricare il modello: impossibile caricare
modello: /tmp/model/0001/model.pkl. protocollo dettatura non supportato: 3. Indica
assicurati che il modello sia stato esportato utilizzando Python 2. Altrimenti, specifica
il parametro "python_version" corretto durante il deployment del modello. Al momento,
"python_version" accetta 2.7 e 3.5. (Codice di errore: 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 Prediction 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 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 Prediction. 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 Prediction 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 previsione di AI Platform 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 di previsione di AI Platform 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 Prediction 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.

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 scalare. Inoltre, se il valore minimo dei nodi è 0, questa configurazione può portare a uno scenario di "avvio a freddo" in cui verrà osservato un tasso di errore del 100% fino a quando il primo nodo non sarà attuabile.

Con la scalabilità automatica puoi provare a inviare di nuovo le richieste con backoff esponenziale. Inviare di nuovo le richieste con backoff esponenziale può concedere al sistema il tempo di adattarsi.

Per impostazione predefinita, la scalabilità automatica viene attivata quando l'utilizzo della CPU supera il 60% ed è configurabile.

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