Che cosa sono gli ambienti di Azure Machine Learning?

Gli ambienti di Azure Machine Learning sono un incapsulamento dell'ambiente in cui si verifica il training di Machine Learning. Specificano i pacchetti Python e le impostazioni software per il training e gli script di assegnazione dei punteggi. Gli ambienti sono entità gestite e con controllo delle versioni all'interno dell'area di lavoro di Machine Learning che consentono flussi di lavoro riproducibili, controllabili e portabili di Machine Learning in varie destinazioni di calcolo.

È possibile usare un oggetto Environment per:

  • Sviluppare lo script di training.
  • Riutilizzare lo stesso ambiente nell'ambiente di calcolo di Machine Learning per il training dei modelli su larga scala.
  • Distribuire il modello con lo stesso ambiente.
  • Rivedere l'ambiente in cui è stato eseguito il training di un modello esistente.

Il diagramma seguente illustra come usare un singolo Environment oggetto nella configurazione del processo (per il training) e nella configurazione di inferenza e distribuzione (per le distribuzioni del servizio Web).

Diagram of an environment in machine learning workflow

L'ambiente, la destinazione di calcolo e lo script di training formano insieme la configurazione del processo: la specifica completa di un processo di training.

Tipi di ambienti

Gli ambienti possono essere suddivisi in tre categorie: curate, gestite dall'utente e gestite dal sistema.

Gli ambienti curati vengono forniti da Azure Machine Learning e sono disponibili nell'area di lavoro per impostazione predefinita. Destinati a essere usati così come sono, contengono raccolte di pacchetti e impostazioni Python per iniziare a usare diversi framework di Machine Learning. Questi ambienti precreati consentono anche tempi di distribuzione più rapidi. Gli ambienti curati sono ospitati in Registro AzureML. Per un elenco completo, vedere gli ambienti nel registro azureml.

Negli ambienti gestiti dall'utente si è responsabili della configurazione dell'ambiente e dell'installazione di ogni pacchetto necessario per lo script di training nella destinazione di calcolo. Assicurarsi anche di includere eventuali dipendenze necessarie per la distribuzione del modello. L'ambiente gestito dall'utente può essere BYOC (Bring Your Own Container) o Docker Build Context basato su che delega la materializzazione delle immagini ad AzureML.

Gli ambienti gestiti dal sistema vengono usati quando si vuole che conda gestisca l'ambiente Python. Un nuovo ambiente conda viene materializzato dalla specifica conda sopra un'immagine Docker di base.

Crea e gestisci gli ambienti

È possibile creare ambienti da client come Azure Machine Learning Python SDK, interfaccia della riga di comando di Azure Machine Learning, pagina Ambienti in studio di Azure Machine Learning e estensione VS Code. Ogni client consente di personalizzare l'immagine di base, il Dockerfile e il livello Python, se necessario.

Per esempi di codice specifici, vedere la sezione "Creare un ambiente" di Come usare gli ambienti.

Gli ambienti sono anche facilmente gestiti tramite l'area di lavoro, che consente di:

  • Registrare gli ambienti.
  • Recuperare gli ambienti dall'area di lavoro da usare per il training o la distribuzione.
  • Creare una nuova istanza di un ambiente modificando una esistente.
  • Visualizzare le modifiche apportate agli ambienti nel tempo, garantendo la riproducibilità.
  • Creare automaticamente immagini Docker dagli ambienti.

Gli ambienti "anonimi" vengono registrati automaticamente nell'area di lavoro quando si invia un esperimento. Non verranno elencati, ma potrebbero essere recuperati per versione.

Per esempi di codice, vedere la sezione "Gestire gli ambienti" di Come usare gli ambienti.

Creazione, memorizzazione nella cache e riutilizzo dell'ambiente

Azure Machine Learning compila definizioni di ambiente in immagini Docker. Memorizza nella cache anche gli ambienti in modo che possano essere riutilizzati nei processi di training successivi e nelle distribuzioni degli endpoint di servizio. L'esecuzione di uno script di training in remoto richiede la creazione di un'immagine Docker. Per impostazione predefinita, AzureML gestisce la destinazione di compilazione delle immagini nella quota di calcolo serverless dell'area di lavoro disponibile se non è stato impostato alcun calcolo dedicato per l'area di lavoro.

Nota

Qualsiasi restrizione di rete nell'area di lavoro di AzureML potrebbe richiedere la configurazione di calcolo della compilazione di immagini gestite dall'utente dedicata. Seguire la procedura per proteggere le risorse dell'area di lavoro.

Invio di un processo tramite un ambiente

Quando si invia un processo remoto usando un ambiente o si crea manualmente un'istanza di ambiente, Azure Machine Learning compila un'immagine per la specifica specificata. L'immagine del risultato viene memorizzata nella cache nell'istanza del registro contenitori associata all'area di lavoro. Gli ambienti curati sono già memorizzati nella cache nel Registro AzureML. All'inizio dell'esecuzione del processo, l'immagine viene recuperata dalla destinazione di calcolo dal registro contenitori pertinente.

Creazione di ambienti come immagini Docker

