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 derpredict
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.