Pour réaliser ce TP, allez sur la branche 5_start_docker
git stash
git checkout 5_start_docker
Nouveauté sur cette branche :
setup.py
est créé.L'objectif de ce TP est de créer une application avec une image docker.
La première étape pour réussir à faire une application qui permet de faire des predictions est de réussir à découpler
prédiction et entraînement.
Pour cela, il nous faut sauvegarder le modèle et aussi tous les objets appris au moment du préprocessing.
Pour sauvegarder les informations apprises au moment du pré-processing, nous proposons d'implémenter une classe Preprocessor
qui a deux méthodes inspirées de l'API scikit-learn
: fit_transform
et transform
.
Nous avons proposé un début d'implémentation dans src.feature_engineering
: à vous de compléter cette classe en y ajoutant toutes les méthodes.
Dans le notebook, utiliser pickle
pour sauvegarder les deux objets :
with open("./models/model_rf.pkl", "wb") as file_out:
file_out.dump(model)
with open("./models/preprocessor.pkl", "rb") as file_out:
file_out.dump(preprocessor)
Pour vérifier que l'on a bien découplé train
et predict
créer un notebook predict notebook
Chargez les objets entraînés :
with open("./models/model_rf.pkl", "rb") as file_in:
model: RandomForestClassifier = pickle.load(file_in)
with open("./models/preprocessor.pkl", "rb") as file_in:
preprocessor: Preprocessor = pickle.load(file_in)
Lire le jeu de test par exemple
import pandas as pd
pd.read_csv("data/test.csv")
Puis exécuter le préprocessing, ensuite l'inférence
Maintenant que l'on a bien découplé train
et predict
nous pouvons faire nos prédictions via une api.
Dans le fichier api/main.py
nous proposons une api écrite avec fastapi qui permet de faire des prédictions.
Vous pouvez la lancer localement avec la commande :
uvicorn api.main:app
Puis dans votre navigateur requetez l'url : http://127.0.0.1:8000/predict/0/Braund,%20Mr.%20Owen%20Harris/23/
Explorez le fichier api/main.py
pour comprendre comment cela marche
Nous souhaitons maintenant faire tourner cela dans une image Docker pour assurer une reproductibilité en production.
Commencez par installer Docker sur votre machine.
Puis découvrir et compléter le Dockerfile
Pour lancer le docker :
docker build -t mlops-1 .
docker run -p 80:80 mlops-1
L'API est exposée et peut être atteinte à 0.0.0.0:80 La documentation est disponible ici, générée par swagger, elle peut également être utilisée pour interagir avec l'API.
Sinon, vous pouvez faire appel à la même route d'exemple.
C'était le dernier TP de cette formation, merci de l'avoir suivie avec nous.