Modèle MLflow servant sur Azure Databricks MLflow Model Serving on Azure Databricks

Important

Cette fonctionnalité est disponible en préversion publique.This feature is in Public Preview.

MLflow Model serv vous permet d’héberger des modèles de Machine Learning à partir du registre de modèle en tant que points de terminaison REST mis à jour automatiquement en fonction de la disponibilité des versions de modèle et de leurs étapes.MLflow Model Serving allows you to host machine learning models from Model Registry as REST endpoints that are updated automatically based on the availability of model versions and their stages.

Quand vous activez le service de modèle pour un modèle inscrit donné, Azure Databricks crée automatiquement un cluster à nœud unique unique pour le modèle et déploie toutes les versions non archivées du modèle sur ce cluster.When you enable model serving for a given registered model, Azure Databricks automatically creates a unique single-node cluster for the model and deploys all non-archived versions of the model on that cluster. Azure Databricks redémarre le cluster en cas d’erreur et met fin au cluster lorsque vous désactivez les modèles desservis pour le modèle.Azure Databricks restarts the cluster if any error occurs, and terminates the cluster when you disable model serving for the model. Le modèle desservant les synchronisations automatiques avec le registre de modèles et déploie toutes les nouvelles versions de modèles inscrites.Model serving automatically syncs with Model Registry and deploys any new registered model versions. Les versions de modèle déployées peuvent être interrogées avec la demande d’API REST standard.Deployed model versions can be queried with standard REST API request. Azure Databricks authentifie les demandes au modèle à l’aide de son authentification standard.Azure Databricks authenticates requests to the model using its standard authentication.

Bien que ce service soit en version préliminaire, Databricks recommande son utilisation pour des applications à débit faible et non critiques.While this service is in preview, Databricks recommends its use for low throughput and non-critical applications. Le débit cible est de 20 RPS et la disponibilité cible est de 99,5%, même si aucune garantie n’est faite pour l’une ou l’autre.Target throughput is 20 qps and target availability is 99.5%, although no guarantee is made as to either. En outre, il existe une limite de taille de charge utile de 16 Mo par demande.Additionally, there is a payload size limit of 16 MB per request.

Chaque version de modèle est déployée à l’aide du déploiement de modèle MLflow et s’exécute dans un environnement Conda spécifié par ses dépendances.Each model version is deployed using MLflow model deployment and runs in a Conda environment specified by its dependencies.

Notes

Le cluster est conservé tant que le service est activé, même s’il n’existe pas de version de modèle active.The cluster is maintained as long as serving is enabled, even if no active model version exists. Pour terminer le cluster de service, désactivez le modèle desservant le modèle inscrit.To terminate the serving cluster, disable model serving for the registered model.

ExigencesRequirements

Le modèle MLflow service est disponible pour les modèles python MLflow.MLflow Model Serving is available for Python MLflow models. Toutes les dépendances de modèle doivent être déclarées dans l’environnement Conda.All model dependencies must be declared in the conda environment.

Activer et désactiver les services de modèlesEnable and disable model serving

Vous pouvez activer un modèle pour servir à partir de sa page de modèle inscrite.You enable a model for serving from its registered model page.

  1. Cliquez sur l’onglet service . Si le modèle n’est pas déjà activé pour servir, le bouton activer les services s’affiche.Click the Serving tab. If the model is not already enabled for serving, the Enable Serving button appears.
  2. Cliquez sur activer service.Click Enable Serving. L’onglet service s’affiche avec l' État en attente.The Serving tab appears with the Status as Pending. Après quelques minutes, l' État passe à prêt.After a few minutes, the Status changes to Ready.

Pour désactiver un modèle à des fins de service, cliquez sur arrêter.To disable a model for serving, click Stop.

Modèle de service à partir du registre de modèleModel serving from Model Registry

Vous activez le service d’un modèle inscrit dans l’interface utilisateur du registre de modèles.You enable serving of a registered model in Model Registry UI.

Activer le serviceEnable serving

URI de version de modèleModel version URIs

