MLflow est une plateforme qui simplifie le développement de l'apprentissage automatique, notamment en assurant le suivi des expériences, le regroupement du code dans des exécutions reproductibles, ainsi que le partage et le déploiement de modèles. MLflow propose un ensemble d'API légères qui peuvent être utilisées avec n'importe quelle application ou bibliothèque d'apprentissage automatique existante (TensorFlow, PyTorch, XGBoost, etc.), quel que soit l'endroit où vous exécutez votre code ML (par exemple, dans des notebooks, des applications autonomes ou le cloud).
Voici un aperçu rapide, étape par étape, pour vous guider à travers les différentes étapes de l'exécution d'un pipeline MLflow sur Qarnot. Suivez le guide !
Si une autre version vous intéresse, n'hésitez pas à nous envoyer un e-mail à qlab@qarnot.com.
Avant de démarrer un calcul avec le SDK Python, quelques étapes sont nécessaires :
Note : en plus du SDK Python, Qarnot propose des SDK en C#, Node.js et une interface en ligne de commande.
Ce cas de test vous montrera comment entraîner un modèle ElasticNet. C'est un type de régression linéaire régularisée qui combine deux pénalités populaires, à savoir les fonctions de pénalité L1
et L2
. Cette combinaison permet d'apprendre un modèle éparse où peu de poids sont non nuls, comme avec Lasso, tout en conservant les propriétés de régularisation de Ridge. Nous contrôlons la combinaison de L1
et L2
à l'aide du paramètre l1_ratio
.
Nous utiliserons MLflow pour exécuter deux expériences avec des valeurs différentes d'alpha
et de l1_ratio
. Dans chaque expérience, nous fixerons l'un des hyperparamètres, ferons varier l'autre et enregistrerons la manière dont les performances du modèle changent.
alpha
: un nombre à virgule flottante qui multiplie les termes de pénalité. alpha
= 0 équivaut à un modèle de moindres carrés ordinaires.0 <= l1_ratio <= 1
. Pour l1_ratio = 0
, la pénalité est une pénalité L2. Pour l1_ratio = 1
, c'est une pénalité L1. Pour 0 < l1_ratio < 1
, la pénalité est une combinaison de L1 et L2.Les données utilisées ici sont celles de l'ensemble de données sur la qualité du vin. L'objectif est de prédire la qualité du vin (un score entre 0 et 10) en fonction de diverses propriétés (pH, densité, alcool, etc.).
Les fichiers d'entrée nécessaires pour ce tutoriel peuvent être téléchargés ici.
Une fois que vous avez tout téléchargé, votre répertoire de travail doit ressembler à ceci :
input
sklearn_elasticnet_wine
: contenu du projet MLflowconda.yaml
: fichier YAML pour la définition de l'environnement conda à utiliserMLproject
: fichier définissant le pipeline MLflowtrain.py
: script python pour l'entraînement du modèle ElasticNetmlflow_driver.py
: script pour le lancement des expériencesrun-mlflow.py
: lance le calcul sur Qarnot (code ci-dessous)Une fois que tout est prêt, utilisez le script suivant pour lancer le calcul sur Qarnot. Assurez-vous de copier votre jeton d'authentification dans le script (à la place de <<<MY_SECRET_TOKEN>>>
) pour pouvoir lancer la tâche sur Qarnot.
Pour lancer ce script, il suffit de copier le code suivant dans un script Python et d'exécuter python3 run-mlflow.py &
dans votre terminal.
#!/usr/bin/env python3
# Import the Qarnot SDK
import qarnot
# Connect to the Qarnot platform
conn = qarnot.Connection(client_token='<<<MY_SECRET_TOKEN>>>')
# Create a task
task = conn.create_task('Hello World - MLflow', 'mlflow', 1)
# Create a resource bucket and add input files
input_bucket = conn.create_bucket('mlflow-in')
input_bucket.sync_directory('input/')
# Attach the bucket to the task
task.resources.append(input_bucket)
# Create a result bucket and attach it to the task
task.results = conn.create_bucket('mlflow-out')
# Task constants are the main way of controlling a task's behaviour
task.constants['DOCKER_TAG'] = "v1.21.0"
task.constants['MLFLOW_DRIVER'] = "mlflow_driver.py"
# take a snapshot of the outputs every 5 seconds
task.snapshot(5)
# Submit the task to the API
task.run(output_dir='output')
À tout moment, vous pouvez suivre l'état de votre tâche.
Une fois l'entraînement terminé, le statut de la tâche devrait passer au vert et les résultats devraient être téléchargés automatiquement dans un répertoire output
. Vous y trouverez tous les fichiers générés par MLflow pour chaque exécution de chaque expérience. Cela inclut : les logs, les métriques, les paramètres, le modèle actuel et plus encore.
Vous pouvez visualiser ces résultats dans l'interface utilisateur (UI) intégrée de MLflow.
Pour ce faire, assurez-vous d'avoir mlflow
installé sur votre machine en exécutant pip install mlflow
Changez de répertoire pour aller dans outputs/
avec cd outputs/
Exécutez mlflow ui
Cela lancera l'UI sur localhost:5000
auquel vous pouvez accéder depuis votre navigateur.
À partir de ce tableau de bord, vous avez accès à :
Il est également possible de comparer différentes exécutions d'une même expérience. Par exemple, l'image ci-dessous montre la comparaison de 5 exécutions pour voir l'effet d'alpha
. Vous pouvez voir un nuage de points avec alpha
sur l'axe des x et le score RMSE
sur l'axe des y.
C'est tout ! Si vous avez des questions, veuillez contacter qlab@qarnot.com
et nous serons ravis de vous aider !