Freigeben über


Bereitstellen von Python-Code mit der Modellbereitstellung

In diesem Artikel wird beschrieben, wie Sie Python-Code mit der Modellbereitstellung bereitstellen.

Die Python-Funktion pyfunc von MLflow bietet Flexibilität beim Bereitstellen beliebiger Python-Codeausschnitte oder Python-Modelle. Die folgenden Beispiele stellen Szenarios dar, in denen Sie den Leitfaden verwenden sollten.

  • Ihr Modell erfordert eine Vorverarbeitung, bevor Eingaben an die Vorhersagefunktion des Modells übergeben werden können.
  • Ihr Modellframework wird von MLflow nicht nativ unterstützt.
  • Ihre Anwendung erfordert, dass die Rohausgaben des Modells für den Verbrauch nachverarbeitet werden.
  • Das Modell selbst verfügt über eine Verzweigungslogik pro Anforderung.
  • Sie möchten vollständig benutzerdefinierten Code als Modell bereitstellen.

Erstellen eines benutzerdefinierten MLflow-Python-Funktionsmodells

MLflow bietet die Möglichkeit, Python-Code mit dem benutzerdefinierten Python-Modellformat zu protokollieren.

Es gibt zwei erforderliche Funktionen beim Packen beliebigen Python-Codes mit MLflow:

  • load_context: Alles, was nur einmal geladen werden muss, damit das Modell funktioniert, sollte in dieser Funktion definiert werden. Das ist wichtig, damit das System die Anzahl der Artefakte minimiert, die während der predict-Funktion geladen werden, was Rückschlüsse beschleunigt.
  • predict: Diese Funktion enthält die gesamte Logik, die jedes Mal ausgeführt wird, wenn eine Eingabeanforderung gestellt wird.

Protokollieren des Python-Funktionsmodells

Obwohl Sie Ihr Modell mit benutzerdefiniertem Code schreiben, ist es möglich, in Ihrer Organisation freigegebene Codemodule zu verwenden. Mit dem code_path-Parameter können Ersteller*innen von Modellen vollständige Codeverweise protokollieren, die in den Pfad geladen und von anderen benutzerdefinierten pyfunc-Modellen verwendet werden können.

Wenn ein Modell beispielsweise mit dem folgenden Code protokolliert wird:

mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])

Code aus preprocessing_utils ist im geladenen Kontext des Modells verfügbar. Das folgende Beispielmodell verwendet diesen Code.

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)

Bereitstellen Ihres Modells

Nachdem Sie Ihr benutzerdefiniertes pyfunc-Modell protokolliert haben, können Sie es bei Unity Catalog oder der Arbeitsbereichsregistrierung registrieren und Ihr Modell an einen Modellbereitstellungsendpunkt bereitstellen.

Notebookbeispiel

Im folgenden Notebookbeispiel wird veranschaulicht, wie Sie die Modellausgabe anpassen, wenn die Rohausgabe des abgefragten Modells für dessen Nutzung nachverarbeitet werden muss.

Anpassen der Modellbereitstellungsausgabe mit dem PyFunc-Notebook in MLflow

Notebook abrufen