Gestire gli ambienti di Azure Machine Learning con l'interfaccia della riga di comando e l'SDK (v2)

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

Gli ambienti di Azure Machine Learning definiscono gli ambienti di esecuzione per i processi o le distribuzioni e incapsulano le dipendenze per il codice. Azure Machine Learning usa la specifica dell'ambiente per creare il contenitore Docker in cui viene eseguito il training o il codice di assegnazione dei punteggi nella destinazione di calcolo specificata. È possibile definire un ambiente da una specifica Conda, un'immagine Docker o un contesto di compilazione Docker.

Questo articolo illustra come creare e gestire ambienti di Azure Machine Learning usando l'SDK e l'interfaccia della riga di comando (v2).

Prerequisiti

Prima di seguire la procedura descritta in questo articolo, assicurarsi di disporre dei prerequisiti seguenti:

Suggerimento

Per un ambiente di sviluppo completo, usare Visual Studio Code e l'estensione Azure Machine Learning per gestire le risorse di Azure Machine Learning ed eseguire il training di modelli di Machine Learning.

Clonare il repository degli esempi

Per eseguire gli esempi di training, clonare prima di tutto il repository di esempi. Per gli esempi dell'interfaccia della riga di comando, passare alla cli directory . Per gli esempi dell'SDK, passare alla sdk/python/assets/environment directory :

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

Si noti che --depth 1 clona solo il commit più recente nel repository, riducendo il tempo necessario per completare l'operazione.

Connettersi all'area di lavoro

Suggerimento

Usare le schede seguenti per selezionare il metodo da usare per lavorare con gli ambienti. Se si seleziona una scheda, tutte le schede di questo articolo verranno automaticamente visualizzate nella stessa scheda. È possibile selezionare un'altra scheda in qualsiasi momento.

Quando si usa l'interfaccia della riga di comando di Azure, sono necessari parametri di identificatore, ovvero una sottoscrizione, un gruppo di risorse e un nome dell'area di lavoro. Sebbene sia possibile specificare questi parametri per ogni comando, è anche possibile impostare le impostazioni predefinite usate per tutti i comandi. Usare i comandi seguenti per impostare i valori predefiniti. Sostituire <subscription ID>, <Azure Machine Learning workspace name> e <resource group> con i valori per la configurazione:

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

Ambienti dedicati

Esistono due tipi di ambienti in Azure Machine Learning: ambienti curati e personalizzati. Gli ambienti curati sono ambienti predefiniti contenenti framework e strumenti di Machine Learning più diffusi. Gli ambienti personalizzati sono definiti dall'utente e possono essere creati tramite az ml environment create.

Gli ambienti curati sono forniti da Azure Machine Learning e sono disponibili per impostazione predefinita. Azure Machine Learning aggiorna regolarmente questi ambienti con le versioni più recenti del framework e le gestisce per le correzioni di bug e le patch di sicurezza. Sono supportate da immagini Docker memorizzate nella cache, riducendo i costi di preparazione dei processi e il tempo di distribuzione del modello.

È possibile usare questi ambienti curati per il training o la distribuzione facendo riferimento a una versione specifica o a una versione più recente dell'ambiente. Usare la sintassi seguente: azureml://registries/azureml/environment/<curated-environment-name>/versions/<version-number> o azureml://registries/azureml/environment/<curated-environment-name>/labels/latest. È anche possibile usarli come riferimento per gli ambienti personalizzati modificando i Dockerfile che rispondono a questi ambienti curati.

È possibile visualizzare il set di ambienti curati disponibili nell'interfaccia utente studio di Azure Machine Learning oppure usando l'interfaccia della riga di comando (v2) tramite az ml environment list.

Suggerimento

Quando si lavora con ambienti curati nell'interfaccia della riga di comando o nell'SDK, il nome dell'ambiente inizia con AzureML- seguito dal nome dell'ambiente curato. Quando si usa il studio di Azure Machine Learning, non hanno questo prefisso. Il motivo di questa differenza è che l'interfaccia utente di Studio visualizza ambienti curati e personalizzati in schede separate, quindi il prefisso non è necessario. L'interfaccia della riga di comando e l'SDK non dispongono di questa separazione, quindi il prefisso viene usato per distinguere tra ambienti curati e personalizzati.

Creare un ambiente personalizzato

È possibile definire un ambiente da un'immagine Docker, un contesto di compilazione Docker e una specifica conda con l'immagine Docker.

Creare un ambiente da un'immagine Docker

Per definire un ambiente da un'immagine Docker, specificare l'URI immagine dell'immagine ospitata in un registro, ad esempio Docker Hub o Registro Azure Container.

L'esempio seguente è un file di specifica YAML per un ambiente definito da un'immagine Docker. Un'immagine del repository PyTorch ufficiale nell'hub Docker viene specificata tramite la image proprietà nel file YAML.

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-example
image: pytorch/pytorch:latest
description: Environment created from a Docker image.

Per creare l'ambiente:

az ml environment create --file assets/environment/docker-image.yml

Suggerimento

Azure Machine Learning gestisce un set di immagini di base basate su CPU e GPU Ubuntu basate su Linux con dipendenze di sistema comuni. Ad esempio, le immagini GPU contengono Miniconda, OpenMPI, CUDA, cuDNN e NCCL. È possibile usare queste immagini per gli ambienti o usare i Dockerfile corrispondenti come riferimento per la creazione di immagini personalizzate.

Per il set di immagini di base e i dockerfile corrispondenti, vedere il repository AzureML-Containers.

Creare un ambiente da un contesto di compilazione Docker

Anziché definire un ambiente da un'immagine predefinita, è anche possibile definirne uno da un contesto di compilazione Docker. A tale scopo, specificare la directory che funge da contesto di compilazione. Questa directory deve contenere un Dockerfile (non superiore a 1 MB) ed eventuali altri file necessari per compilare l'immagine.

