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
où 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.
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
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 :
Toutes les questions de cette partie sont à coder dans le fichier landscape_classifier/api.py.
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é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.
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
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.
Écrivez un Dockerfile qui :
- Utilise l'image de base Python 3.12
- Installe
uvcomme 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
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 :
--rmpour supprimer le conteneur en fin d'exécution-p 8000:80pour rediriger le port 8000 de la machine hôte vers le port 80 du conteneur
docker run --rm -p 8000:80 landscape-classifierOn 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.
Comment modifier l'API pour qu'elle soit plus adaptée à la mise en production par image Docker ?
Votre réponse ici.
Pour toutes les questions qui n'ont pas de solution, consulter la branche solution du dépôt GitHub de ces travaux pratiques.