Skip to content

Commit

Permalink
CLEAN delete CI tp everywhere
Browse files Browse the repository at this point in the history
  • Loading branch information
Aurelien Massiot committed Sep 20, 2023
1 parent 3a1c055 commit c9e9324
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 187 deletions.
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ Pour suivre ce TP, nous allons utiliser les GitHub pages suivantes :

[TP 3 Documenter avec Sphinx](https://octo-technology.github.io/Formation-MLOps-1/tp3#0)

[TP 4 Écrire un script de CI](https://octo-technology.github.io/Formation-MLOps-1/tp4#0)
[TP 4 Créer un package python](https://octo-technology.github.io/Formation-MLOps-1/tp4#0)

[TP 5 Créer un package python](https://octo-technology.github.io/Formation-MLOps-1/tp5#0)

[TP 6 Créer une API, et la conteneuriser](https://octo-technology.github.io/Formation-MLOps-1/tp6#0)
[TP 5 Créer une API, et la conteneuriser](https://octo-technology.github.io/Formation-MLOps-1/tp5#0)

55 changes: 8 additions & 47 deletions TP_instructions/tp4.md
Original file line number Diff line number Diff line change
@@ -1,73 +1,34 @@
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 `4_start_packaging`

```shell
git stash
git checkout 4_start_ci
git checkout 4_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

Expand Down
109 changes: 99 additions & 10 deletions TP_instructions/tp5.md
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 `5_start_docker`

```shell
git stash
git checkout 5_start_packaging
git checkout 5_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.
126 changes: 0 additions & 126 deletions TP_instructions/tp6.md

This file was deleted.

0 comments on commit c9e9324

Please sign in to comment.