モデル提供でカスタム Python ライブラリを使用する

この記事では、モデル提供モデル デプロイで使用できるように、モデルをログに記録するときに、プライベート ミラー サーバーからカスタム ライブラリまたはライブラリを含める方法について説明します。 トレーニング済みの ML モデルをデプロイする準備ができた後、ただし、Azure Databricks モデルの提供のエンドポイントを作成する前に、このガイドで詳しく説明されている手順を完了する必要があります。

モデル開発では、多くの場合、前処理または後処理、カスタム モデル定義、およびその他の共有ユーティリティ用の関数を含むカスタム Python ライブラリを使用する必要があります。 さらに、多くのエンタープライズ セキュリティ チームは、 サプライ チェーン攻撃のリスクを軽減するために、Nexus や Artifactory などのプライベート PyPi ミラーの使用を推奨しています。 Azure Databricks では、Azure Databricks ワークスペース内のプライベート ミラーからカスタム ライブラリとライブラリをインストールするための ネイティブ サポート が提供されます。

必要条件

  • MLflow 1.29 以上

手順 1: 依存関係ファイルをアップロードする

Databricks では、依存関係ファイルを Unity Catalog ボリュームにアップロードすることをお勧めします。 または、Azure Databricks UI を使用して Databricks ファイル システム (DBFS) にアップロードすることもできます。

ノートブックでライブラリを使用できるようにするには、%pip% を使用してライブラリをインストールする必要があります。 %pip を使用すると、現在のノートブックにライブラリがインストールされ、依存関係がクラスターにダウンロードされます。

ステップ 2: カスタム ライブラリを使用してモデルをログに記録する

重要

カスタム PyPi ミラーをポイントしてプライベート ライブラリをインストールする場合、このセクションのガイダンスは必要ありません。

ライブラリをインストールし、Python wheel ファイルを Unity Catalog ボリュームまたは DBFS にアップロードした後、スクリプトに次のコードを含めます。 extra_pip_requirements で、依存関係ファイルのパスを指定します。

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/volume/path/to/dependency.whl"])

DBFS の場合は、次を使用します。

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/dbfs/path/to/dependency.whl"])

カスタム ライブラリがある場合は、ログを構成するときに、モデルに関連付けられているすべてのカスタム Python ライブラリを指定する必要があります。 これを行うには log_model() extra_pip_requirements またはconda_envパラメーターを使用します。

重要

DBFS を使用する場合、extra_pip_requirements をログに記録するときに dbfs パスの前にスラッシュ (/) を必ず含めてください。 DBFS パスの詳細については、「Azure Databricks 上のファイルを操作する」をご覧ください。

from mlflow.utils.environment import _mlflow_conda_env
conda_env =  _mlflow_conda_env(
            additional_conda_deps= None,
            additional_pip_deps= ["/volumes/path/to/dependency"],
            additional_conda_channels=None,
)
mlflow.pyfunc.log_model(..., conda_env = conda_env)

ステップ 3: Python ホイールを使用して MLflow モデルを更新する

MLflow は、Python ホイール ファイルとして事前にパッケージ化されたすべての依存関係を使用してモデルをログする add_libraries_to_model() ユーティリティを提供します。 これにより、モデルの依存関係として指定されている他のすべての ライブラリに加えて、カスタム ライブラリがモデルと共にパッケージ化されます。 これにより、モデルで使用されるライブラリが、まさにトレーニング環境からアクセスできるライブラリであることを保証します。

次の例では、 model_uri 構文を使用してモデル レジストリを参照しています models:/<model-name>/<model-version>

モデル レジストリ URI を使用すると、このユーティリティによって、既存の登録済みモデルの下に新しいバージョンが生成されます。

import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)

ステップ 4:モデルを指定する

パッケージを含む新しいモデル バージョンがモデル レジストリで使用可能な場合は、モデル提供を使用してこのモデル バージョンをエンドポイントに追加できます。