Evaluation de 4 plateformes Model-Hubs : Hugging Face, MLflow, DataHub et Weights & Biases

Concept

Le cycle de travail quotidien de tout data scientist ou data engineer contient au moins une sauvegarde/un téléchargement d'un modèle, qu'il soit fraîchement entraîné ou pré-entraîné pour un ajustement plus poussé. Être capable de suivre le cycle de vie d’un modèle, de le partager ou d’en explorer d'autres sont autant de tâches qui incombent régulièrement à un data scientist. Cela vaut également pour les datasets, les démonstrations techniques, etc. C'est de là qu’est apparu le besoin d'un HUB centralisé pour faciliter toutes ces tâches.

Pour cela, nous explorerons les outils qui permettent le chargement et le téléchargement de modèles (push and pull), le versioning, la supervision (monitoring), la gestion d’utilisateurs (user management) et la génération de Demo|API.

Dans cet article nous évaluerons 4 plateformes : Hugging Face, MLflow, DataHub et Weights & Biases (W&B)

1. Hugging Face

Hugging Face a deux outils très complets, Hugging Face Hub et Hugging Face Spaces. Le premier fonctionne comme un endroit centralisé où chacun peut partager et explorer des modèles et des datasets. Le second permet d'héberger des applications qui utilisent ces modèles.

Hugging Face Hub utilise des répertoires basés sur Git. Ce sont des espaces de stockage pouvant contenir tous les fichiers liés au modèle. Il offre d'autres avantages tels que :

  • Le versioning
  • L’historique des commits et les différences
  • Les branches
Répertoire d’un modèle BERT

Ces répertoires sont complétés par plusieurs informations/fonctionnalités utiles:

  • Des métadonnées sur le modèle (tâches, langues, métriques, etc.)
  • On peut jouer avec le modèle directement dans le navigateur !
  • Les graphiques des métriques d’entrainement sont affichés si le répertoire contient des traces TensorBoard.
  • Une API est fournie pour utiliser les modèles dans une configuration de production.
  • Un widget est également fourni pour faire des inférences directement dans le navigateur.
  • Il est possible d’utiliser les modèles de Hugging Face Hub dans plus de 10 frameworks tels que 🤗 Transformers, Asteroid et ESPnet
Widget d’un modèle BERT

Hugging Face Spaces, tout comme Hugging Face Hub, utilise des répertoires basés sur Git pour stocker le code de l'application. Il permet l'utilisation de deux SDK pour le développement d'applications Python (Streamlit et Gradio) ainsi que l'utilisation de HTML pour personnaliser les applications.

Exemple d’un Space dans HuggingFace Spaces

Il permet également de gérer les variables d'environnement, les dépendances externes et les métadonnées.

Pour l'utilisation de ces outils, Hugging Face propose deux plans à usage professionnel :

Plans à usage professionnel

2. MLflow

MLflow est une plateforme qui se compose de 4 partie : Tracking, Projects, Models, et Model Registry.

Tracking

MLflow Tracking permet le stockage de divers paramètres du modèle et centralise les données liées à son exécution. Il utilise un service web pour établir une connexion entre l'application client et le serveur de suivi. Le serveur de suivi saisit les données suivantes du modèle et utilise le backend pour les enregistrer:

  • Paramètres d'enregistrement
  • Versions du code
  • Métriques
  • Balises et notes supplémentaires
  • Heure de début et de fin de l'exécution

MLflow Tracking crée un dossier avec des fichiers locaux pour chaque exécution. Pour les environnements de production, il permet l'intégration avec différents services tels que Amazon S3, Azure Blob, GCS ou Databricks, ainsi que le stockage des métadonnées dans un SQL store (tels que SQL Lite et MySQL).

Projects

MLflow Projects offre un format standard pour le packaging de code réutilisable. Chaque projet est un répertoire contenant du code ou un répertoire Git et utilise un fichier descripteur (YAML) ou une convention pour spécifier ses dépendances et comment exécuter le code. Il est également possible de configurer le conteneur Docker et Kubernetes pour l'exécution du projet.
MLflow Projects fournit des outils en ligne de commande et une API pour exécuter le projet et créer le flux de travail.

Ci-dessous un exemple d'un fichier descripteur où le fichier conda.yaml est utilisé comme environnement conda (pour l’installation des dépendances du projet):

Il est possible de créer un projet multi-étapes couvrant différents points d'entrée (flux de travail de production). MLflow donne l'exemple suivant:

Nous pouvons résumer les étapes de la construction de notre projet de la manière suivante :

  • 1. Créer un fichier MLproject [définir le point d’entrée du projet].
  • 2. Créer un fichier conda.yaml pour toutes les dépendances python.
  • 3. Créer un projet python et enregistrer les fichiers MLproject et conda.yaml dans le répertoire racine (ou tout autre emplacement contenant l'exécuteur principal)
  • 4. Pusher le projet python sur GitHub
  • 5. Tester le projet local ainsi que le projet sur Github.

test local → mlflow run . -P <param>
test github →mlflow run git://<projet-url> <param>.

Models

Un MLfLow Model est un format de packaging standard des modèles sous plusieurs “flavors” et une variété d'outils pour les utiliser. Le concept de “flavor” fait la particularité de MLflow Models. Il s’agit d’une convention utilisée par les outils de déploiement intégrés dans MLflow (built-in) pour comprendre le modèle. Par exemple, la “flavor” mlflow.sklearn permet au modèle d'être chargé comme un objet Pipeline de sickit-learn qui pourra être utilisé dans un code utilisant sickit-learn.

Chaque modèle est stocké sous la forme d'un répertoire contenant des fichiers arbitraires et un fichier descripteur énumérant les différentes "flavors" dans lesquelles le modèle peut être utilisé.

Les objectifs des "flavors" sont les suivants :

  • Utiliser le même format de mémoire pour différents systèmes.
  • Éviter les surcharges de communication entre systèmes (sérialisation et désérialisation).
  • Fournir des fonctionnalités communes partageables.

Les "flavors" sont généralement de deux types :

  • les flavors intégrées (disponibles pour les algorithmes et bibliothèques de machine learning les plus populaires): H2O, Keras, MLeap, PyTorch, Scikit-Learn, MLlib, Tensorflow, ONNX (Open Neural Network Exchange), MXNET gluon, XGBoost, LightGBM
  • Custom flavors (docs)

Model Registry

MLflow Model Registry gère le cycle de vie complet du modèle de machine learning et fournit les fonctionnalités suivantes :

  • Centralized model store: Stockage pour le modèle enregistré.
  • Model lineage: Détails des expériences et des exécutions
  • Model versioning: Tracer les versions du modèle enregistré.
  • Model Stage: Attribution de phases prédéfinies ou personnalisées à chaque version de modèle (e.g. "Staging" et "Production") pour représenter le cycle de vie d'un modèle. Avant de déployer un modèle dans une application de production, la bonne pratique consiste souvent à le tester dans un environnement de préparation.
  • CRUD operations sur les modèles enregistrés : Create, update, delete, archive, list, etc.

Il existe deux types de workflows dans MLflow Model Registry : UI workflow et API workflow.

UI workflow

  • On commence par enregistrer le modèle sur la page Artifacts dans la section MLflow.
  • Ensuite on ajoute un nouveau modèle dans le champ ''Model name'' (on peut choisir parmi les modèles existants ou fournir un nouveau nom)
  • Une fois nommé, la section "Registered model" affichera les détails du modèle.
  • Toutes les versions des modèles seront affichées dans leurs sections détaillées.
  • La phase du modèle (Model Stage) peut être modifiée de la phase d'attente à celle de production à partir du menu déroulant.

API workflow

Une autre alternative pour utiliser Model Registry est d’utiliser l’interface API. Cette interface permet une multitude d’opérations sur le modèle (voir détails ici), notamment:

  • Publier un nouveau modèle : Il existe trois fonctions pour enregistrer un modèle et effectuer des opérations dessus :

mlflow.<model_flavor>.log_model()

mlflow.register_model()

ou

mlflow.client.create_registered_model().

  • Récupérer un modèle
  • Modifier la description du modèle
  • Mettre à jour la phase de déploiement d'un modèle publié.
  • Chercher et lister des modèles
  • etc.

3. DataHub

DataHub est une plateforme de métadonnées composée de 5 composants : Metadata Store, Metadata Models, Ingestion Framework, GraphQL API et User Interface, nous allons principalement nous concentrer sur les 2 composants: Metadata Store et Ingestion Framework, puisque les autres servent principalement à la communication entre les différentes entités de DataHub, aux événements et à l'interface utilisateur

Composants de DataHub

Metadata Store

Il s’agit du module responsable du stockage et de la gestion des métadonnées des différentes entités (datasets, pipelines, etc.). Il est possible de consulter, de modifier ou de supprimer des informations, tant à partir du service web que de la console via des appels HTTP. Datahub utilise Mysql, Elasticseach et Kafka.

Ingestion Framework

Une importante fonctionnalité de Datahub est qu’il permet l'intégration avec de nombreux outils de manière modulaire pour alimenter le magasin de métadonnées, comme Snowflake, Looker, MySQL, Kafka, etc. Ainsi de nouvelles informations sont importées à partir de modèles ou de datasets.

Par ailleurs, Datahub offre plusieurs fonctionnalités, notamment :

  • La Recherche et la Découverte en profondeur: Datahub permet d’exécuter facilement des recherches parmi tous les types d'entités. Il permet de voir les dépendances entre elles, de voir les statistiques associées et les recommandations par similarité.
  • La Documentation et le Tagging​: Datahub permet de rédiger une documentation pour chacune des entités pour enrichir les informations qui lui sont liées. Il permet également de leur attribuer des tags.
  • La Gouvernance des données: il est possible de créer et d'affecter des utilisateurs ou des groupes aux entités, afin de restreindre leur accès ou leur visibilité ou d'attribuer des crédits.

4. Weights and Biases

W&B est une plateforme qui offre 5 principaux outils qui couvrent 5 fonctionnalités :

  • Experiments pour le suivi
  • Reports pour l’analyse collaborative
  • Artifacts pour le le versioning des datasets et des modèles
  • Tables pour la data visualisation et l’analyse
  • Sweeps pour l’optimisation des hyperparamètres

Experiments

L’outil peut être facilement intégré à de nombreuses bibliothèques telles que Tensorflow, Pytorch, Keras, Scikit, Hugging Face, etc. Il permet de visualiser et de comparer les expériences et leurs métriques, vérifier l’avancement des expériences et visualiser en temps réel les résultats sur un ensemble de données. Il permet également de surveiller la consommation des ressources.

Reports

Il s'agit d'un outil qui permet, entre autres, de créer des rapports en direct et de manière collaborative, d'ajouter des graphiques, et de les exporter dans divers formats.

Artifacts

C'est l'outil de contrôle de version pour les modèles et les datasets. Il permet de sauvegarder à chaque étape d’entraînement les modèles et les datasets, et de comparer les modèles déjà entraînés pour évaluer leurs performances et voir leurs dépendances. Il intègre également un contrôle d'accès des utilisateurs à travers l’attribution des droits d'accès aux modèles et aux ensembles de données.

Tables

Il s'agit d'un outil de visualisation et d'analyse, permettant de filtrer, de trier, de générer de nouvelles colonnes à analyser dans un ensemble de données et de les comparer. Il permet également de créer des graphiques.

Sweeps

C’est l’outil d’optimisation des hyperparamètres. Il permet de visualiser les hyperparamètres qui impactent les métriques pertinentes et fournit des outils pour les optimiser. Il permet de conserver automatiquement les exécutions les plus prometteuses et de tester de nouvelles combinaisons d’hyperparamètres.

Résumé des composants de W&B.

Intégration

L’intégration de W&B est très simple. Il suffit d’initialiser le framework pour tout enregistrer. Il est possible de gérer tout le reste depuis le web.

Remerciement

Merci à nos collègues Ismail EL HATIMI et Renaud CARDIN pour la revue de l’article.

A propos de l’auteur

Javier MARTINEZ est data scientist à La Javaness depuis 2021.

--

--

We help organizations to succeed in the new paradigm of “AI@scale”, by using machine intelligence responsibly and efficiently : www.lajavaness.com

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
La Javaness R&D

La Javaness R&D

We help organizations to succeed in the new paradigm of “AI@scale”, by using machine intelligence responsibly and efficiently : www.lajavaness.com