À l'issue de ce TP, vous aurez découvert :
- Locust, un framework pour faire des tirs de performance
- La méthode pour créer des tests de performance
Présentation des nouveautés sur la branche de ce TP
Récupérer la branche du TP :
git checkout 6_start_tp_tir_performance
Les nouveautés sur cette branche sont les suivantes :
- Le
requirements.txt
contient une nouvelle dépendance : locust
- Un fichier locust.py qui contient un template de tir de performance
Pour réaliser ce TP les tirs de performance se feront depuis votre PC personnel.
Pour cela :
- Cloner le repository
git clone https://github.com/octo-technology/Formation-MLOps-3.git
- Entrer dans le dossier contenant le repository :
cd Formation-MLOps-3
- Installer locust en local
pip install locust
Pour pouvoir faire un tir de performance sur une machine déployée, il faut s'authentifier
Dans le cas de notre machine de TP, l'authentification se fait avec un header Cookie
, nous allons le récupérer dans
notre navigateur :
- Aller sur l'interface Swagger utilisée dans les TPs précédents
- Clic droit, inspecter
- Aller dans l'onglet
Network
qui est apparu
- Lancer une requête en remplaçant
/docs
par /health
dans l'URL
- Cliquer sur la requête
health
qui est apparue
- Dans Request Headers copier le contenu de
Cookie
- Le coller dans la variable
YOUR_COOKIE
dans locustfile.py

Pour lancer le tir de performance :
- Dans votre terminal, taper
locust
- Accéder à http://0.0.0.0:8089
Vous verrez alors l'interface de configuration suivante :

- Pour configurer :
- Number of user : nombre d'utilisateurs simulés. Commençons par
10
.
- Spawn rate : nombre de créations d'utilisateurs par seconde. Commençons par
1
.
- Host : route du server sur lequel faire le test.
https://lab.aws.octo.training/jupyter/user/admin/swagger/
⚠️ Remplacer admin
par votre user.
- Cliquer sur start swarming.
- Verifier que cela fonctionne :
- Est-ce que les appels finissent en succès ?
- Dans le fichier de log
api_logfile.log
sur le lab, est-ce que les appels apparaissent ?
- Modifier le fichier
locustfile.py
en remplaçant l'appel sur la route /health
par un appel sur la route /predict
avec les bons query parameters.
Par exemple : /predict?education=PhD&age=12&income=1000
- Arrêter et relancer locust dans votre terminal
- Réaliser un test de performance
- Jouer sur le nombre d'utilisateurs pour tirer des conclusions sur le fonctionnement de la route et ses limites.
Parcourir le code de prediction et trouver des améliorations pour accélérer la route.
Implémentez votre idée, et réaliser un nouveau tir de performance pour vérifier le résultat.
Si vous n'avez pas d'idée, voir la section d'après.
Comme idée d'amélioration, nous vous proposons :
- De charger le modèle au démarrage de l'application plutôt qu'à chaque prédiction.
- D'augmenter le nombre de worker de votre API. Avec l'argument
workers
de uvicorn.run
.
- Attention, il faut désactiver auto-reload pour que cela ait un effet.
- Attention, les modifications sur le fichier run.py concernent uvicorn, le
reload
n'aura pas d'impact. Il faut killer toute l'API.
Avec des tirs de performance as-code, il est possible de configurer de nombreux scenarios.
- Explorer la documentation de locust
- Changer l'implémentation de notre tir de performance pour générer aléatoirement les variables âge et éducation.
Les instructions du TP suivant sont ici