Risoluzione dei problemi relativi agli endpoint batch

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)

Informazioni su come risolvere e risolvere gli errori comuni che possono verificarsi quando si usano gli endpoint batch per l'assegnazione dei punteggi batch. Contenuto dell'articolo:

Informazioni sui log di un processo di assegnazione dei punteggi batch

Ottenere i log

Dopo aver richiamato un endpoint batch usando l'interfaccia della riga di comando di Azure o REST, il processo di assegnazione dei punteggi batch verrà eseguito in modo asincrono. Sono disponibili due opzioni per ottenere i log per un processo di assegnazione dei punteggi in batch.

Opzione 1: trasmettere i log alla console locale

È possibile eseguire il comando seguente per trasmettere i log generati dal sistema alla console. Vengono trasmessi solo i log nella azureml-logs cartella.

az ml job stream --name <job_name>

Opzione 2: visualizzare i log in Studio

Per ottenere il collegamento all'esecuzione in Studio, eseguire:

az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
  1. Aprire il processo in Studio usando il valore restituito dal comando precedente.
  2. Scegliere batchscoring
  3. Selezionare la scheda Output e log.
  4. Scegliere uno o più log da rivedere

Informazioni sulla struttura dei log

Sono disponibili due cartelle di log di primo livello, azureml-logs e logs.

Il file ~/azureml-logs/70_driver_log.txt contiene informazioni dal controller che avvia lo script di assegnazione dei punteggi.

A causa della natura distribuita dei processi di assegnazione dei punteggi in batch, sono presenti log di origini diverse. Tuttavia, vengono creati due file combinati che offrono informazioni di alto livello:

  • ~/logs/job_progress_overview.txt: questo file offre informazioni di alto livello sul numero di mini-batch (chiamati anche attività) creati e il numero di mini-batch elaborati. Al termine dei mini batch, il log registra i risultati del processo. Se il processo non è riuscito, viene visualizzato il messaggio di errore e dove avviare la risoluzione dei problemi.

  • ~/logs/sys/master_role.txt: questo file fornisce la visualizzazione del nodo principale (chiamato anche agente di orchestrazione) del processo in esecuzione. Questo log fornisce informazioni sulla creazione di attività, il monitoraggio dello stato, il risultato del processo.

Per una comprensione immediata degli errori nello script, è disponibile il file:

  • ~/logs/user/error.txt: questo file prova a riepilogare gli errori nello script.

Per altre informazioni sugli errori nello script, è disponibile il file:

  • ~/logs/user/error/: questo file contiene tracce complete dello stack delle eccezioni generate durante il caricamento e l'esecuzione dello script di immissione.

Quando è necessaria una conoscenza completa del modo in cui ogni nodo ha eseguito lo script del punteggio, esaminare i singoli log dei processi per ogni nodo. I log dei processi sono disponibili nella cartella sys/node, raggruppati in base ai nodi di lavoro:

  • ~/logs/sys/node/<ip_address>/<process_name>.txt: questo file offre informazioni dettagliate su ogni mini-batch quando viene selezionato o completato da un ruolo di lavoro. Per ogni mini-batch, il file include:

    • Indirizzo IP e PID del processo di lavoro.
    • Numero totale di elementi, numero di elementi elaborati correttamente e numero di elementi non riusciti.
    • L'ora di inizio, la durata, il tempo di elaborazione e l'ora del metodo run.

È anche possibile visualizzare i risultati dei controlli periodici dell'utilizzo delle risorse per ogni nodo. I file di log e i file di installazione si trovano in questa cartella:

  • ~/logs/perf: impostare --resource_monitor_interval per modificare l'intervallo di controllo in secondi. L'intervallo predefinito è 600, ovvero circa 10 minuti. Per arrestare il monitoraggio, impostare il valore su 0. Ogni cartella <ip_address> include:

    • os/: informazioni su tutti i processi in esecuzione nel nodo. Un controllo esegue un comando del sistema operativo e salva il risultato in un file. In Linux usare il comando: ps.
      • %Y%m%d%H: il nome della sottocartella è l'ora.
        • processes_%M: il file termina con il minuto dell'ora di controllo.
    • node_disk_usage.csv: utilizzo dettagliato del disco del nodo.
    • node_resource_usage.csv: panoramica dell'utilizzo delle risorse del nodo.
    • processes_resource_usage.csv: panoramica dell'utilizzo delle risorse di ogni processo.

Come accedere allo script di assegnazione dei punteggi

