Présentation des environnements Azure Machine Learning

Les environnements Azure Machine Learning sont une encapsulation de l’environnement dans lequel votre formation Machine Learning se produit. Ils spécifient les packages Python et les paramètres logiciels autour de vos scripts de formation et de notation. Les environnements sont des entités gérées et versionnées au sein de votre espace de travail Machine Learning qui permettent des flux de travail de Machine Learning reproductibles, auditables et portables sur diverses cibles de calcul.

Vous pouvez utiliser un objet Environment pour :

  • Développer votre script d’apprentissage.
  • Réutiliser le même environnement sur la capacité de calcul Azure Machine Learning pour l’apprentissage du modèle à l’échelle.
  • Déployer votre modèle avec le même environnement.
  • Revisitez l’environnement dans lequel un modèle existant a été formé.

Le diagramme suivant montre comment vous pouvez utiliser un seul objet Environment à la fois dans votre configuration de tâche (pour l’apprentissage) et votre configuration d’inférence et de déploiement (pour les déploiements de services web).

Diagram of an environment in machine learning workflow

L'environnement, la cible de calcul et le script de formation forment ensemble la configuration de la tâche : la spécification complète d'une tâche de formation.

Types d’environnements

Les environnements se répartissent globalement en trois catégories : organisés, gérés par l’utilisateur et gérés par le système.

Les environnements organisés sont fournis par Azure Machine Learning et sont disponibles dans votre espace de travail par défaut. Prévus pour être utilisés tels quels, ils contiennent des collections de packages et paramètres Python destinés à vous aider à prendre en main diverses infrastructures de Machine Learning. Ces environnements précréés permettent également d’accélérer le déploiement. Les environnements organisés sont hébergés dans AzureML Registry. Pour une liste complète, consultez les environnements dans le registre azureml.

Dans un environnement géré par l’utilisateur, vous êtes responsable de la configuration de votre environnement et de l’installation de chaque package dont votre script d’apprentissage a besoin sur la cible de calcul. Veillez également à inclure toutes les dépendances nécessaires pour le modèle de déploiement. L’environnement géré par l’utilisateur peut être basé sur BYOC (Bring Your Own Container) ou Docker Build Context qui délègue la matérialisation des images à AzureML.

Vous utilisez des environnements gérés par le système quand vous souhaitez que Conda gère l’environnement Python pour vous. Un nouvel environnement Conda est matérialisé à partir de votre spécification Conda sur une image Docker de base.

Créer et gérer des environnements

Vous pouvez créer des environnements à partir de clients tels que le Kit de développement logiciel (SDK) Python Azure Machine Learning, l’interface CLI d’Azure Machine Learning, la page Environnements dans Azure Machine Learning Studio, et l’extension VS Code. Chaque client vous permet de personnaliser l’image de base, le Dockerfile et la couche Python, si nécessaire.

Pour des exemples de code spécifiques, consultez la section « Créer un environnement » de Comment utiliser les environnements.

Les environnements sont également facilement gérés via votre espace de travail, ce qui vous permet d’effectuer les opérations suivantes :

  • Inscrire des environnements.
  • Extraire des environnements de votre espace de travail à des fins d’apprentissage ou de déploiement.
  • Créer une instance d’un environnement en modifiant une instance existante.
  • Afficher les modifications apportées à vos environnements au fil du temps, ce qui garantit la reproductibilité.
  • Créer automatiquement des images Docker à partir de vos environnements.

Les environnements «anonymes» sont automatiquement inscrits dans votre espace de travail lorsque vous soumettez une expérience. Ils ne sont pas listés, mais peuvent être récupérés par version.

Pour des exemples de code, consultez la section « Gérer les environnements » de Comment utiliser les environnements.

Création, mise en cache et réutilisation d’environnement

Azure Machine Learning génère des définitions d’environnement dans des images Docker. Il met également en cache les environnements afin qu’ils puissent être réutilisés lors des tâches d’entraînement et des déploiements de points de terminaison de service ultérieurs. L’exécution d’un script d’apprentissage à distance requiert la création d’une image Docker. Par défaut, AzureML gère la cible de génération d’image sur l’espace de travail disponible quota de calcul serverless si aucun jeu de calcul dédié pour l’espace de travail n’est défini.

Remarque

Toute restriction réseau dans AzureML Workspace peut nécessiter une configuration de calcul de création d’images gérées par l’utilisateur dédié. Suivez les étapes pour des ressources d’espace de travail sécurisées.

Envoi d’une tâche à l’aide d’un environnement

Lorsque vous soumettez pour la première fois une tâche distante à l’aide d’un environnement ou créez manuellement une instance d’environnement, Azure Machine Learning crée une image pour la spécification fournie. L'image du résultat est mise en cache dans l'instance de registre de conteneurs associée à l'espace de travail. Les environnements organisés sont déjà mis en cache dans le registre AzureML. Au début de l'exécution de la tâche, l'image est récupérée par la cible de calcul à partir du registre de conteneurs approprié.

