モデルサービングで Python コードをデプロイする
この記事では、 Mosaic AI Model Serving を使用して Python コードをデプロイする方法について説明します。
MLflow の Python 関数 pyfunc
を使用すると、任意の Python コードや Python モデルを柔軟にデプロイできます。 以下は、このガイドを使用するシナリオの例です。
入力をモデルの予測関数に渡す前に、モデルに前処理が必要です。
モデル フレームワークが 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 に登録する し、 モデルをモデルサービング エンドポイントに提供できます。