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 o l'inferenza 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 versione all'interno dell'area di lavoro di Machine Learning che consentono flussi di lavoro riproducibili, controllabili e portabili in un'ampia gamma di 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 oggetto Environment nella configurazione del processo (per il training) e nella configurazione di inferenza e distribuzione (per le distribuzioni del servizio Web).

Diagramma di un ambiente nel flusso di lavoro di Machine Learning

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

Tipi di ambienti

Gli ambienti possono essere suddivisi in tre categorie: curati, gestiti dall'utente e gestiti 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 apprendimento automatico. Questi ambienti precreati consentono anche tempi di distribuzione più rapidi. Gli ambienti curati sono ospitati nel Registro AzureML, ovvero un registro di Machine Learning ospitato da Microsoft. Per un elenco completo, vedere gli ambienti nel Registro AzureML.

Negli ambienti gestiti dall'utente è necessario configurare l'ambiente e installare ogni pacchetto richiesto dallo script di training nella destinazione di calcolo. Assicurarsi anche di includere eventuali dipendenze necessarie per la distribuzione 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 Azure Machine Learning. Analogamente agli ambienti curati, è possibile condividere ambienti gestiti dall'utente tra aree di lavoro usando un registro di Machine Learning creato e gestito.

Usare gli ambienti gestiti dal sistema quando si vuole che conda gestisca l'ambiente Python per conto dell'utente. Un nuovo ambiente conda viene materializzato dalla specifica conda sopra un'immagine Docker di base.

Crea e gestisci gli ambienti

È possibile creare ambienti dall'estensione Python SDK di Azure Machine Learning, interfaccia della riga di comando di Azure Machine Learning, studio di Azure Machine Learning e 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 modificandone una esistente.
  • Visualizzare le modifiche apportate agli ambienti nel tempo, garantendone la riproducibilità.
  • Creare automaticamente immagini Docker dagli ambienti.

Gli ambienti "anonimi" vengono registrati automaticamente nell'area di lavoro quando si invia un esperimento. Non sono elencati, ma è possibile usare la versione per recuperarli.

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

Compilazione, memorizzazione nella cache e riutilizzo dell'ambiente

Azure Machine Learning compila le 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, Azure Machine Learning 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 Azure Machine Learning 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 fornita. 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 di sistema di Azure Machine Learning. All'inizio dell'esecuzione del processo, la destinazione di calcolo recupera l'immagine 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 Azure Machine Learning, 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, vengono fornite compilazioni di contesto Docker così come sono. In questo caso l'utente è responsabile dell'installazione di qualsiasi pacchetto Python, includendolo nell'immagine di base o specificando passaggi di 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, vedere 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. Confronta quindi l'hash 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
  • Passaggi di Docker personalizzati
  • Pacchetti Python

Il nome e la versione dell'ambiente non hanno alcun effetto sull'hash. 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, le modifiche apportate alla definizione dell'ambiente, ad esempio l'aggiunta o la rimozione di un pacchetto Python o la modifica di una versione del pacchetto, causano la modifica del valore hash risultante. La modifica dell'ordine delle dipendenze o dei canali in un ambiente modifica l'hash e richiede 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 agli 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 gli hash 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 comportano lo stesso hash e l'immagine memorizzata nella cache corrispondente. Il terzo ambiente ha pacchetti e versioni Python diversi, che generano un'immagine hash e memorizzata nella cache diversa.

Diagramma della memorizzazione nella cache dell'ambiente e delle immagini Docker

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

Importante

  • Se si crea un ambiente con una dipendenza del pacchetto sbloccata (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 di numpy in numpy==1.18.1. Verranno installate nuove dipendenze, incluse quelle annidate, e potrebbero interrompere uno scenario di lavoro precedente.

  • L'uso di un'immagine di base sbloccata come mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 nella definizione dell'ambiente potrebbe comportare la ricompilazione dell'immagine ogni volta che il tag latest 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. Gli aggiornamenti per le immagini supportate vengono rilasciati ogni due settimane, con un impegno che non prevede vulnerabilità senza patch precedenti a 30 giorni nell'ultima versione dell'immagine. Le immagini con patch vengono rilasciate con un nuovo tag non modificabile e il tag :latest 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 delle stesse e degli asset di Azure Machine Learning che le usano.

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