È possibile usare la registrazione Python nello script di assegnazione dei punteggi. I log vengono archiviati in logs/user/stdout/<node_id>/processNNN.stdout.txt.

import argparse
import logging

# Get logging_level
arg_parser = argparse.ArgumentParser(description="Argument parser.")
arg_parser.add_argument("--logging_level", type=str, help="logging level")
args, unknown_args = arg_parser.parse_known_args()
print(args.logging_level)

# Initialize Python logger
logger = logging.getLogger(__name__)
logger.setLevel(args.logging_level.upper())
logger.info("Info log statement")
logger.debug("Debug log statement")

Problemi comuni

La sezione seguente contiene problemi comuni e soluzioni che possono verificarsi durante lo sviluppo e l'utilizzo di endpoint batch.

Nessun modulo denominato "azureml"

Messaggio registrato: No module named 'azureml'.

Motivo: le distribuzioni batch di Azure Machine Learning richiedono l'installazione del pacchetto azureml-core.

Soluzione: aggiungere azureml-core al file delle dipendenze conda.

L'output esiste già

Motivo: la distribuzione batch di Azure Machine Learning non può sovrascrivere il file predictions.csv generato dall'output.

Soluzione: se viene indicato un percorso di output per le stime, assicurarsi che il percorso porti a un file non existing.

La funzione run() nello script di immissione ha avuto un timeout per [numero] volte

Messaggio registrato: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.

Motivo: le distribuzioni batch possono essere configurate con un valore timeout che indica il tempo di attesa della distribuzione per l'elaborazione di un singolo batch. Se l'esecuzione del batch accetta più di tale valore, l'attività viene interrotta. Le attività interrotte possono essere ritentate fino a un massimo di volte che possono anche essere configurate. Se il timeout si verifica in ogni nuovo tentativo, il processo di distribuzione ha esito negativo. Queste proprietà possono essere configurate per ogni distribuzione.

Soluzione: aumentare il valore timemout della distribuzione aggiornando la distribuzione. Queste proprietà vengono configurate nel parametro retry_settings. Per impostazione predefinita, viene configurato un timeout=30 e un retries=3. Quando si decide il valore del timeout, prendere in considerazione il numero di file elaborati in ogni batch e le dimensioni di ognuno di questi file. È anche possibile ridurli in modo da tenere conto di più mini batch di dimensioni minori e quindi più rapidi da eseguire.

ScriptExecution.StreamAccess.Authentication

Messaggio registrato: ScriptExecutionException è stato causato da StreamAccessException. StreamAccessException è stato causato da AuthenticationException.

Motivo: il cluster di calcolo in cui è in esecuzione la distribuzione non può montare l'archiviazione in cui si trova l'asset di dati. L'identità gestita dell'ambiente di calcolo non dispone delle autorizzazioni per eseguire il montaggio.

Soluzioni: verificare che l'identità associata al cluster di calcolo in cui la distribuzione sia in esecuzione abbia almeno accesso Lettore di dati BLOB di archiviazione all'account di archiviazione. Solo i proprietari degli account di archiviazione possono modificare il livello di accesso tramite il portale Azure.

Inizializzazione del set di dati non riuscita

Messaggio registrato: inizializzazione del set di dati non riuscita: UserErrorException: Messaggio: impossibile montare il set di dati(id='xxxxxx-xxxx-xxxx-xxxxxxxxxxxx', name='None', version=None). L'origine del set di dati non è accessibile o non contiene dati.

Motivo: il cluster di calcolo in cui è in esecuzione la distribuzione non può montare l'archiviazione in cui si trova l'asset di dati. L'identità gestita dell'ambiente di calcolo non dispone delle autorizzazioni per eseguire il montaggio.

Soluzioni: verificare che l'identità associata al cluster di calcolo in cui la distribuzione sia in esecuzione abbia almeno accesso Lettore di dati BLOB di archiviazione all'account di archiviazione. Solo i proprietari degli account di archiviazione possono modificare il livello di accesso tramite il portale Azure.

Il nodo del set di dati [codice] fa riferimento al parametro dataset_param che non ha un valore specificato o un valore predefinito

Messaggio registrato: il nodo del set di dati [codice] fa riferimento al parametro dataset_param che non ha un valore specificato o un valore predefinito.

Motivo: l'asset di dati di input fornito all'endpoint batch non è supportato.

Soluzione: assicurarsi di fornire un input di dati supportato per gli endpoint batch.

Errore del programma utente con eccezione: esecuzione non riuscita. Controllare i log per informazioni dettagliate