Chaque version de modèle déployée est affectée à un ou plusieurs URI uniques.Each deployed model version is assigned one or several unique URIs. Au minimum, chaque version de modèle est assignée à un URI construit comme suit :At minimum, each model version is assigned a URI constructed as follows:

<databricks-instance>/model/<registered-model-name>/<model-version>/invocations

Par exemple, pour appeler la version 1 d’un modèle enregistré en tant que iris-classifier , utilisez l’URI suivant :For example, to call version 1 of a model registered as iris-classifier, use this URI:

https://<databricks-instance>/model/iris-classifier/1/invocations

Vous pouvez également appeler une version de modèle par son intermédiaire.You can also call a model version by its stage. Par exemple, si la version 1 est à l’étape de production , elle peut également être notée à l’aide de l’URI suivant :For example, if version 1 is in the Production stage, it can also be scored using this URI:

https://<databricks-instance>/model/iris-classifier/Production/invocations

La liste des URI de modèle disponibles apparaît en haut de l’onglet versions de modèle sur la page service.The list of available model URIs appears at the top of the Model Versions tab on the serving page.

Gérer les versions prises en chargeManage served versions

Toutes les versions de modèle actives (non archivées) sont déployées et vous pouvez les interroger à l’aide des URI.All active (non-archived) model versions are deployed, and you can query them using the URIs. Azure Databricks déploie automatiquement les nouvelles versions de modèle lorsqu’elles sont inscrites et supprime automatiquement les anciennes versions lorsqu’elles sont archivées.Azure Databricks automatically deploys new model versions when they are registered, and automatically removes old versions when they are archived.

Notes

Toutes les versions déployées d’un modèle inscrit partagent le même cluster.All deployed versions of a registered model share the same cluster.

Gérer les droits d’accès au modèleManage model access rights

Les droits d’accès au modèle sont hérités du registre de modèles.Model access rights are inherited from the Model Registry. L’activation ou la désactivation de la fonctionnalité service nécessite l’autorisation « Manage » sur le modèle inscrit.Enabling or disabling the serving feature requires ‘manage’ permission on the registered model. Toute personne disposant de droits de lecture peut noter toutes les versions déployées.Anyone with read rights can score any of the deployed versions.

Noter les versions de modèle déployéesScore deployed model versions

Pour noter un modèle déployé, vous pouvez utiliser l’interface utilisateur ou envoyer une demande d’API REST à l’URI du modèle.To score a deployed model, you can use the UI or send a REST API request to the model URI.

Score via l’interface utilisateurScore via UI

Il s’agit de la méthode la plus simple et la plus rapide pour tester le modèle.This is the easiest and fastest way to test the model. Vous pouvez insérer les données d’entrée du modèle au format JSON, puis cliquer sur Envoyer la demande.You can insert the model input data in JSON format and click Send Request. Si le modèle a été enregistré avec un exemple d’entrée (comme indiqué dans le graphique ci-dessus), cliquez sur charger l’exemple pour charger l’exemple d’entrée.If the model has been logged with an input example (as shown in the graphic above), click Load Example to load the input example.

Score via une demande d’API RESTScore via REST API request

Vous pouvez envoyer une demande de notation par le biais de l’API REST à l’aide de l' authentification Databricks standard.You can send a scoring request through the REST API using standard Databricks authentication. Les exemples ci-dessous illustrent l’authentification à l’aide d’un jeton d’accès personnel.The examples below demonstrate authentication using a personal access token.

À partir de MODEL_VERSION_URI Like https://<databricks-instance>/model/iris-classifier/Production/invocations (où <databricks-instance> est le nom de votre instance Databricks) et d’un jeton d’API REST Databricks appelé DATABRICKS_API_TOKEN , voici quelques exemples d’extraits de code illustrant l’interrogation d’un modèle servi :Given a MODEL_VERSION_URI like https://<databricks-instance>/model/iris-classifier/Production/invocations (where <databricks-instance> is the name of your Databricks instance) and a Databricks REST API token called DATABRICKS_API_TOKEN, here are some example snippets of how to query a served model:

BashBash

