Azure Databricks でサービスを提供する mlflow モデル MLflow Model Serving on Azure Databricks

重要

この機能はパブリック プレビュー段階にあります。This feature is in Public Preview.

MLflow モデルサービスを使用すると、モデルレジストリから、モデルのバージョンとそのステージの可用性に基づいて自動的に更新される REST エンドポイントとして、機械学習モデルをホストすることができます。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.

特定の登録済みモデルに対してモデルサービスを有効にすると、Azure Databricks によってモデルの一意の単一ノードクラスターが自動的に作成され、そのクラスター上のすべてのアーカイブされていないバージョンのモデルがデプロイされます。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 は、何らかのエラーが発生した場合にクラスターを再起動し、モデルのサービスを無効にしたときにクラスターを終了します。Azure Databricks restarts the cluster if any error occurs, and terminates the cluster when you disable model serving for the model. モデルサービスは、モデルレジストリと自動的に同期し、新しく登録されたモデルのバージョンを配置します。Model serving automatically syncs with Model Registry and deploys any new registered model versions. デプロイされたモデルのバージョンは、標準 REST API 要求で照会できます。Deployed model versions can be queried with standard REST API request. Azure Databricks は、標準認証を使用してモデルへの要求を認証します。Azure Databricks authenticates requests to the model using its standard authentication.

このサービスはプレビュー段階ですが、Databricks は低スループットと重要ではないアプリケーションの使用を推奨しています。While this service is in preview, Databricks recommends its use for low throughput and non-critical applications. ターゲットスループットは 20 qps、ターゲットの可用性は99.5% ですが、どちらの場合も保証は行われません。Target throughput is 20 qps and target availability is 99.5%, although no guarantee is made as to either. また、1つの要求につき 16 MB のペイロードサイズの制限があります。Additionally, there is a payload size limit of 16 MB per request.

各モデルバージョンは、MLflow モデルデプロイ を使用してデプロイされ、依存関係によって指定された conda 環境で実行されます。Each model version is deployed using MLflow model deployment and runs in a Conda environment specified by its dependencies.

注意

クラスターは、アクティブなモデルバージョンが存在しない場合でも、サービスが有効になっている限り保持されます。The cluster is maintained as long as serving is enabled, even if no active model version exists. サービス対象のクラスターを終了するには、登録済みモデルのモデルサービスを無効にします。To terminate the serving cluster, disable model serving for the registered model.

要件Requirements

MLflow モデル提供は、Python MLflow モデルで使用できます。MLflow Model Serving is available for Python MLflow models. すべてのモデルの依存関係は、conda 環境で宣言する必要があります。All model dependencies must be declared in the conda environment.

モデルサービスを有効または無効にするEnable and disable model serving

モデルは、 登録されているモデルページからサービスを提供するように有効にします。You enable a model for serving from its registered model page.

  1. [ サービス ] タブをクリックします。モデルでサービスがまだ有効になっていない場合は、[ サービスを有効にする ] ボタンが表示されます。Click the Serving tab. If the model is not already enabled for serving, the Enable Serving button appears.
  2. [ サービスを有効にする] を クリックします。Click Enable Serving. [サービス] タブが表示され、 状態 が [保留中] になります。The Serving tab appears with the Status as Pending. 数分後に、 状態 が [準備完了] に変わります。After a few minutes, the Status changes to Ready.

サービスのためにモデルを無効にするには、[ 停止] をクリックします。To disable a model for serving, click Stop.

モデルレジストリからのモデルサービスModel serving from Model Registry

モデルレジストリ UI で登録済みのモデルの提供を有効にします。You enable serving of a registered model in Model Registry UI.

サービスを有効にするEnable serving

モデルバージョンの UriModel version URIs

デプロイされた各モデルのバージョンには、1つまたは複数の一意の Uri が割り当てられます。Each deployed model version is assigned one or several unique URIs. 少なくとも、各モデルバージョンには、次のように構成された URI が割り当てられます。At minimum, each model version is assigned a URI constructed as follows:

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

たとえば、として登録されているモデルのバージョン1を呼び出すには、次の iris-classifier URI を使用します。For example, to call version 1 of a model registered as iris-classifier, use this URI:

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

また、モデルのバージョンをステージ別に呼び出すこともできます。You can also call a model version by its stage. たとえば、バージョン1が 運用 段階にある場合は、次の URI を使用してスコア付けすることもできます。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

使用可能なモデル Uri の一覧は、[サービス] ページの [モデルのバージョン] タブの上部に表示されます。The list of available model URIs appears at the top of the Model Versions tab on the serving page.

