MLflow を使ってモデルを登録して提供する

完了

モデルの登録により、MLflow と Azure Databricks はモデルを追跡できます。これは次の 2 つの理由で重要です。

  • モデルを登録すると、リアルタイム、ストリーミング、またはバッチ推論用にモデルを提供できます。 登録により、データ サイエンティストはアプリケーション コードを開発する必要がなくなり、サービス プロセスで自動的にそのラッパーが構築され、バッチ スコアリング用の REST API またはメソッドが公開されるため、トレーニング済みのモデルを使うプロセスが簡単になります。
  • モデルを登録しておくと、後でそのモデルの新しいバージョンを作成できます。モデルの変更を追跡し、異なる過去のバージョンのモデル間の比較を実行することができます。

モデルの登録

モデルをトレーニングする実験を実行する場合、次のようにモデル自体を実験実行の一部としてログすることができます。

with mlflow.start_run():
    # code to train model goes here

    # log the model itself (and the environment it needs to be used)
    unique_model_name = "my_model-" + str(time.time())
    mlflow.spark.log_model(spark_model = model,
                           artifact_path=unique_model_name,
                           conda_env=mlflow.spark.get_default_conda_env())

モデルの予測精度を示すログされたメトリックを含め、実験実行を確認すると、モデルは実行の成果物に含まれます。 実験ビューアーのユーザー インターフェイスを使って、モデルを "登録" するオプションを選択できます。

また、実行のメトリックを確認せずにモデルを登録する場合は、log_model メソッドに registered_model_name パラメーターを含めることができます。この場合、実験実行中にモデルは自動的に登録されます。

with mlflow.start_run():
    # code to train model goes here

    # log the model itself (and the environment it needs to be used)
    unique_model_name = "my_model-" + str(time.time())
    mlflow.spark.log_model(spark_model=model,
                           artifact_path=unique_model_name
                           conda_env=mlflow.spark.get_default_conda_env(),
                           registered_model_name="my_model")

複数バージョンのモデルを登録できるので、一定期間にわたってモデルのバージョンのパフォーマンスを比較した後に、すべてのクライアント アプリケーションをパフォーマンスが最も高いバージョンに移行することができます。

推論へのモデルの使用

新しい特徴量データからラベルを予測するためにモデルを使うプロセスは、"推論" と呼ばれます。 Azure Databricks の MLflow を使うと、次の方法でモデルを推論に使用できるようになります。

  • クライアント アプリケーションが REST 要求を行うことができる HTTP エンドポイントを使って、リアルタイム サービスとしてモデルをホストします。
  • モデルを使って、特徴量の差分テーブルに基づくラベルの永続的なストリーミング推論を実行し、結果を出力テーブルに書き込みます。
  • 差分テーブルに基づいてバッチ推論にモデルを使い、各バッチ操作の結果を特定のフォルダーに書き込みます。

推論用のモデルは、次のように Azure Databricks ポータルの [モデル] セクションにあるページからデプロイできます。

Screenshot of the Set up model inference dialog box in the Azure Databricks portal.