-
Notifications
You must be signed in to change notification settings - Fork 6
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
1 parent
0f2a4d2
commit 336249e
Showing
5 changed files
with
33 additions
and
215 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,74 +1,31 @@ | ||
::: {.callout-tip} | ||
## Application 17: Dockeriser l'API (intégration continue) | ||
|
||
## Application 16: Mise à disposition sous forme d'API locale | ||
- Pour rendre la structure du projet plus lisible, déplacer `api.py` -> `api/main.py` | ||
|
||
- Installer `fastAPI` et `uvicorn` puis les ajouter au `requirements.txt` | ||
- Renommer le fichier `main.py` en `train.py`. Dans ce script, ajouter une | ||
sauvegarde du modèle après l'avoir entraîné, sous le | ||
format [`joblib`](https://scikit-learn.org/stable/model_persistence.html#python-specific-serialization). | ||
- Faire tourner | ||
|
||
```{.bash filename="terminal"} | ||
python train.py | ||
``` | ||
|
||
pour enregistrer en local votre modèle de production. | ||
|
||
- Modifier les appels à `main.py` dans votre `Dockerfile` et vos actions `Github` | ||
sous peine d'essuyer des échecs lors de vos actions `Github` après le prochain _push_. | ||
|
||
- Ajouter `model.joblib` au `.gitignore` car `Git` n'est pas fait pour | ||
ce type de fichiers. | ||
|
||
Nous allons maintenant passer au développement de l'API. | ||
Comme découvrir `FastAPI` n'est pas l'objet de cet enseignement, nous | ||
donnons directement le modèle pour créer l'API. Si vous | ||
désirez tester de vous-mêmes, vous pouvez créer votre | ||
fichier sans vous référer à l'exemple | ||
|
||
- Créer le fichier `api.py` permettant d'initialiser l'API: | ||
- Créer un script `api/run.sh` à la racine du projet qui lance le script `train.py` puis déploie localement l'API | ||
|
||
<details> | ||
<summary> | ||
Fichier `api.py` | ||
</summary> | ||
<summary>Fichier `run.sh`</summary> | ||
|
||
```{.python include="./applications/code/appli17_api_main.py" filename="src/models/train_evaluation.py"} | ||
``` | ||
</details> | ||
|
||
- Déployer en local l'API avec la commande | ||
```{.bash filename="api/run.sh" no-prefix=true} | ||
#/bin/bash | ||
|
||
```{.bash filename="terminal"} | ||
uvicorn api:app --reload --host "0.0.0.0" --port 5000 | ||
``` | ||
|
||
- A partir du `README` du service, se rendre sur l'URL de déploiement, | ||
ajouter `/docs/` à celui-ci et observer la documentation de l'API | ||
- Se servir de la documentation pour tester les requêtes `/predict` | ||
- Récupérer l'URL d'une des requêtes proposées. La tester dans le navigateur | ||
et depuis `Python` avec `requests` : | ||
|
||
```{.python} | ||
import request | ||
requests.get(url).json() | ||
python3 train.py | ||
uvicorn api.main:app --reload --host "0.0.0.0" --port 5000 | ||
``` | ||
</details> | ||
|
||
- Une fois que vous avez testé, vous pouvez tuer l'application en faisant <kbd>CTRL</kbd>+<kbd>C</kbd>. Retester | ||
votre bout de code `Python` et comprendre l'origine du problème. | ||
- Donner au script `api/run.sh` des permissions d'exécution : `chmod +x api/run.sh` | ||
|
||
::: | ||
- Ajouter `COPY api ./api` pour avoir les fichiers nécessaires au lancement dans l'API dans l'image | ||
|
||
::: {.callout-caution collapse="true"} | ||
## Checkpoint | ||
- Changer l'instruction `CMD` du `Dockerfile` pour exécuter le script `api/run.sh` au lancement du conteneur (`CMD ["bash", "-c", "./api/run.sh"]`) | ||
|
||
```{.bash filename="terminal"} | ||
git stash #<1> | ||
git checkout appli17 | ||
``` | ||
1. Pour annuler les modifications depuis le dernier _commit_ | ||
- Mettre à jour votre `requirements.txt` pour tenir compte des nouveaux _packages_ utilisés | ||
|
||
- *Commit* et *push* les changements | ||
|
||
![](/checkpoint.jpg){width=80% fig-align="center"} | ||
- Une fois le CI terminé, récupérer la nouvelle image dans votre environnement de test de `Docker` et vérifier que l'API se déploie correctement | ||
|
||
::: |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
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 |
---|---|---|
|
@@ -21,6 +21,7 @@ on: | |
- main | ||
- dev | ||
tags: | ||
- 'v*.*.*' | ||
jobs: | ||
docker: | ||
|