Model Serving でカスタム Python ライブラリを使用する

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

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

要件

  • MLflow 1.29 以降

ステップ 1: 依存関係ファイルの アップロード

Databricks では、依存関係ファイルを Unity Catalog ボリュームにアップロードすることをお勧めします。 または、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 パスの詳細については、「 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:MLflow Python wheelファイルを使用して モデルを更新する

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

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

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

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

ステップ 4: モデル を提供する

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