Eseguire il debug degli endpoint online in locale in Visual Studio Code

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 usare il debugger di Microsoft Visual Studio Code per testare e sottoporre a debug gli endpoint online in locale prima di distribuirli in Azure.

Gli endpoint locali di Azure Machine Learning consentono di testare e sottoporre a debug lo script di assegnazione dei punteggi, la configurazione dell'ambiente, la configurazione del codice e il modello di Machine Learning in locale.

Importante

Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate.

Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Il debug degli endpoint in locale prima di distribuirli nel cloud consente di rilevare gli errori nel codice e nella configurazione con largo anticipo. Sono disponibili differenti opzioni per eseguire il debug degli endpoint in locale con Visual Studio Code.

Questa guida è incentrata sugli endpoint locali.

La tabella seguente offre una panoramica degli scenari che consentono di scegliere le opzioni più adatte.

Scenario Server HTTP di inferenza Endpoint locale
Aggiornare l'ambiente Python locale, senza ricompilare l'immagine Docker No
Aggiornare lo script di assegnazione dei punteggi
Aggiornare le configurazioni di distribuzione (distribuzione, ambiente, codice, modello) No
Integrazione del debugger di Visual Studio Code

Prerequisiti

Questa guida presuppone che nel PC siano installati gli elementi seguenti in locale.

Per altre informazioni, vedere la guida su come preparare il sistema per la distribuzione di endpoint online.

Gli esempi di questo articolo si basano sugli esempi di codice contenuti nel repository GitHub azureml-examples. Per eseguire i comandi in locale senza dover copiare o incollare il file YAML e altri file, clonare il repository quindi cambiare le directory in azureml-examples/cli:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Se le impostazioni predefinite per l'interfaccia della riga di comando di Azure non sono state ancora impostate, salvare le proprie impostazioni predefinite. Per evitare di passare più volte i valori per la propria sottoscrizione, area di lavoro e gruppo di risorse, usare i comandi seguenti. Sostituire i parametri seguenti con i valori della propria configurazione specifica:

  • Sostituire <subscription> con l'ID della sottoscrizione di Azure.
  • Sostituire <workspace> con il nome dell'area di lavoro di Azure Machine Learning.
  • Sostituire <resource-group> con il gruppo di risorse di Azure contenente la propria area di lavoro.
  • Sostituire <location> con l'area di Azure contenente la propria area di lavoro.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Suggerimento

È possibile visualizzare le impostazioni predefinite correnti usando il comando az configure -l.

Avviare il contenitore di sviluppo

Gli endpoint locali di Azure Machine Learning usano i contenitori di sviluppo Docker e Visual Studio Code per creare e configurare un ambiente di debug locale. Con i contenitori di sviluppo è possibile sfruttare le funzionalità di Visual Studio Code all'interno di un contenitore Docker. Per altre informazioni sui contenitori di sviluppo, vedere Creare un contenitore di sviluppo.

Per eseguire il debug degli endpoint online in locale in Visual Studio Code, usare il flag --vscode-debug durante la creazione o l'aggiornamento di una distribuzione online di Azure Machine Learning. Il comando seguente usa un esempio di distribuzione del repository di esempi:

az ml online-deployment create --file endpoints/online/managed/sample/blue-deployment.yml --local --vscode-debug

Importante

In sottosistema Windows per Linux (WSL) è necessario aggiornare la variabile di ambiente PATH in modo da includere il percorso dell'eseguibile di Visual Studio Code o usare l'interoperabilità di WSL. Per altre informazioni, vedere Interoperabilità di Windows con Linux.

Viene creata un'immagine Docker in locale. In questa fase del processo vengono rilevati eventuali errori di configurazione dell'ambiente o di file del modello.

Nota

La prima volta che si avvia un contenitore di sviluppo nuovo o aggiornato, possono essere necessari diversi minuti.

Dopo la compilazione dell'immagine, il contenitore di sviluppo viene aperto in una finestra di Visual Studio Code.

Si useranno alcune estensioni di Visual Studio Code per eseguire il debug delle distribuzioni nel contenitore di sviluppo. Azure Machine Learning installa automaticamente queste estensioni nel contenitore di sviluppo.

Importante

Prima di avviare la sessione di debug, assicurarsi che l'installazione delle estensioni di Visual Studio Code sia stata completata nel contenitore di sviluppo.

Avviare la sessione di debug