curl -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
  -H 'Content-Type: application/json; format=pandas-records' \
  -d '[
    {
      "sepal_length": 5.1,
      "sepal_width": 3.5,
      "petal_length": 1.4,
      "petal_width": 0.2
    }
  ]'

PythonPython

import requests

def score_model(model_uri, databricks_token, data):
  headers = {
    "Authorization": f"Bearer {databricks_token}",
    "Content-Type": "application/json; format=pandas-records",
  }
  data_json = data if isinstance(data, list) else data.to_dict(orient="records")
  response = requests.request(method='POST', headers=headers, url=model_uri, json=data_json)
  if response.status_code != 200:
      raise Exception(f"Request failed with status {response.status_code}, {response.text}")
  return response.json()

data = [{
  "sepal_length": 5.1,
  "sepal_width": 3.5,
  "petal_length": 1.4,
  "petal_width": 0.2
}]
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, data)

# can also score DataFrames
import pandas as pd
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, pd.DataFrame(data))

PowerbiPowerbi

Vous pouvez noter un jeu de données dans Power BI Desktop en procédant comme suit :You can score a dataset in Power BI Desktop using the following steps:

  1. Ouvrez le jeu de données dont vous souhaitez évaluer le score.Open dataset you want to score.

  2. Accédez à transformer les données.Go to Transform Data.

  3. Cliquez avec le bouton droit dans le volet gauche et sélectionnez créer une nouvelle requête.Right-click in the left panel and select Create New Query.

  4. Accédez à afficher > éditeur avancé.Go to View > Advanced Editor.

  5. Remplacez le corps de la requête par l’extrait de code ci-dessous, après avoir rempli un DATABRICKS_API_TOKEN et approprié MODEL_VERSION_URI .Replace the query body with the code snippet below, after filling in an appropriate DATABRICKS_API_TOKEN and MODEL_VERSION_URI.

    (dataset as table ) as table =>
    let
      call_predict = (dataset as table ) as list =>
      let
        apiToken = DATABRICKS_API_TOKEN,
        modelUri = MODEL_VERSION_URI,
        responseList = Json.Document(Web.Contents(modelUri,
          [
            Headers = [
              #"Content-Type" = "application/json; format=pandas-records",
              #"Authorization" = Text.Format("Bearer #{0}", {apiToken})
            ],
            Content = Json.FromValue(dataset)
          ]
        ))
      in
        responseList,
      predictionList = List.Combine(List.Transform(Table.Split(dataset, 256), (x) => call_predict(x))),
      predictionsTable = Table.FromList(predictionList, (x) => {x}, {"Prediction"}),
      datasetWithPrediction = Table.Join(
        Table.AddIndexColumn(predictionsTable, "index"), "index",
        Table.AddIndexColumn(dataset, "index"), "index")
    in
      datasetWithPrediction
    
  6. Nommez la requête avec le nom de modèle de votre choix.Name the query with your desired model name.

  7. Ouvrez l’éditeur de requête avancé pour votre jeu de données et appliquez la fonction de modèle.Open the advanced query editor for your dataset and apply the model function.

Pour plus d’informations sur les formats de données d’entrée acceptés par le serveur (par exemple, pandas-Oriented Split format), consultez la documentation MLflow.For more information about input data formats accepted by the server (for example, pandas split-oriented format), see the MLflow documentation.

Surveiller les modèles pris en chargeMonitor served models

La page service affiche des indicateurs d’État pour le cluster service et des versions de modèle individuelles.The serving page displays status indicators for the serving cluster as well as individual model versions. En outre, vous pouvez utiliser les éléments suivants pour obtenir plus d’informations :In addition, you can use the following to obtain further information:

  • Pour inspecter l’état du cluster service, utilisez l’onglet événements de modèle , qui affiche une liste de tous les événements de service pour ce modèle.To inspect the state of the serving cluster, use the Model Events tab, which displays a list of all serving events for this model.
  • Pour inspecter l’état d’une version de modèle unique, utilisez les onglets journaux ou événements de version sous l’onglet versions de modèle .To inspect the state of a single model version, use the Logs or Version Events tabs on the Model Versions tab.

État de la versionVersion status

Événements de modèleModel events