Partager via


Déployer du code Python avec Model Service

Cet article explique comment déployer votre code Python personnalisé avec la solution de déploiement de modèles AI de Mosaic . L’exemple de cet article se concentre sur la fourniture de conseils pour l’ajout d’une logique de prétraitement et de post-traitement à votre modèle et son déploiement.

La fonction Python de MLflow, offre pyfuncune flexibilité pour déployer n’importe quel élément de code Python ou n’importe quel modèle Python. Voici des exemples de scénarios dans lesquels vous souhaiterez peut-être 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.
  • Votre infrastructure de 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 la consommation.
  • Le modèle lui-même a une logique de branchement par requête.
  • Vous souhaitez déployer du code entièrement personnalisé en tant que modèle.

Construire un modèle de fonction Python MLflow personnalisé

MLflow offre la possibilité d'enregistrer le code Python avec le format de modèles Python personnalisés .

Il existe deux fonctions requises lors de l’empaquetage de 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 pendant la fonction predict, ce qui accélère l’inférence.
  • predict : cette fonction héberge toute la logique exécutée chaque fois qu’une demande d’entrée est effectuée.

Remarque

Avant de déployer votre code personnalisé en tant que modèle, il est utile de vérifier que le modèle est capable d’être servi. Consultez la documentation MLflow pour savoir comment utiliser mlflow.models.predict pour valider des modèles avant le déploiement.

Enregistrer votre modèle de fonction Python

Même si vous écrivez votre modèle avec du code personnalisé, il est possible d’utiliser des modules partagés de code 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 connecté 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

Après avoir enregistré votre modèle pyfunc personnalisé, vous pouvez l’enregistrer dans Unity Catalog ou le registre de l’espace de travail et le distribuer sur un point de terminaison de mise en service de modèles.

Exemple de bloc-notes

L’exemple de notebook suivant montre comment personnaliser les résultats du modèle lorsque la sortie brute du modèle interrogé doit être post-traitée pour être utilisable.

Personnaliser la sortie de mise en service du modèle avec le notebook PyFunc MLflow

Obtenir le notebook