この記事のガイダンスは、エンドポイントのデプロイ プロセスを待つ前に、モデルに関する問題をキャッチするのに役立ちます。 Databricks では、モデル サービスを使用する際の開発エクスペリエンスを向上させるために、これらの検証手順を実行することをお勧めします。
デプロイ前に予測をテストする
モデルをサービス エンドポイントにデプロイする前に、mlflow.models.predict と入力の例を使って、仮想環境でオフライン予測をテストします。 MLflow には、デプロイ環境をシミュレートし、変更された依存関係のテストを可能にする検証 API が用意されています。
デプロイ前の検証オプションには、 MLflow Python API と MLflow CLI の 2 つがあります。 詳しいガイダンスについては、予測のテストに関する MLflow のドキュメントを参照してください。
次のパラメーターを指定できます。
- モデル提供にデプロイされるモデルの
model_uri。 - 次のいずれか:
- モデルの
input_data呼び出しに想定される形式のmlflow.pyfunc.PyFuncModel.predict()。 - 読み込まれ、
input_pathの呼び出しに使用される入力データが含まれるファイルを定義するpredict。
- モデルの
-
content_typeまたはcsv形式のjson。 - 予測をファイルに書き込む省略可能な
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 バージョンを使用している All-Purpose クラスターにアタッチします。ただし、Databricks Runtime for Machine Learning を使用しているクラスターは除きます。
- 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)