Python-code implementeren met Model Serving
In dit artikel wordt beschreven hoe u Python-code implementeert met Mosaic AI Model Serving.
De Python-functie van MLflow biedt pyfunc
flexibiliteit om elk stukje Python-code of elk Python-model te implementeren. Hier volgen voorbeeldscenario's waarin u de handleiding kunt 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 Indeling van Python-modellen.
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 gedaan.
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 code_path
parameter 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 uit de code 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 bedienen op een eindpunt voor modelservering.
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.