L'esempio seguente è un file di specifica YAML per un ambiente definito da un contesto di compilazione. Il percorso locale della cartella del contesto di compilazione viene specificato nel build.path campo e il percorso relativo al Dockerfile all'interno della build.dockerfile_path cartella del contesto di compilazione viene specificato nel campo . Se build.dockerfile_path viene omesso nel file YAML, Azure Machine Learning cerca un Dockerfile denominato Dockerfile nella radice del contesto di compilazione.

In questo esempio, il contesto di compilazione contiene un Dockerfile denominato Dockerfile e un requirements.txt file a cui viene fatto riferimento all'interno del Dockerfile per l'installazione dei pacchetti Python.

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-context-example
build:
  path: docker-contexts/python-and-pip

Per creare l'ambiente:

az ml environment create --file assets/environment/docker-context.yml

Azure Machine Learning inizia a creare l'immagine dal contesto di compilazione quando viene creato l'ambiente. È possibile monitorare lo stato della compilazione e visualizzare i log di compilazione nell'interfaccia utente di Studio.

Creare un ambiente da una specifica conda

È possibile definire un ambiente usando un file di configurazione YAML conda standard che include le dipendenze per l'ambiente conda. Per informazioni su questo formato standard, vedere Creazione manuale di un ambiente.

È anche necessario specificare un'immagine Docker di base per questo ambiente. Azure Machine Learning compila l'ambiente conda sopra l'immagine Docker fornita. Se si installano alcune dipendenze Python nell'immagine Docker, tali pacchetti non esistono nell'ambiente di esecuzione causando quindi errori di runtime. Per impostazione predefinita, Azure Machine Learning compila un ambiente Conda con le dipendenze specificate ed esegue il processo in tale ambiente anziché usare le librerie Python installate nell'immagine di base.

L'esempio seguente è un file di specifica YAML per un ambiente definito da una specifica conda. Qui il percorso relativo del file conda dal file YAML dell'ambiente Azure Machine Learning viene specificato tramite la conda_file proprietà . In alternativa, è possibile definire la specifica conda inline usando la conda_file proprietà anziché definirla in un file separato.

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: docker-image-plus-conda-example
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
conda_file: conda-yamls/pydata.yml
description: Environment created from a Docker image plus Conda environment.

Per creare l'ambiente:

az ml environment create --file assets/environment/docker-image-plus-conda.yaml

Azure Machine Learning compila l'immagine Docker finale da questa specifica di ambiente quando l'ambiente viene usato in un processo o in una distribuzione. È anche possibile attivare manualmente una compilazione dell'ambiente nell'interfaccia utente di Studio.

Gestione degli ambienti

L'SDK e l'interfaccia della riga di comando (v2) consentono anche di gestire il ciclo di vita degli asset dell'ambiente di Azure Machine Learning.

List

Elencare tutti gli ambienti nell'area di lavoro:

az ml environment list

Elencare tutte le versioni dell'ambiente con un nome specificato:

az ml environment list --name docker-image-example

Mostra

Ottenere i dettagli di un ambiente specifico:

az ml environment show --name docker-image-example --version 1

Aggiornamento

Aggiornare le proprietà modificabili di un ambiente specifico:

az ml environment update --name docker-image-example --version 1 --set description="This is an updated description."

Importante

Solo per gli ambienti description e tags possono essere aggiornati. Tutte le altre proprietà non sono modificabili; se è necessario modificare una di queste proprietà, è necessario creare una nuova versione dell'ambiente.

Archivio

L'archiviazione di un ambiente lo nasconde per impostazione predefinita dalle query di elenco (az ml environment list). È comunque possibile continuare a fare riferimento e usare un ambiente archiviato nei flussi di lavoro. È possibile archiviare tutte le versioni di un ambiente o solo una versione specifica.

Se non si specifica una versione, tutte le versioni dell'ambiente con il nome specificato vengono archiviate. Se si crea una nuova versione dell'ambiente in un contenitore di ambiente archiviato, tale nuova versione viene impostata automaticamente come archiviata.

Archiviare tutte le versioni di un ambiente:

az ml environment archive --name docker-image-example

Archiviare una versione specifica dell'ambiente:

az ml environment archive --name docker-image-example --version 1

Usare gli ambienti per il training

Per usare un ambiente personalizzato per un processo di training, specificare il environment campo della configurazione YAML del processo. È possibile fare riferimento a un ambiente azure Machine Learning registrato esistente tramite environment: azureml:<environment-name>:<environment-version> o environment: azureml:<environment-name>@latest (per fare riferimento alla versione più recente di un ambiente) o definire una specifica di ambiente inline. Se si definisce un ambiente inline, non specificare i name campi e version , poiché questi ambienti vengono considerati ambienti "non registrati" e non vengono rilevati nel registro degli asset di ambiente.

Quando si invia un processo di training, la compilazione di un nuovo ambiente può richiedere alcuni minuti. La durata dipende dalle dimensioni delle dipendenze richieste. Gli ambienti vengono memorizzati nella cache dal servizio. Finché la definizione dell'ambiente rimane invariata, la configurazione completa verrà eseguita una sola volta.


Per altre informazioni su come usare gli ambienti nei processi, vedere Eseguire il training dei modelli.

Usare gli ambienti per le distribuzioni di modelli

È anche possibile usare gli ambienti per le distribuzioni di modelli per l'assegnazione dei punteggi online e batch. A tale scopo, specificare il environment campo nella configurazione YAML di distribuzione.

Per altre informazioni su come usare gli ambienti nelle distribuzioni, vedere Distribuire e assegnare punteggi a un modello di Machine Learning usando un endpoint online.

Passaggi successivi