Génération d’environnements en tant qu’images Docker

Si l’image d’une définition d’environnement particulière n’existe pas déjà dans l’instance de registre de conteneurs associée à AzureML Workspace, une nouvelle image est créée. Pour les environnements gérés par le système, la création de l'image se compose de deux étapes :

  1. Téléchargement d’une image de base et exécution des étapes Docker
  2. Génération d’un environnement Conda en fonction des dépendances Conda spécifiées dans la définition d’environnement

Pour les environnements gérés par les utilisateurs, le contexte Docker fourni sera construit tel quel. Dans ce cas, vous êtes responsable de l’installation des packages Python, en les incluant dans votre image de base, ou de la spécification des étapes Docker personnalisées.

Mise en cache et réutilisation des images

Si vous utilisez la même définition d'environnement pour une autre tâche, Azure Machine Learning réutilise l'image mise en cache du registre de conteneurs associé à votre espace de travail.

Pour afficher les détails d’une image mise en cache, consultez la page Environnements dans Azure Machine Learning Studio, ou utilisez MLClient.environments pour obtenir et inspecter l’environnement.

Pour déterminer s’il faut réutiliser une image mise en cache ou en créer une, Azure Machine Learning calcule une valeur de hachage à partir de la définition d’environnement et la compare aux hachages d’environnements existants. Le hachage sert d'identifiant unique pour un environnement et est basé sur la définition de l'environnement :

  • Base image
  • Étapes Docker personnalisées
  • Packages Python

Le hachage n’est pas affecté par le nom ou la version de l’environnement. Si vous renommez votre environnement ou en créez un nouveau avec les mêmes paramètres et packages qu'un autre environnement, la valeur de hachage reste la même. Cependant, les modifications de la définition de l'environnement, comme l'ajout ou la suppression d'un package Python ou la modification d'une version d'un package, modifient la valeur de hachage résultante. La modification de l’ordre des dépendances ou des canaux dans un environnement modifie également le hachage, et nécessite une nouvelle génération d’image. De même, toute modification apportée à un environnement organisé entraîne la création d'un environnement personnalisé.

Remarque

Vous ne pouvez pas soumettre des modifications locales d’un environnement organisé sans modifier son nom. Les préfixes « AzureML- » et « Microsoft » sont réservés exclusivement aux environnements organisés, et votre soumission de travail échoue si le nom commence par l’un des deux.

La valeur de hachage calculée de l'environnement est comparée à celles du registre de conteneurs Workspace. S'il y a une correspondance, l'image mise en cache est extraite et utilisée, sinon une création d'image est déclenchée.

Le diagramme suivant montre trois définitions d’environnement. Deux d’entre elles ont des noms et versions différents, mais des images de base et des packages Python identiques, produisant les mêmes hachage et image mise en cache. Le troisième environnement a des packages et versions Python différents qui produisent un hachage et une image mise en cache différents.

Diagram of environment caching and Docker images

Les images mises en cache réelles dans votre registre de conteneurs d’espace de travail ont des noms similaires à azureml/azureml_e9607b2514b066c851012848913ba19f avec le hachage apparaissant à la fin.

Important

  • Si vous créez un environnement avec une dépendance de package non épinglée (par exemple, numpy), l’environnement utilise la version de package qui était disponible lors de sa création. Tout environnement futur utilisant une définition correspondante utilisera la version d’origine.

    Pour mettre à jour le package, spécifiez un numéro de version afin de forcer la régénération de l’image. Un exemple de cela serait de changer numpy en numpy==1.18.1. De nouvelles dépendances, notamment imbriquées, seront installées et pourraient nuire au bon fonctionnement d’un scénario précédemment opérationnel.

  • L’utilisation d’une image de base non épinglé telle que mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 dans votre définition d’environnement peut entraîner la reconstruction de l’image chaque fois que la balise latest est mise à jour. Cela permet à l’image de recevoir les derniers correctifs et mises à jour système.

Mise à jour corrective d’image

Microsoft est responsable de la mise à jour corrective des images de base pour les vulnérabilités de sécurité connues. Les mises à jour des images prises en charge sont publiées toutes les deux semaines, avec l’engagement que la version la plus récente de l’image ne contienne aucune vulnérabilité non corrigée datant de plus de 30 jours. Les images corrigées sont publiées avec une nouvelle étiquette immuable, et l’étiquette :latest est mise à jour vers la dernière version de l’image corrigée.

Vous devez mettre à jour les ressources Azure Machine Learning associées pour utiliser l’image nouvellement corrigée. Par exemple, lorsque vous travaillez avec un point de terminaison en ligne géré, vous devez redéployer votre point de terminaison pour utiliser l'image corrigée.

Si vous fournissez vos propres images, vous êtes responsable de leur mise à jour et de la mise à jour des ressources Azure Machine Learning qui les utilisent.

Pour plus d’informations sur les images de base, consultez les liens suivants :

Étapes suivantes