Python-code implementeren met Model Serving
In dit artikel wordt beschreven hoe u uw aangepaste Python-code implementeert met Mosaic AI Model Serving. Het voorbeeld in dit artikel is gericht op het bieden van richtlijnen voor het toevoegen van voorverwerkings- en postverwerkingslogica aan uw model en het implementeren ervan.
De Python-functie van MLflow, pyfunc
, biedt flexibiliteit om elk stukje Python-code of elk Python-model te implementeren. Hieronder volgen voorbeeldscenario's where waarvoor u de handleiding mogelijk wilt gebruiken.
- Uw model vereist voorverwerking voordat invoer kan worden doorgegeven aan de voorspellingsfunctie van het model.
- Uw modelframework wordt niet systeemeigen ondersteund door MLflow.
- Voor uw toepassing moeten de onbewerkte uitvoer van het model na verwerking worden verwerkt voor gebruik.
- Het model zelf heeft vertakkingslogica per aanvraag.
- U wilt volledig aangepaste code implementeren als een model.
Een aangepast MLflow Python-functiemodel maken
MLflow biedt de mogelijkheid om Python-code te registreren met de aangepaste Python-modellenindeling.
Er zijn twee vereiste functies bij het verpakken van willekeurige Python-code met MLflow:
-
load_context
: alles wat slechts één keer moet worden geladen om het model te laten werken, moet worden gedefinieerd in deze functie. Dit is van cruciaal belang, zodat het systeem het aantal artefacten dat tijdens depredict
functie wordt geladen, minimaliseert, waardoor deductie wordt versneld. -
predict
: deze functie bevat alle logica die wordt uitgevoerd telkens wanneer een invoeraanvraag wordt ingediend.
Uw Python-functiemodel registreren
Hoewel u uw model schrijft met aangepaste code, is het mogelijk om gedeelde modules met code van uw organisatie te gebruiken. Met de parameter code_path
kunnen auteurs van modellen volledige codeverwijzingen vastleggen die in het pad worden geladen en kunnen ze worden gebruikt vanuit andere aangepaste pyfunc
-modellen.
Als een model bijvoorbeeld wordt geregistreerd met:
mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])
Code van preprocessing_utils
is beschikbaar in de geladen context van het model. Hier volgt een voorbeeldmodel dat gebruikmaakt van deze 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)
Uw model bedienen
Nadat u uw aangepaste pyfunc
-model hebt geregistreerd, kunt u het registreren bij Unity Catalog of Workspace Registry en uw model leveren aan een Model Serving-eindpunt.
Voorbeeld van notitieblok
In het volgende notebookvoorbeeld ziet u hoe u modeluitvoer aanpast wanneer de onbewerkte uitvoer van het opgevraagde model na verwerking moet worden verwerkt voor verbruik.