Passer au contenu principal

Ce que nous avons appris du suivi des expériences de machine learning avec ClearML

  |  W. Perry Wortman

Coécrit par Tien Duc Cao, ingénieur senior en machine learning chez Dashlane, et Quentin Grail, ingénieur en machine learning chez Dashlane

Chez Dashlane, nous travaillons sur plusieurs projets expérimentaux qui impliquent le machine learning (ML). Pour gérer ces expériences et mieux les organiser, nous utilisons ClearML, un framework MLOps open source. 

Lors de l'exécution de pipelines de ML, trois étapes cruciales sont nécessaires à la création d'une application réussie :  

  1. Gestion des données : nous prévoyons d'entraîner de nombreux modèles sur différents ensembles de données et différentes versions d'un même ensemble de données. Nous allons également tester notre modèle sur un autre ensemble de données. Pour ce faire, nous avons besoin d'une organisation claire de toutes les données afin de pouvoir répertorier, visualiser et récupérer les informations le plus efficacement possible.
  2. Suivi des expériences : nous voulons être en mesure de suivre les résultats des expériences, de les visualiser et de comparer les performances entre les différentes exécutions.
  3. Stockage des modèles : une fois que nous avons sélectionné le modèle le mieux adapté à notre tâche ou que nous avons décidé de passer à un autre modèle, nous voulons pouvoir en extraire facilement les paramètres afin de les intégrer à notre pipeline de production.

ClearML nous aide à réaliser ces trois tâches sans difficulté.

Les fonctionnalités de ClearML que nous avons trouvées utiles

Trois fonctionnalités sortent du lot :

  • Intégration avec Git : lors du lancement d'une nouvelle tâche, ClearML enregistre automatiquement le commitID, ainsi que les modifications du dépôt qui n'ont pas été validées. C'est très utile pour la reproductibilité de l'expérience et l'itération sur une exécution réussie.
  • Surveillance des ressources : l'utilisation du processeur graphique (GPU) et du processeur (CPU), ainsi que la mémoire, sont suivies dans les indicateurs. Nous pouvons ainsi tirer le meilleur parti de notre matériel en optimisant les hyperparamètres du modèle en fonction de la puissance du GPU disponible. Cela nous aide également à repérer les éventuels goulots d'étranglement dans le pipeline qui doivent être améliorés.
  • Suivi des hyperparamètres : ClearML détecte automatiquement tous les arguments que vous apportez à votre script (via le module argparse, par exemple). Vous pouvez ensuite facilement filtrer et comparer l'impact de ces paramètres.
Un exemple de suivi d'hyperparamètres affiché avec la précision du modèle
Un exemple de suivi d'hyperparamètres affiché avec la précision du modèle
Deux graphiques linéaires sont juxtaposés. À gauche, un graphique de suivi de la précision. À droite, un graphique de suivi des pertes.
Graphiques de suivi des pertes et de la précision
Sur un fond noir, un tableau de bord ClearML répertorie les 3 entraînements terminés.
Un tableau de bord ClearML avec les entraînements terminés

Les bases de ClearML

Pour vous aider à vous familiariser avec ClearML, voici quelques termes à connaître :

  • Task (tâche) : nous utilisons les tâches ClearML pour suivre les scripts Python (voire les notebooks Jupyter). De nombreux types de tâches sont pris en charge.
  • Artifact (artefact) : Nous utilisons les artefacts ClearML pour stocker les entrées et/ou les sorties des tâches.
  • Tag (balise) : chaque tâche ClearML peut être associée à un ou plusieurs tags, qui sont des mots-clés descriptifs qui vous aident à filtrer vos tâches.

Intégration de ClearML

Intégrer ClearML dans votre projet existant est un jeu d'enfant.

La configuration ne doit être faite qu'une seule fois en définissant ces trois variables d'environnement :

Vous pouvez également définir ces variables dans vos paramètres CI/CD si vous souhaitez exécuter vos pipelines d'entraînement via les pipelines GitHub ou GitLab.

Pour intégrer ClearML, il vous suffit d'ajouter ces lignes de code au début de votre script Python :

  • PROJECT_NAME : placez les tâches similaires, par exemple entraîner une architecture de modèle avec différents paramètres, dans le même projet. 
  • TASK_NAME : en une phrase (courte), décrivez l'objectif de votre script Python.
  • TAGS : Ajoutez votre liste de tags. Par exemple, « model-cnn,exp-data-augmentation ».
  • DESCRIPTION : mettez ici des explications détaillées sur votre expérience.

