Pour réaliser ce TP, allez sur la branche 5_start_docker

git stash
git checkout 5_start_docker

Nouveauté sur cette branche :

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.

Construire une classe de 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.

Sauvegarder le modèle et le pré-processor

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.