Share via


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 ed eseguire il debug degli 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 non è consigliabile usarla per 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 diverse opzioni per 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 in questo articolo sono basati su esempi di codice contenuti nel repository GitHub azureml-examples . Per eseguire i comandi in locale senza dover copiare/incollare YAML e altri file, clonare il repository e quindi modificare 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 già state impostate, salvare le proprie impostazioni predefinite. Per evitare di passare più volte i valori per la sottoscrizione, l'area di lavoro e il gruppo di risorse, eseguire i comandi seguenti. Sostituire i parametri seguenti con i valori relativi alla 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 che contiene l'area di lavoro.
  • Sostituire <location> con l'area di Azure che contiene l'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 contenitori di sviluppo Docker e Visual Studio Code (contenitori di sviluppo) per compilare e configurare un ambiente di debug locale. Con i contenitori di sviluppo è possibile sfruttare le funzionalità di Visual Studio Code dall'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 durante la --vscode-debug creazione o l'aggiornamento e la 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 per includere il percorso dell'eseguibile di Visual Studio Code o usare l'interoperabilità 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 alcuni minuti.

Una volta compilata correttamente l'immagine, il contenitore di sviluppo viene aperto in una finestra di Visual Studio Code.

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

Importante

Prima di avviare la sessione di debug, assicurarsi che le estensioni di Visual Studio Code siano state completate nell'installazione nel contenitore di sviluppo.

Avviare la sessione di debug

Dopo aver configurato l'ambiente, usare il debugger di Visual Studio Code per testare ed eseguire il debug della 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 e 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 e 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 aver compilato l'immagine aggiornata e aver avviato il contenitore di sviluppo, usare il debugger di Visual Studio Code per testare e risolvere i problemi dell'endpoint aggiornato.