Skip to content

shuuchuu/landscape-classifier

Repository files navigation

MLFlow, registre de modèles & déploiement

Identifiants pour le serveur MLFlow

Créez un fichier creds.env qui contient les lignes suivantes :

export MLFLOW_TRACKING_URI=https://dagshub.com/m09/landscape-classifier.mlflow
export MLFLOW_TRACKING_USERNAME=username
export MLFLOW_TRACKING_PASSWORD=password

username et password sont les valeurs récupérées sur le site de DagsHub comme pour configurer une remote DVC.

Il faudra utiliser source creds.env avant de lancer les commandes et le code qui intéragit avec MLFlow.

Récupération des données

Utilisez le code suivant pour récupérer les données :

dvc import https://github.com/shuuchuu/dataset-landscape.git seg_train -o train-data

Publication d'un modèle sur un registre de modèle

Adaptez le fichier train.py pour entraîner un modèle en enregistrant les métriques avec MLFlow Tracking. Les pages sur Keras de l'API Python MLFlow & de la flavor Keras des modèles MLFlow pourront être utiles.

Publiez ensuite le modèle appris dans le registre de modèles MLFlow en fin d'exécution. Cette page en parle ainsi que celle-ci.

Vous pourrez partir du code suivant :

Création d'une API avec FastAPI

Toutes les questions de cette partie sont à coder dans le fichier landscape_classifier/api.py.

Création d'une fonction de prétraitement adaptée à l'inférence

Créez une fonction pour charger une image dans le même format que celui utilisé pendant l'entraînement. Quel est le point auquel il faut faire extrêmement attention à ce stade ?

Création d'une fonction de chargement de modèle

Créez une fonction qui récupère le modèle entraîné au préalable depuis le registre de modèle MLFlow. Cette fonction prendra en entrée l'URI du modèle à récupérer.

Création d'une classe de retour FastAPI

FastAPI utilise l'excellente bibliothèque Pydantic pour gérer les types d'entrée et de sortie des requêtes HTTP.

Créez une classe pour modéliser le type de retour avec la librairie Pydantic. La classe de retour devra contenir a minima la classe prédite (celle avec la probabilité maximale), et un dictionnaire des différentes classes et leur probabilité selon le modèle

Création de l'API FastAPI

Implémentez l'API d'inférence à l'aide d'une méthode POST qui acceptera un fichier d'image. Vous pourrez vous aider de cette page de documentation.

Création d'un Dockerfile

Écrivez un Dockerfile qui :

  • Utilise l'image de base Python 3.12
  • Installe uv comme montré en cours
  • Installe les dépendances du projet
  • Copie les fichiers du projet
  • Met en place un point d'entrée qui lance le serveur FastAPI

Construction d'image docker

Pour construire l'image (hors de CodeSpace), on utilise la commande docker build et son option -t pour préciser un nom et on donne le dossier courant en argument (. si on est dans le dossier racine du projet) :

docker build -t shuuchuu/landscape-classifier .

Pour exécuter l'image, on utilise docker run. Ici avec les options :

  • --rm pour supprimer le conteneur en fin d'exécution
  • -p 8000:80 pour rediriger le port 8000 de la machine hôte vers le port 80 du conteneur
docker run --rm -p 8000:80 landscape-classifier

On peut alors naviguer à l'adresse par défaut de la documentation FastAPI pour lire la documentation de l'API et l'utiliser comme client de test.

Amélioration de l'API

Comment modifier l'API pour qu'elle soit plus adaptée à la mise en production par image Docker ?

Votre réponse ici.

Solution

Pour toutes les questions qui n'ont pas de solution, consulter la branche solution du dépôt GitHub de ces travaux pratiques.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks