Bereitstellen von Python-Code mit der Modellbereitstellung
In diesem Artikel wird beschrieben, wie Python-Code mit Mosaik AI Model Serving bereitgestellt wird.
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 derpredict
-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 im Unity-Katalog oder in 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.