モデルサービングで 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 に登録する し、 モデルをモデルサービング エンドポイントに提供できます。

ノートブックの例

次のノートブックの例は、クエリされたモデルの未加工の出力を後処理して使用する必要がある場合に、モデル出力をカスタマイズする方法を示しています。

MLflow PyFunc を使用したモデル提供出力のカスタマイズノートブック

ノートブックを新しいタブで開く