Créer des modèles empaquetés (préversion)
L’empaquetage de modèle est une fonctionnalité d’Azure Machine Learning qui vous permet de collecter toutes les dépendances requises pour déployer un modèle Machine Learning sur une plateforme de service. Créer des paquets avant de déployer des modèles permet un déploiement robuste et fiable et un flux de travail MLOps plus efficace. Les paquets peuvent être déplacés entre les espaces de travail et même en dehors d’Azure Machine Learning.
Important
Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge.
Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.
Dans cet article, vous allez apprendre à empaqueter un modèle pour le déploiement.
Prérequis
Avant de suivre les étapes décrites dans cet article, vérifiez que vous disposez des composants requis suivants :
Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer. Essayez la version gratuite ou payante d’Azure Machine Learning.
Un espace de travail Azure Machine Learning. Si vous n’en avez pas, suivez les étapes décrites dans l’article Comment gérer des espaces de travail pour en créer un.
Les contrôles d’accès en fonction du rôle Azure (Azure RBAC) sont utilisés pour accorder l’accès aux opérations dans Azure Machine Learning. Pour effectuer les étapes décrites dans cet article, votre compte d’utilisateur doit avoir le rôle Propriétaire ou Contributeur sur l’espace de travail Azure Machine Learning, ou un rôle personnalisé. Pour plus d’informations, consultez Gérer l’accès à un espace de travail Azure Machine Learning.
Un modèle à empaqueter. Cet exemple utilise un modèle MLflow inscrit dans l’espace de travail.
Attention
L’empaquetage de modèles n’est pas pris en charge pour les modèles dans le catalogue de modèles Azure AI, y compris les modèles de langage volumineux. Les modèles du catalogue de modèles Azure AI sont optimisés pour l’inférence sur les cibles de déploiement Azure AI et ne conviennent pas à l’empaquetage.
À propos de cet exemple
Dans cet exemple, vous allez apprendre à empaqueter des modèles dans Azure Machine Learning.
Cloner le référentiel
L’exemple de cet article est basé sur des extraits de code contenus dans le référentiel azureml-examples. Pour exécuter les commandes localement sans avoir à copier/coller le fichier YAML et d’autres fichiers, clonez d’abord le référentiel, puis modifiez les répertoires dans le dossier :
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Cette section utilise l’exemple dans le dossier endpoints/online/deploy-packages/custom-model.
Se connecter à un espace de travail
Connectez-vous à votre espace de travail Azure Machine Learning pour commencer à travailler.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Empaqueter un modèle
Vous pouvez créer explicitement des modèles empaquetés pour vous permettre de contrôler l’opération d’empaquetage. Utilisez ce flux de travail quand :
- vous souhaitez personnaliser la façon dont le modèle empaqueté est créé ;
- vous souhaitez déployer le modèle empaqueté en dehors d’Azure Machine Learning ;
- vous souhaitez utiliser des modèles empaquetés dans un flux de travail MLOps.
Vous pouvez créer des modèles empaquetés en spécifiant les éléments suivants :
- Modèle à empaqueter : chaque modèle empaqueté ne peut contenir qu’un seul modèle. Azure Machine Learning ne prend pas en charge l’empaquetage de plusieurs modèles dans un même paquet.
- Environnement de base : les environnements sont utilisés pour indiquer l’image de base et, dans les paquets Python, les dépendances dont votre modèle a besoin. Azure Machine Learning génère automatiquement les environnements de base des modèles MLflow. Vous devez spécifier un environnement de base pour les modèles personnalisés.
- Technologie de service : la pile d’inférence utilisée pour exécuter le modèle.
Inscrire le modèle
Les modèles empaquetés nécessitent l’inscription du modèle dans votre espace de travail ou dans un registre Azure Machine Learning. Dans ce cas, vous avez déjà une copie locale du modèle dans le référentiel. Vous devez donc uniquement publier le modèle dans le registre dans l’espace de travail. Vous pouvez ignorer cette section si le modèle que vous essayez de déployer est déjà inscrit.
MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model
Créer l’environnement de base
Les environnements de base sont utilisés pour indiquer l’image de base et les dépendances des modèles empaquetés Python. Notre modèle nécessite que les packages suivants soient utilisés comme indiqué dans le fichier conda :
conda.yaml
name: model-env
channels:
- conda-forge
dependencies:
- python=3.9
- numpy=1.23.5
- pip=23.0.1
- scikit-learn=1.2.2
- scipy=1.10.1
- xgboost==1.3.3
Remarque
Comment l’environnement de base diffère-t-il de l’environnement que vous utilisez pour le déploiement de modèles vers des points de terminaison en ligne et par lots ? Lorsque vous déployez des modèles vers des points de terminaison, votre environnement doit inclure les dépendances du modèle et les packages Python nécessaires au bon fonctionnement des points de terminaison en ligne managés. Cela amène un processus manuel dans le déploiement, où vous devez combiner les exigences de votre modèle avec les exigences de la plateforme de service. En revanche, l’utilisation de packages de modèles supprime cette friction, car les packages requis pour le serveur d’inférence seront automatiquement injectés dans le modèle empaqueté au moment de l’empaquetage.
Créez l’environnement ainsi :
Créez une définition d’environnement :
sklearn-regression-env.yml
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.
Créez ensuite l’environnement :
az ml environment create -f environment/sklearn-regression-env.yml
Créer une spécification de paquet
Vous pouvez créer des modèles empaquetés dans Azure Machine Learning, à l’aide d’Azure CLI ou du Kit de développement logiciel (SDK) Azure Machine Learning pour Python. La spécification de package personnalisée prend en charge les attributs suivants :
Attribut | Type | Description | Obligatoire |
---|---|---|---|
target_environment |
str |
Nom du package à créer. Le résultat d’une opération d’empaquetage est un environnement dans Azure Machine Learning. | Oui |
base_environment_source |
object |
L’mage de base à utiliser pour créer le package où les dépendances du modèle sont spécifiées. | Oui, sauf si le modèle est MLflow. |
base_environment_source.type |
str |
Le type de l’image de base. Seule l’utilisation d’un autre environnement comme image de base est prise en charge (type: environment_asset ). |
|
base_environment_source.resource_id |
str |
L’ID de ressource de l’environnement de base à utiliser. Utilisez le format azureml:<name>:<version> ou un ID de ressource long. |
|
inferencing_server |
object |
Le serveur d’inférence à utiliser. | Oui |
inferencing_server.type |
azureml_online custom |
Utilisez azureml_online pour le serveur d’inférence Azure Machine Learning, ou custom pour un serveur en ligne personnalisé tel que TensorFlow service ou Torch Serve. |
Oui |
inferencing_server.code_configuration |
object |
La configuration du code avec la routine d’inférence. Il doit contenir au moins un fichier Python avec des méthodes init et run . |
Oui, sauf si le modèle est MLflow. |
model_configuration |
object |
La configuration du modèle. Utilisez cet attribut pour contrôler la façon dont le modèle est empaqueté dans l’image résultante. | Non |
model_configuration.mode |
download copy |
Indiquez comment le modèle serait placé dans le package. Les valeurs possibles sont download (par défaut) et copy . Utilisez download quand vous voulez que le modèle soit téléchargé depuis le registre de modèles au moment du déploiement. Cette option crée des images Docker plus petites, car le modèle n’y est pas inclus. Utilisez copy quand vous voulez déconnecter l’image d’Azure Machine Learning. Le modèle sera copié à l’intérieur de l’image Docker au moment de la création du package. copy n’est pas pris en charge sur les espaces de travail avec liaison privée. |
Non |
Créez une spécification de paquet en suivant ces étapes :
package-moe.yml
$schema: http://azureml/sdk-2-0/ModelVersionPackage.json base_environment_source: type: environment_asset resource_id: azureml:sklearn-regression-env:1 target_environment: sklearn-regression-online-pkg inferencing_server: type: azureml_online code_configuration: code: src scoring_script: score.py
Lancez l’opération d’empaquetage de modèle :
Le résultat de l’opération d’empaquetage est un environnement.
Empaqueter un modèle qui a des dépendances dans les flux Python privés
Les modèles empaquetés peuvent résoudre les dépendances Python disponibles dans les flux privés. Pour utiliser cette fonctionnalité, vous devez créer une connexion entre votre espace de travail et le flux et spécifier la configuration du jeton PAT. Le code Python suivant montre comment configurer l’espace de travail où vous exécutez l’opération d’empaquetage.
from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration
# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]
credentials = PatTokenConfiguration(pat=git_pat)
ws_connection = WorkspaceConnection(
name="<workspace_connection_name>",
target="<git_url>",
type="git",
credentials=credentials,
)
ml_client.connections.create_or_update(ws_connection)
Une fois la connexion créée, générez le modèle empaqueté comme décrit dans la section Empaqueter un modèle. Dans l’exemple suivant, l’environnement de base du package utilise un flux privé pour la dépendance Python bar
, comme spécifié dans le fichier conda suivant :
conda.yml
name: foo
channels:
- defaults
dependencies:
- python
- pip
- pip:
- --extra-index-url <python_feed_url>
- bar
Si vous utilisez un modèle MLflow, les dépendances du modèle sont indiquées à l’intérieur du modèle lui-même, et par conséquent, un environnement de base n’est pas nécessaire. Au lieu de cela, spécifiez les dépendances de flux privé lors de la journalisation du modèle, comme expliqué dans Journalisation des modèles avec une signature, un environnement ou des exemples personnalisés.
Empaqueter un modèle hébergé dans un registre
Les modèles empaquetés offrent un moyen pratique de collecter des dépendances avant le déploiement. Toutefois, lorsque les modèles sont hébergés dans des registres, la cible de déploiement est généralement un autre espace de travail. Lors de la création de packages dans cette configuration, utilisez la propriété target_environment
pour spécifier l’emplacement complet où vous souhaitez que le modèle empaqueté soit créé, au lieu de son nom seulement.
Le code suivant crée un modèle t5-base
empaqueté à partir d’un registre :
Connectez-vous au registre où se trouve le modèle et l’espace de travail dans lequel vous avez besoin que le modèle empaqueté soit créé :
Obtenez une référence au modèle que vous souhaitez empaqueter. Dans ce cas, nous empaquetons le modèle
t5-base
à partir du registreazureml
.Configurez une spécification de paquet. Étant donné que le modèle que nous voulons empaqueter est MLflow, l’environnement de base et le script de scoring sont facultatifs.
Démarrez l’opération pour créer le modèle empaqueté :
Le package est maintenant créé dans l’espace de travail cible et prêt à être déployé.
Modèles empaquetés à déployer en dehors d’Azure Machine Learning
Les modèles empaquetés peuvent être déployés en dehors d’Azure Machine Learning si nécessaire. Pour garantir la portabilité, assurez-vous simplement que la configuration du modèle dans votre package a la valeur copy
pour que le modèle lui-même soit copié à l’intérieur de l’image Docker générée au lieu d’être référencée à partir du registre de modèles dans Azure Machine Learning.
Le code suivant montre comment configurer copy
dans un modèle empaqueté :
package-external.yml
$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
type: environment_asset
resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server:
type: azureml_online
code_configuration:
code: src
scoring_script: score.py
model_configuration:
mode: copy