Messaggio registrato: errore del programma utente con eccezione: esecuzione non riuscita. Controllare i log per informazioni dettagliate È possibile controllare log/readme.txt per il layout dei log.

Motivo: si è verificato un errore durante l'esecuzione della funzione init() o run() dello script di assegnazione dei punteggi.

Soluzione: passare a output + log e aprire il file in logs > user > error > 10.0.0.X > process000.txt. Viene visualizzato il messaggio di errore generato dal init() metodo o run() .

ValueError: nessun oggetto da concatenare

Messaggio registrato: ValueError: nessun oggetto da concatenare.

Motivo: tutti i file nel mini-batch generato sono danneggiati o tipi di file non supportati. Tenere presente che i modelli MLflow supportano un subset di tipi di file come documentato in Considerazioni durante la distribuzione nell'inferenza batch.

Soluzione: passare al file logs/usr/stdout/<process-number>/process000.stdout.txt e cercare voci come ERROR:azureml:Error processing input file. Se il tipo di file non è supportato, esaminare l'elenco dei file supportati. Potrebbe essere necessario modificare il tipo di file dei dati di input o personalizzare la distribuzione fornendo uno script di assegnazione dei punteggi come indicato in Uso di modelli MLflow con uno script di assegnazione dei punteggi.

Non è presente alcun elemento batch con esito positivo restituito da run()

Messaggio registrato: non è presente alcun elemento batch con esito positivo restituito da run(). Controllare 'response: run()' in https://aka.ms/batch-inference-documentation.

Motivo: l'endpoint batch non è riuscito a fornire dati nel formato previsto al metodo run(). Può essere dovuto a file danneggiati in fase di lettura o incompatibilità dei dati di input con la firma del modello (MLflow).

Soluzione: per comprendere cosa può accadere, passare a Output e log e aprire il file in logs > user > stdout > 10.0.0.X > process000.stdout.txt. Cercare voci di errore come Error processing input file. È consigliabile trovare informazioni dettagliate sul motivo per cui il file di input non può essere letto correttamente.

I gruppi di destinatari in JWT non sono consentiti

Contesto: quando si richiama un endpoint batch usando le API REST.

Motivo: il token di accesso usato per richiamare l'API REST per l'endpoint/distribuzione indica un token rilasciato per un gruppo di destinatari/servizio diverso. I token Microsoft Entra vengono emessi per azioni specifiche.

Soluzione: quando si genera un token di autenticazione da usare con l'API REST dell'endpoint batch, assicurarsi che il parametro resource sia impostato su https://ml.azure.com. Si noti che questa risorsa è diversa dalla risorsa che è necessario indicare per gestire l'endpoint usando l'API REST. Tutte le risorse di Azure (inclusi gli endpoint batch) usano la risorsa https://management.azure.com per gestirle. Assicurarsi di usare l'URI della risorsa corretto in ogni caso. Si noti che se si vuole usare l'API di gestione e l'API di chiamata al processo contemporaneamente, sono necessari due token. Per informazioni dettagliate, vedere: Autenticazione su endpoint batch (REST).

Nessuna distribuzione valida a cui eseguire il routing. Verificare che l'endpoint abbia almeno una distribuzione con valori di peso positivo o usare un'intestazione specifica della distribuzione per instradare.

Motivo: la distribuzione batch predefinita non è impostata correttamente.

Soluzione: assicurarsi che la distribuzione batch predefinita sia impostata correttamente. Potrebbe essere necessario aggiornare la distribuzione batch predefinita. Per informazioni dettagliate, vedere: Aggiornare la distribuzione batch predefinita

Limitazioni e scenari non supportati

Quando si progettano soluzioni di Machine Learning che si basano su endpoint batch, alcune configurazioni e scenari potrebbero non essere supportate.

Le configurazioni dell'area di lavoro seguenti non sono supportate:

  • Aree di lavoro configurate con registri contenitori di Azure con la funzionalità quarantena abilitata.
  • Aree di lavoro con chiavi gestite dal cliente (CMK).

Le configurazioni di calcolo seguenti non sono supportate:

  • Cluster Kubernetes di Azure ARC.
  • Richiesta di risorse granulare (memoria, vCPU, GPU) per i cluster Azure Kubernetes. È possibile richiedere solo il numero di istanze.

I tipi di input seguenti non sono supportati:

  • Set di dati tabulari (V1).
  • Cartelle e set di dati di file (V1).
  • MLtable (V2).

Passaggi successivi