Dopo aver configurato l'ambiente, usare il debugger di Visual Studio Code per testare e sottoporre a debug la distribuzione in locale.

  1. Aprire lo script di assegnazione dei punteggi in Visual Studio Code.

    Suggerimento

    Lo script score.py usato dall'endpoint distribuito in precedenza si trova in azureml-samples/cli/endpoints/online/managed/sample/score.py nel repository clonato. Tuttavia, i passaggi descritti in questa guida funzionano con qualsiasi script di assegnazione dei punteggi.

  2. Impostare un punto di interruzione in qualsiasi posizione all'interno dello script di assegnazione dei punteggi.

    • Per eseguire il debug del comportamento di avvio, posizionare i punti di interruzione all'interno della funzione init.
    • Per eseguire il debug del comportamento di assegnazione dei punteggi, posizionare i punti di interruzione all'interno della funzione run.
  3. Selezionare la visualizzazione Processo di Visual Studio Code.

  4. Nell'elenco a discesa Esegui con debug selezionare AzureML: Debug endpoint locale per avviare il debug dell'endpoint in locale.

    Nella sezione Punti di interruzione della visualizzazione Esegui verificare che:

    • L'opzione Eccezioni generate sia deselezionata
    • L'opzione Eccezioni non rilevate sia selezionata

    Screenshot che mostra come configurare il profilo di debug dell'ambiente locale di Debug di Azure Machine Learning.

  5. Selezionare l'icona di riproduzione accanto all'elenco a discesa Esegui con debug per avviare la sessione di debug.

    A questo punto, vengono rilevati tutti i punti di interruzione nella funzione init. Usare le azioni di debug per scorrere il codice. Per altre informazioni sulle azioni di debug, vedere la guida alle azioni di debug.

Per altre informazioni sul debugger di Visual Studio Code, vedere Debug.

Eseguire il debug dell'endpoint

Ora che l'applicazione è in esecuzione nel debugger, provare a fare una previsione per eseguire il debug dello script di assegnazione dei punteggi.

Usare il comando invoke dell'estensione ml per effettuare una richiesta all'endpoint locale.

az ml online-endpoint invoke --name <ENDPOINT-NAME> --request-file <REQUEST-FILE> --local

In questo caso, <REQUEST-FILE> è un file JSON che contiene esempi di dati di input per il modello per fare previsioni in modo simile al codice JSON seguente:

{"data": [
    [1,2,3,4,5,6,7,8,9,10], 
    [10,9,8,7,6,5,4,3,2,1]
]}

Suggerimento

L'URI di assegnazione dei punteggi è l'indirizzo in cui l'endpoint resta in ascolto delle richieste. Usare l'estensione ml per ottenere l'URI di assegnazione dei punteggi.

az ml online-endpoint show --name <ENDPOINT-NAME> --local

L'output dovrebbe essere simile al seguente:

{
 "auth_mode": "aml_token",
 "location": "local",
 "name": "my-new-endpoint",
 "properties": {},
 "provisioning_state": "Succeeded",
 "scoring_uri": "http://localhost:5001/score",
 "tags": {},
 "traffic": {},
 "type": "online"
}

L'URI di assegnazione dei punteggi è reperibile nella proprietà scoring_uri.

A questo punto, vengono rilevati tutti i punti di interruzione nella funzione run. Usare le azioni di debug per scorrere il codice. Per altre informazioni sulle azioni di debug, vedere la guida alle azioni di debug.

Modificare l'endpoint

Durante il debug e la risoluzione dei problemi dell'applicazione, in alcuni scenari in cui è necessario aggiornare lo script di assegnazione dei punteggi e le configurazioni.

Per applicare le modifiche al codice:

  1. Aggiornare il codice
  2. Riavviare la sessione di debug usando il comando Developer: Reload Window nel riquadro comandi. Per altre informazioni, vedere la documentazione del riquadro comandi.

Nota

Poiché la directory contenente il codice e gli asset dell'endpoint viene montata nel contenitore di sviluppo, tutte le modifiche apportate nel contenitore di sviluppo vengono sincronizzate con il file system locale.

Per modifiche più estese che coinvolgono gli aggiornamenti dell'ambiente e della configurazione dell'endpoint, usare il comando update dell'estensione ml. In questo modo viene attivata una ricompilazione completa dell'immagine con le modifiche.

az ml online-deployment update --file <DEPLOYMENT-YAML-SPECIFICATION-FILE> --local --vscode-debug

Dopo la compilazione dell'immagine aggiornata e l'avvio del contenitore di sviluppo, usare il debugger di Visual Studio Code per testare e risolvere i problemi dell'endpoint aggiornato.