Se l'immagine per una determinata definizione di ambiente non esiste già nell'istanza del registro contenitori associata all'area di lavoro di AzureML, viene compilata una nuova immagine. Per gli ambienti gestiti dal sistema, la compilazione dell'immagine è costituita da due passaggi:

  1. Download di un'immagine di base ed esecuzione di tutti i passaggi di Docker
  2. Creazione di un ambiente conda in base alle dipendenze conda specificate nella definizione dell'ambiente.

Per gli ambienti gestiti dall'utente forniti dal contesto Docker verrà compilato così come è. In questo caso si è responsabili dell'installazione di qualsiasi pacchetto Python, includendoli nell'immagine di base o specificando passaggi Docker personalizzati.

Memorizzazione nella cache e riutilizzo delle immagini

Se si usa la stessa definizione di ambiente per un altro processo, Azure Machine Learning riutilizza l'immagine memorizzata nella cache dal registro contenitori associato all'area di lavoro.

Per visualizzare i dettagli di un'immagine memorizzata nella cache, controllare la pagina Ambienti in studio di Azure Machine Learning o usare MLClient.environments per ottenere e controllare l'ambiente.

Per determinare se riutilizzare un'immagine memorizzata nella cache o crearne una nuova, Azure Machine Learning calcola un valore hash dalla definizione dell'ambiente e lo confronta con gli hash degli ambienti esistenti. L'hash funge da identificatore univoco per un ambiente e si basa sulla definizione dell'ambiente:

  • Immagine di base
  • Procedura docker personalizzata
  • Pacchetti Python

L'hash non è interessato dal nome o dalla versione dell'ambiente. Se si rinomina l'ambiente o si crea un nuovo ambiente con le stesse impostazioni e pacchetti di un altro ambiente, il valore hash rimane invariato. Tuttavia, la definizione dell'ambiente cambia come l'aggiunta o la rimozione di un pacchetto Python o la modifica di una versione del pacchetto modifica il valore hash risultante. La modifica dell'ordine delle dipendenze o dei canali in un ambiente modificherà anche l'hash e richiederà una nuova compilazione di immagini. Analogamente, qualsiasi modifica apportata a un ambiente curato comporta la creazione di un ambiente personalizzato.

Nota

Non sarà possibile inviare modifiche locali a un ambiente curato senza modificare il nome dell'ambiente. I prefissi "AzureML-" e "Microsoft" sono riservati esclusivamente per gli ambienti curati e l'invio del processo avrà esito negativo se il nome inizia con uno di essi.

Il valore hash calcolato dell'ambiente viene confrontato con quelli nel registro contenitori dell'area di lavoro. Se esiste una corrispondenza, l'immagine memorizzata nella cache viene estratta e usata; in caso contrario, viene attivata una compilazione di immagini.

Il diagramma seguente illustra tre definizioni di ambiente. Due di essi hanno nomi e versioni diverse, ma immagini di base identiche e pacchetti Python, che generano lo stesso hash e l'immagine memorizzata nella cache corrispondente. Il terzo ambiente ha pacchetti e versioni Python diversi, causando un'immagine hash e memorizzata nella cache diversa.

Diagram of environment caching and Docker images

Le immagini effettive memorizzate nella cache nel registro contenitori dell'area di lavoro hanno nomi simili all'hash azureml/azureml_e9607b2514b066c851012848913ba19f visualizzato alla fine.

Importante

  • Se si crea un ambiente con una dipendenza del pacchetto non rimossa (ad esempio, numpy), l'ambiente usa la versione del pacchetto disponibile al momento della creazione dell'ambiente. Qualsiasi ambiente futuro che usa una definizione corrispondente userà la versione originale.

    Per aggiornare il pacchetto, specificare un numero di versione per forzare la ricompilazione di un'immagine. Un esempio di questo comportamento è la modifica numpy di in numpy==1.18.1. Nuove dipendenze, incluse quelle annidate, verranno installate e potrebbero interrompere uno scenario di lavoro precedente.

  • L'uso di un'immagine di base non bloccata come mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 nella definizione dell'ambiente può comportare la ricompilazione dell'immagine ogni volta che il latest tag viene aggiornato. Ciò consente all'immagine di ricevere le patch e gli aggiornamenti di sistema più recenti.

Applicazione di patch alle immagini

Microsoft è responsabile dell'applicazione di patch alle immagini di base per le vulnerabilità di sicurezza note. Aggiornamenti per le immagini supportate vengono rilasciate ogni due settimane, con l'impegno di non eseguire il patching di vulnerabilità precedenti a 30 giorni nell'ultima versione dell'immagine. Le immagini con patch vengono rilasciate con un nuovo tag non modificabile e il :latest tag viene aggiornato alla versione più recente dell'immagine con patch.

È necessario aggiornare gli asset di Azure Machine Learning associati per usare la nuova immagine con patch. Ad esempio, quando si usa un endpoint online gestito, è necessario ridistribuire l'endpoint per usare l'immagine con patch.

Se si forniscono immagini personalizzate, si è responsabili dell'aggiornamento e dell'aggiornamento degli asset di Azure Machine Learning che li usano.

Per altre informazioni sulle immagini di base, vedere i collegamenti seguenti:

Passaggi successivi

  • Informazioni su come creare e usare ambienti in Azure Machine Learning.
  • Vedere la documentazione di riferimento di Python SDK per la classe di ambiente.