-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Aurelien Massiot
committed
Sep 20, 2023
1 parent
3a1c055
commit e897cbe
Showing
4 changed files
with
110 additions
and
188 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,76 +1,37 @@ | ||
summary: TP4 - Créer une CI GitHub | ||
summary: TP4 - Packager | ||
id: tp4 | ||
categories: setup | ||
tags: setup | ||
status: Published | ||
authors: OCTO Technology | ||
Feedback Link: https://github.com/octo-technology/Formation-MLOps-1/issues/new/choose | ||
|
||
# TP4 - Créer une CI GitHub | ||
# TP4 - Packager | ||
|
||
## Vue d'ensemble | ||
|
||
Duration: 0:01:00 | ||
|
||
Pour réaliser ce TP, allez sur la branche `4_start_ci` | ||
Pour réaliser ce TP, allez sur la branche `5_start_packaging` | ||
|
||
```shell | ||
git stash | ||
git checkout 4_start_ci | ||
git checkout 5_start_packaging | ||
``` | ||
|
||
Nouveauté sur cette branche : | ||
- La documentation sphinx est créée. | ||
- La CI est créée. | ||
|
||
L'objectif de ce TP est de créer une CI qui valide automatiquement notre code. | ||
L'objectif de ce TP est de créer un package python déployable. | ||
|
||
## Créer un compte GitHub | ||
|
||
Duration: 0:10:00 | ||
|
||
Vous avez besoin de votre propre compte GitHub pour pouvoir `push` du code et donc éxécuter la ci | ||
|
||
1. Créez un compte GitHub (si vous n'en avez pas déjà un) | ||
2. Créez un projet vide | ||
3. Changer l'url de Git en loval | ||
- Vous pouvez voir votre url actuelle en tapant `git remote -v`. | ||
- Changez l'url de votre dépôt GitHub avec la commande `git remote set-url origin <<github ssh ou https url>>` | ||
4. Pousser la branche actuelle vers votre dépôt `git push --set-upstream origin 4_start_ci` | ||
|
||
Une autre possibilité est de forker notre dépôt (vous devez toujours créer un compte et cliquer sur fork) et de le cloner. | ||
|
||
Une fois que c'est fait, allez sur l'interface GitHub dans l'onglet "Actions" vous devriez trouver un fail. | ||
|
||
![failed ci](./images/failed_ci_github.png) | ||
|
||
## Corrigez le fichier de CI | ||
## Créer un package python | ||
|
||
Duration: 0:20:00 | ||
|
||
Dans cette branche vous avez un fichier `.github/workflow/ci.yml`, votre travail est maintenant de compléter ce CI pour valider automatiquement votre code à chaque push. | ||
|
||
Votre but est de compléter le fichier pour que votre CI fonctionne et soit vert. | ||
|
||
Conseils : Vous devriez le faire étape par étape, pour chaque étape | ||
1. Testez la commande localement dans votre terminal | ||
2. Placez-la dans le fichier `ci.yml`. | ||
3. Poussez votre code pour valider qu'il fonctionne | ||
|
||
## Si vous avez fini en avance | ||
|
||
Vous pouvez explorer toutes les possibilités avec la [documentation GitHub] (https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python) | ||
|
||
## Avant de changer de TP | ||
|
||
Duration: 0:02:00 | ||
|
||
N'oubliez pas de remettre la `remote` à l'état d'origine avec la commande | ||
```shell | ||
git remote set-url origin https://github.com/octo-technology/Formation-MLOps-1.git | ||
``` | ||
En suivant la démonstration de l'instructeur, vous allez créer un `package` python. | ||
|
||
## Lien vers le TP suivant | ||
|
||
Duration: 0:01:00 | ||
|
||
Les instructions du TP suivant sont [ici](https://octo-technology.github.io/Formation-MLOps-1/tp5#0) | ||
Les instructions du TP suivant sont [ici](https://octo-technology.github.io/Formation-MLOps-1/tp6#0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,37 +1,126 @@ | ||
summary: TP5 - Packager | ||
summary: TP5 - Conteneuriser | ||
id: tp5 | ||
categories: setup | ||
tags: setup | ||
status: Published | ||
authors: OCTO Technology | ||
Feedback Link: https://github.com/octo-technology/Formation-MLOps-1/issues/new/choose | ||
|
||
# TP5 - Packager | ||
# TP5 - Conteneuriser | ||
|
||
## Vue d'ensemble | ||
|
||
Duration: 0:01:00 | ||
|
||
Pour réaliser ce TP, allez sur la branche `5_start_packaging` | ||
Pour réaliser ce TP, allez sur la branche `6_start_docker` | ||
|
||
```shell | ||
git stash | ||
git checkout 5_start_packaging | ||
git checkout 6_start_docker | ||
``` | ||
|
||
Nouveauté sur cette branche : | ||
- La CI est créée. | ||
|
||
L'objectif de ce TP est de créer un package python déployable. | ||
- Le fichier `setup.py` est créé. | ||
- Une API est mise à disposition | ||
|
||
## Créer un package python | ||
L'objectif de ce TP est de créer une application avec une image docker. | ||
|
||
## Découpler entraînement et inférence | ||
|
||
Duration: 0:30:00 | ||
|
||
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 | ||
|
||
Avec `pickle` sauvegarder les deux objets : | ||
|
||
```python | ||
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) | ||
``` | ||
|
||
## Créer un notebook d'inférence | ||
|
||
Duration: 0:10:00 | ||
|
||
Pour vérifier que l'on a bien découplé `train` et `predict` créer un notebook `inference.pkl` | ||
|
||
Chargez les objets entraînés : | ||
|
||
```python | ||
|
||
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 | ||
|
||
```python | ||
import pandas as pd | ||
|
||
pd.read_csv("data/test.csv") | ||
``` | ||
|
||
Puis exécuter le préprocessing, ensuite l'inférence | ||
|
||
## Découvrir l'API | ||
|
||
Duration: 0:10:00 | ||
|
||
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 : | ||
|
||
```shell | ||
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 | ||
|
||
## Conteneuriser le tout | ||
|
||
Duration: 0:20:00 | ||
|
||
En suivant la démonstration de l'instructeur, vous allez créer un `package` python. | ||
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 : | ||
|
||
```shell | ||
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](http://127.0.0.1/docs), 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. | ||
|
||
## Lien vers le TP suivant | ||
## Fin | ||
|
||
Duration: 0:01:00 | ||
|
||
Les instructions du TP suivant sont [ici](https://octo-technology.github.io/Formation-MLOps-1/tp6#0) | ||
C'était le dernier TP de cette formation, merci de l'avoir suivie avec nous. |
This file was deleted.
Oops, something went wrong.