Partager via


Déployer des modèles empaquetés sur des points de terminaison en ligne (aperçu)

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. En savoir plus sur les modèles empaquetés (aperçu)

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 découvrir comment empaqueter un modèle et le déployer sur un point de terminaison en ligne dans Azure Machine Learning studio.

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.

À propos de cet exemple

Dans cet exemple, vous empaquetez un modèle de type personnalisé et vous le déployez sur un point de terminaison en ligne pour l’inférence en ligne.

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>

Empaquetez le modèle

Vous pouvez créer explicitement des modèles empaquetés pour vous permettre de contrôler l’opération d’empaquetage. 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.

Conseil

Pour un modèle MLflow, vous n’avez pas besoin de créer le modèle empaqueté manuellement. Nous pouvons effectuer l’empaquetage automatiquement avant le déploiement. Consultez Déployer des modèles MLflow sur des points de terminaison en ligne.

  1. 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
    
  2. Notre modèle nécessite l’exécution des paquets suivants, et nous les avons spécifiés dans un 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

    Notez que seules les exigences du modèle sont indiquées dans le YAML conda. Tout paquet requis pour le serveur d’inférence sera inclus par l’opération d’empaquetage.

    Conseil

    Si votre modèle nécessite des paquets hébergés dans des flux privés, vous pouvez configurer votre paquet pour les inclure. Lisez Empaqueter un modèle qui a des dépendances dans les flux Python privés.

  3. Créez un environnement de base qui contient les exigences du modèle et une image de base. Seules les dépendances requises par votre modèle sont indiquées dans l’environnement de base. Pour les modèles MLflow, l’environnement de base est facultatif, auquel cas Azure Machine Learning le génère automatiquement pour vous.

    Créez une définition d’environnement de base :

    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.
    

    Puis créez l’environnement ainsi :

    az ml environment create -f environment/sklearn-regression-env.yml
    
  4. Créez une spécification de paquet :

    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
    
  5. Lancez l’opération d’empaquetage de modèle :

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  6. Le résultat de l’opération d’empaquetage est un environnement.

Déployez le modèle empaqueté

Les modèles empaquetés peuvent être déployés directement sur des points de terminaison en ligne dans Azure Machine Learning. Procédez comme suit pour déployer un paquet sur un point de terminaison en ligne :

  1. Choisissez un nom de point de terminaison pour l’hébergement du déploiement du paquet et créez-le :

    ENDPOINT_NAME="sklearn-regression-online"
    
    az ml online-endpoint create -n $ENDPOINT_NAME
    
  2. Créez le déploiement en utilisant le paquet. Notez comment environment est configuré avec le paquet que vous avez créé.

    deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: with-package
    endpoint_name: hello-packages
    environment: azureml:sklearn-regression-online-pkg@latest
    instance_type: Standard_DS3_v2
    instance_count: 1
    

    Conseil

    Notez que vous ne spécifiez pas de script de modèle ou de score dans cet exemple ; ils font tous partie du paquet.

  3. Lancez le déploiement :

    az ml online-deployment create -f deployment.yml
    
  4. À ce stade, le déploiement est prêt à être utilisé. Vous pouvez tester son fonctionnement en créant un exemple de fichier de requête :

    sample-request.json

    {
        "data": [
            [1,2,3,4,5,6,7,8,9,10], 
            [10,9,8,7,6,5,4,3,2,1]
        ]
    }
    
  5. Envoyez la demande au point de terminaison

    az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment with-package -r sample-request.json
    

Étape suivante