提供されたバージョンの管理Manage served versions

すべてのアクティブな (アーカイブされていない) モデルバージョンが配置され、Uri を使用してクエリを実行できます。All active (non-archived) model versions are deployed, and you can query them using the URIs. 新しいモデルバージョンが登録されると、Azure Databricks によって自動的に展開され、古いバージョンがアーカイブされると自動的に削除されます。Azure Databricks automatically deploys new model versions when they are registered, and automatically removes old versions when they are archived.

注意

登録済みモデルのすべてのデプロイ済みバージョンが同じクラスターを共有します。All deployed versions of a registered model share the same cluster.

モデルアクセス権の管理Manage model access rights

モデルのアクセス権は、モデルレジストリから継承されます。Model access rights are inherited from the Model Registry. サービス機能を有効または無効にするには、登録済みのモデルに対する "管理" アクセス許可が必要です。Enabling or disabling the serving feature requires ‘manage’ permission on the registered model. 読み取り権限を持つすべてのユーザーは、デプロイされているすべてのバージョンをスコア付けできます。Anyone with read rights can score any of the deployed versions.

デプロイされたモデルのバージョンをスコア付けするScore deployed model versions

配置されたモデルをスコア付けするには、UI を使用するか、モデル URI に REST API 要求を送信します。To score a deployed model, you can use the UI or send a REST API request to the model URI.

UI を使用したスコア付けScore via UI

これは、モデルをテストする最も簡単かつ迅速な方法です。This is the easiest and fastest way to test the model. モデル入力データを JSON 形式で挿入し、[ 要求の送信] をクリックすることができます。You can insert the model input data in JSON format and click Send Request. (上の図に示されているように) 入力例でモデルがログに記録されている場合は、[ 読み込みの例 ] をクリックして入力の例を読み込みます。If the model has been logged with an input example (as shown in the graphic above), click Load Example to load the input example.

REST API 要求を使用したスコア付けScore via REST API request

標準 Databricks 認証を使用して、REST API を通じてスコアリング要求を送信できます。You can send a scoring request through the REST API using standard Databricks authentication. 次の例では、個人用アクセストークンを使用した認証を示します。The examples below demonstrate authentication using a personal access token.

MODEL_VERSION_URILike https://<databricks-instance>/model/iris-classifier/Production/invocations ( <databricks-instance>Databricks インスタンスの名前) と、という名前の Databricks REST API トークンを指定すると、次のように DATABRICKS_API_TOKEN 、提供されたモデルのクエリを実行する方法の例をいくつか示します。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

Power BI Desktop でデータセットをスコア付けするには、次の手順を実行します。You can score a dataset in Power BI Desktop using the following steps:

  1. スコア付けするデータセットを開きます。Open dataset you want to score.

  2. データの変換に関するページを参照してください。Go to Transform Data.

  3. 左側のパネルで右クリックし、[ 新しいクエリの作成] を選択します。Right-click in the left panel and select Create New Query.

  4. ビュー > 詳細エディター にアクセスします。Go to View > Advanced Editor.

  5. 適切なおよびを入力した後、クエリ本文を以下のコードスニペットに置き換え DATABRICKS_API_TOKEN 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. クエリに必要なモデル名を指定します。Name the query with your desired model name.

  7. データセットの詳細クエリエディターを開き、モデル関数を適用します。Open the advanced query editor for your dataset and apply the model function.

サーバーで受け入れられる入力データ形式 (たとえば、パンダの分割指向形式) の詳細については、 Mlflow のドキュメントを参照してください。For more information about input data formats accepted by the server (for example, pandas split-oriented format), see the MLflow documentation.

提供されたモデルの監視Monitor served models

[サービス] ページには、サービスを提供するクラスターの状態インジケーターと個々のモデルバージョンが表示されます。The serving page displays status indicators for the serving cluster as well as individual model versions. さらに、次のものを使用して詳細情報を取得することもできます。In addition, you can use the following to obtain further information:

  • サービスを提供しているクラスターの状態を調べるには、[ モデルイベント ] タブを使用します。このタブには、このモデルのすべてのサービスイベントの一覧が表示されます。To inspect the state of the serving cluster, use the Model Events tab, which displays a list of all serving events for this model.
  • 1つのモデルバージョンの状態を調べるには、[モデルのバージョン] タブの [ログ] または [バージョンイベント] タブを使用します。To inspect the state of a single model version, use the Logs or Version Events tabs on the Model Versions tab.

バージョンの状態Version status

モデルイベントModel events