Déployer du code Python avec une mise en service de modèles
Cet article explique comment déployer du code Python avec Mosaïque AI Model Serve.
La fonction Python de MLflow, pyfunc
, offre une flexibilité pour déployer n’importe quel élément de code ou modèle Python. Voici des exemples de scénarios dans lesquels vous pouvez utiliser le guide.
- Votre modèle nécessite un prétraitement avant que les entrées puissent être passées à la fonction de prédiction du modèle.
- L’infrastructure de votre modèle n’est pas prise en charge en mode natif par MLflow.
- Votre application nécessite que les sorties brutes du modèle soient post-traitées pour être consommées.
- Le modèle lui-même a une logique de branchement par requête.
- Vous cherchez à déployer du code entièrement personnalisé en tant que modèle.
Construction d’un modèle personnalisé de fonction Python MLflow
MLflow offre la possibilité de journaliser le code Python dans le format personnalisé des modèles Python.
Il existe deux fonctions requises lors de l’empaquetage du code Python arbitraire avec MLflow :
load_context
: tout ce qui doit être chargé une seule fois pour que le modèle fonctionne doit être défini dans cette fonction. Cela est essentiel pour que le système réduise le nombre d’artefacts chargés au minimum pendant la fonctionpredict
, ce qui accélère l’inférence.predict
: cette fonction héberge toute la logique qui est exécutée chaque fois qu’une requête d’entrée est effectuée.
Journaliser le modèle de votre fonction Python
Même si vous écrivez votre modèle avec du code personnalisé, il est possible d’utiliser des modules de code partagés à partir de votre organisation. Avec le paramètre code_path
, les créateurs de modèles peuvent consigner des références de code complètes qui se chargent dans le chemin d’accès et sont utilisables à partir d’autres modèles personnalisés pyfunc
.
Par exemple, si un modèle est journalisé avec :
mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])
Le code de preprocessing_utils
est disponible dans le contexte chargé du modèle. Voici un exemple de modèle qui utilise ce 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)
Servir votre modèle
Une fois que vous avez enregistré votre modèle personnalisé pyfunc
, vous pouvez l’inscrire dans le catalogue Unity ou le Registre de l’espace de travail et servir votre modèle à un point de terminaison De service de modèle.
Exemple de Notebook
L’exemple de Notebook suivant montre comment personnaliser la sortie du modèle lorsque la sortie brute du modèle interrogé doit être post-traitée pour être consommée.