Freigeben über


Bereitstellen von Python-Code mit Model Serving

In diesem Artikel wird beschrieben, wie Sie Ihren angepassten Python-Code mit Mosaik AI Model Servingbereitstellen. Das Beispiel in diesem Artikel konzentriert sich auf die Bereitstellung von Anleitungen zum Hinzufügen von Vorverarbeitungs- und Postverarbeitungslogik zu Ihrem Modell und zur Bereitstellung.

Die Python-Funktion von MLflow, pyfunc, bietet Flexibilität, jeden Python-Code oder jedes Python-Modell bereitzustellen. Im Folgenden finden Sie Beispielszenarien, in denen Sie möglicherweise das Handbuch verwenden möchten.

  • Ihr Modell erfordert eine Vorverarbeitung, bevor Eingaben an die Vorhersagungsfunktion des Modells übergeben werden können.
  • Ihr Modellframework wird von MLflow nicht nativ unterstützt.
  • Ihre Anwendung erfordert, dass die Rohdaten des Modells für die Nutzung nachbearbeitet 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-Modellformatzu protokollieren.

Es gibt zwei erforderliche Funktionen beim Packen beliebiger Python-Code mit MLflow:

  • load_context – alles, was nur einmal geladen werden muss, damit das Modell ausgeführt werden kann, sollte in dieser Funktion definiert werden. Dies ist wichtig, damit das System die Anzahl der während der predict Funktion geladenen Artefakte minimiert, wodurch die Ableitung beschleunigt wird.
  • predict - diese Funktion enthält alle Logik, die bei jeder Eingabeanforderung ausgeführt wird.

Anmerkung

Vor der Bereitstellung des benutzerdefinierten Codes als Modell ist es von Vorteil, sicherzustellen, dass das Modell bedient werden kann. In der MLflow-Dokumentation erfahren Sie, wie Sie mithilfe von mlflow.models.predict Modelle vor der Bereitstellung überprüfen können.

Protokollieren des Python-Funktionsmodells

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

Beispiel: Wenn ein Modell mit den folgenden Informationen protokolliert wird:

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

Code aus preprocessing_utils ist im geladenen Kontext des Modells verfügbar. Im Folgenden sehen Sie ein Beispielmodell, das diesen Code verwendet.

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)

Ihr Modell bedienen

Nachdem Sie Ihr benutzerdefiniertes pyfunc-Modell protokolliert haben, können Sie es im Unity-Katalog oder in der Arbeitsbereichsregistrierung registrieren und Ihr Modell an einem Model Serve-Endpunktbereitstellen.

Notebookbeispiel

Im folgenden Notizbuchbeispiel wird veranschaulicht, wie Sie die Modellausgabe anpassen, wenn die rohe Ausgabe des abgefragten Modells für den Verbrauch nach der Verarbeitung verarbeitet werden muss.

Anpassen der Modellbereitstellungsausgabe mit dem PyFunc-Notebook in MLflow

Notebook abrufen