メインコンテンツまでスキップ

モデルサービングの導入前検証

この記事のガイダンスは、エンドポイントの展開プロセスを待つ前にモデルの問題を見つけるのに役立ちます。Databricks 、モデルサービングを使用する際の開発エクスペリエンスを向上させるために、これらの検証ステップを実行することをお勧めします。

展開前に予測をテストする

モデルをサービス エンドポイントにデプロイする前に、 mlflow.models.predictと入力例を使用して仮想環境でオフライン予測をテストします。MLflowデプロイメント環境をシミュレートし、変更された依存関係のテストを可能にする検証APIsを提供します。

デプロイ前の検証オプションには、 MLflow Python APIMLflow CLI の2 つがあります。より詳細なガイダンスについては、予測のテストに関する MLflow ドキュメントを参照してください。

次の点を指定できます。

  • モデルサービングにデプロイされているモデルのmodel_uri

  • 次のいずれか一つ。

    • モデルのmlflow.pyfunc.PyFuncModel.predict()呼び出しで想定される形式のinput_data
    • input_pathは、 predictの呼び出しに読み込まれて使用される入力データを含むファイルを定義します。
  • csvまたはjson形式のcontent_type

  • 予測をファイルに書き込むためのオプションのoutput_path 。このパラメーターを省略すると、予測はstdoutに出力されます。

  • 環境マネージャーenv_managerは、以下を提供するための環境を構築するために使用されます。

    • デフォルトはvirtualenvです。サービング検証に推奨されます。
    • local 利用可能ですが、配信検証でエラーが発生する可能性があります。通常、迅速なデバッグにのみ使用されます。
  • install_mlflowを使用して、環境内の現在のバージョンの MLflow を仮想環境にインストールするかどうか。この設定のデフォルトはFalseです。

  • トラブルシューティングやデバッグのために、パッケージ依存関係の異なるバージョンを更新してテストするかどうか。オーバーライド引数pip_requirements_overrideを使用して、これを文字列依存関係のオーバーライドまたは追加のリストとして指定できます。

例えば:

Python
import mlflow

run_id = "..."
model_uri = f"runs:/{run_id}/model"

mlflow.models.predict(
model_uri=model_uri,
input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
content_type="json",
env_manager="virtualenv",
install_mlflow=False,
pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)

モデルの依存関係を更新する

記録済みモデルで指定された依存関係に問題がある場合は、別のモデルをログに記録しなくても、 MLflow CLIまたはMLflow Python APIのmlflow.models.model.update_model_requirements()を使用して要件を更新できます。

次の例は、記録済みモデルのpip_requirements.txtをインプレースで更新する方法を示しています。

指定されたパッケージ バージョンで既存の定義を更新したり、存在しない要件をpip_requirements.txtファイルに追加したりできます。このファイルは、指定されたmodel_uri場所にあるMLflowモデル アーティファクト内にあります。

Python
from mlflow.models.model import update_model_requirements

update_model_requirements(
model_uri=model_uri,
operation="add",
requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)

デプロイ前にモデル入力を検証する

モデルサービング エンドポイントは、特別な形式のJSON入力を想定しています。 MLflow のvalidate_serving_inputを使用して、デプロイ前にモデル入力がサービス エンドポイントで機能することを検証できます。

以下は、モデルが有効な入力例とともに記録されている場合に、実行の [アーティファクト] タブに自動生成されるコードの例です。

Python
from mlflow.models import validate_serving_input

model_uri = 'runs:/<run_id>/<artifact_path>'

serving_payload = """{
"messages": [
{
"content": "How many product categories are there?",
"role": "user"
}
]
}
"""

# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)

また、 convert_input_example_to_serving_input APIを使用して有効なJSONサービング入力を生成することで、記録済みモデルに対して入力例をテストすることもできます。

Python
from mlflow.models import validate_serving_input
from mlflow.models import convert_input_example_to_serving_input

model_uri = 'runs:/<run_id>/<artifact_path>'

# Define INPUT_EXAMPLE with your own input example to the model
# A valid input example is a data instance suitable for pyfunc prediction

serving_payload = convert_input_example_to_serving_input(INPUT_EXAMPLE)

# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)

モデルの配信を手動でテストする

次の手順を使用して、モデルの提供動作を手動でテストできます。

  1. ノートブックを開き、機械学習用のDatabricks Runtimeではなく、Databricks Runtimeバージョンを使用する汎用クラスターにアタッチします。
  2. MLflow を使用してモデルをロードし、そこからデバッグを試みます。

モデルを PC にローカルにロードして、そこからデバッグすることもできます。次のコマンドを使用して、モデルをローカルにロードします。

Python
import os
import mlflow

os.environ["MLFLOW_TRACKING_URI"] = "databricks://PROFILE"

ARTIFACT_URI = "model_uri"
if '.' in ARTIFACT_URI:
mlflow.set_registry_uri('databricks-uc')
local_path = mlflow.artifacts.download_artifacts(ARTIFACT_URI)
print(local_path)

conda env create -f local_path/artifact_path/conda.yaml
conda activate mlflow-env

mlflow.pyfunc.load_model(local_path/artifact_path)