La progression de l'entraînement de votre modèle, par exemple, la perte d'entraînement, la perte de validation et plus encore, est automatiquement suivie si vous utilisez l'un de ces frameworks Python.

Si vous souhaitez suivre manuellement les indicateurs d'un modèle, tels que le score F1 sur le jeu de test, vous pouvez le faire avec une ligne de code :

Organisation des expériences

ClearML offre des mécanismes utiles pour mieux organiser nos expériences de ML.

  • Les sous-projets : par exemple, vous pouvez créer « X/models » pour garder une trace de toutes vos tâches d'entraînement et créer « X/datasets » pour stocker différents jeux de données d'entraînement. Ces deux sous-projets sont stockés dans le projet « X ».
  • Les tags : ces mots-clés courts décrivent l'objectif de vos expériences. Ils sont utiles pour regrouper toutes les expériences similaires. Étant donné qu'il n'y a aucune restriction concernant le nom des tags, c'est à vous de déterminer les conventions de dénomination qui facilitent la gestion de ces tags pour la recherche et l'organisation de vos expériences. Nous avons défini quelques préfixes simples :
  1. « Model- » pour les tâches qui entraînent des modèles de ML
  2. « data- » pour les tâches d'ingestion/de traitement de données
  3. « exp- » pour les tâches qui expérimentent de nouvelles idées

Utilisation d'artefacts pour suivre les données et les modèles

Vous pouvez enregistrer un objet en tant qu'artefact ClearML avec une seule ligne de code. Vous pouvez ensuite accéder à cet artefact en 1) téléchargeant manuellement l'objet sauvegardé depuis l'interface Web lorsque vous consultez les détails de votre tâche ou 2) en récupérant n'importe quelle tâche directement dans votre code et en utilisant l'artefact dans une autre expérience.

Chez Dashlane, nous utilisons principalement les artefacts dans trois cas de figure :

  1. Pour stocker les jeux de données : nous enregistrons et marquons nos jeux de données d'entraînement et de test en tant qu'artefacts afin que toutes les autres tâches puissent y accéder. Nous savons facilement quelle version des données a été utilisée pour chaque tâche. Nous pouvons par la suite filtrer les expériences en fonction des données d'entraînement ou en comparant les résultats sur un jeu de données précis.
  1. Pour stocker les modèles entraînés : nous enregistrons toujours le modèle entraîné afin de pouvoir le télécharger ultérieurement et l'évaluer sur un nouveau jeu de données ou l'utiliser dans une autre application.
  1. Pour analyser les résultats des modèles : lors de l'évaluation d'un modèle enregistré sur un jeu de données enregistré, nous enregistrons également les prédictions du modèle en tant qu'artefact. Ensuite, nous pouvons télécharger localement les prédictions et commencer à analyser les résultats.

Astuces ClearML

  • Il n'y a pas de différence entre lancer votre script Python sur votre propre machine ou sur une machine distante. Pour éviter d'éventuels problèmes, vous pouvez donc :
  1. Configurer une variable d'environnement qui indique à votre script d'entraînement de n'utiliser qu'une petite partie des données d'entraînement et de ne s'entraîner qu'en une seule epoch. Vous pouvez ainsi repérer les bugs potentiels dans votre code tout en conservant les entrées/sorties de chaque expérience enregistrées dans les expériences ClearML.
  2. Lancer le véritable processus d'entraînement avec toutes les données disponibles sur une machine distante après avoir résolu tous les problèmes à l'étape précédente.
  • ClearML suit les modifications non validées afin que vous puissiez itérer de nouvelles idées rapidement sans créer trop de petites validations.

ClearML nous a aidés à mieux organiser nos expériences de ML afin de proposer des modèles de ML plus fiables aux utilisateurs de Dashlane. Il pourrait aussi être utile à votre organisation.

Chez Dashlane, nous gérons de nombreux projets de machine learning, y compris notre moteur de saisie automatique présenté ici. Nous expérimentons également en interne de nouvelles fonctionnalités alimentées par le ML. En entraînant efficacement et en sélectionnant les meilleurs modèles, nous pouvons offrir une meilleure expérience produit à nos clients. ClearML nous aide à mieux organiser nos expériences de ML afin de proposer des modèles de ML plus fiables.

Inscrivez-vous pour connaître toute l'actualité de Dashlane