モデルサービングの導入前検証
この記事のガイダンスは、エンドポイントの展開プロセスを待つ前にモデルの問題を見つけるのに役立ちます。Databricks 、モデルサービングを使用する際の開発エクスペリエンスを向上させるために、これらの検証ステップを実行することをお勧めします。
展開前に予測をテストする
モデルをサービス エンドポイントにデプロイする前に、 mlflow.models.predictと入力例を使用して仮想環境でオフライン予測をテストします。MLflowデプロイメント環境をシミュレートし、変更された依存関係のテストを可能にする検証APIsを提供します。
デプロイ前の検証オプションには、 MLflow Python APIとMLflow 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を使用して、これを文字列依存関係のオーバーライドまたは追加のリストとして指定できます。
例えば:
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モデル アーティファクト内にあります。
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を使用して、デプロイ前にモデル入力がサービス エンドポイントで機能することを検証できます。
以下は、モデルが有効な入力例とともに記録されている場合に、実行の [アーティファクト] タブに自動生成されるコードの例です。
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サービング入力を生成することで、記録済みモデルに対して入力例をテストすることもできます。
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)
モデルの配信を手動でテストする
次の手順を使用して、モデルの提供動作を手動でテストできます。
- ノートブックを開き、機械学習用のDatabricks Runtimeではなく、Databricks Runtimeバージョンを使用する汎用クラスターにアタッチします。
- MLflow を使用してモデルをロードし、そこからデバッグを試みます。
モデルを PC にローカルにロードして、そこからデバッグすることもできます。次のコマンドを使用して、モデルをローカルにロードします。
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)