モデルサービングで Python コードをデプロイする
この記事では、カスタマイズした Python コードを Mosaic AI Model Servingでデプロイする方法について説明します。この記事の例では、モデルに前処理ロジックと後処理ロジックを追加してデプロイするためのガイダンスを提供することに重点を置いています。
MLflow の Python 関数 pyfunc
は、Python コードの任意の部分または任意の Python モデルを柔軟にデプロイできます。 次に、このガイドを使用するシナリオの例を示します。
モデルでは、入力をモデルの predict 関数に渡す前に前処理が必要です。
モデル フレームワークが MLflow でネイティブにサポートされていない。
アプリケーションでは、モデルの生の出力を後処理して使用する必要があります。
モデル自体には、要求ごとの分岐ロジックがあります。
完全にカスタマイズされたコードをモデルとしてデプロイしたいと考えています。
カスタム MLflow Python 関数モデルを構築する
MLflow には、 カスタム Python モデル形式で Python コードをログに記録する機能があります。
MLflow を使用して任意の Python コードをパッケージ化する場合、次の 2 つの関数が必要です。
load_context
- モデルが動作するために 1 回だけ読み込む必要があるものはすべて、この関数で定義する必要があります。 これは、システムがpredict
機能中に読み込まれるアーティファクトの数を最小限に抑え、推論を高速化するために重要です。predict
- この関数は、入力要求が行われるたびに実行されるすべてのロジックを格納します。
Python 関数モデルをログに記録する
カスタムコードを使用してモデルを記述している場合でも、組織のコードの共有モジュールを使用することは可能です。 code_path
パラメーターを使用すると、モデルの作成者は、パスに読み込まれ、他のカスタム pyfunc
モデルから使用できる完全なコード参照をログに記録できます。
たとえば、モデルが次のようにログに記録されているとします。
mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])
preprocessing_utils
のコードは、モデルの読み込みされたコンテキストで使用できます。このコードを使用するモデルの例を次に示します。
class CustomModel(mlflow.pyfunc.PythonModel):
def load_context(self, context):
self.model = torch.load(context.artifacts["model-weights"])
from preprocessing_utils.my_custom_tokenizer import CustomTokenizer
self.tokenizer = CustomTokenizer(context.artifacts["tokenizer_cache"])
def format_inputs(self, model_input):
# insert some code that formats your inputs
pass
def format_outputs(self, outputs):
predictions = (torch.sigmoid(outputs)).data.numpy()
return predictions
def predict(self, context, model_input):
model_input = self.format_inputs(model_input)
outputs = self.model.predict(model_input)
return self.format_outputs(outputs)
モデルを提供する
カスタム pyfunc
モデルをログに記録した後、それを Unity Catalog または ワークスペース Registry に登録する し、 モデルをモデルサービング エンドポイントに提供できます。