paint-brush
Comment configurer une machine de développement avec MLFlow et MinIOpar@minio
6,371 lectures
6,371 lectures

Comment configurer une machine de développement avec MLFlow et MinIO

par MinIO10m2023/11/03
Read on Terminal Reader
Read this story w/o Javascript

Trop long; Pour lire

Cet article fournit une recette facile à suivre pour configurer MLflow et MinIO sur une machine de développement.
featured image - Comment configurer une machine de développement avec MLFlow et MinIO
MinIO HackerNoon profile picture

À propos de MLflow

MLflow est une plateforme open source conçue pour gérer le cycle de vie complet de l'apprentissage automatique. Databricks l'a créé en tant que projet interne pour relever les défis rencontrés dans leurs propres processus de développement et de déploiement d'apprentissage automatique. MLflow a ensuite été publié en tant que projet open source en juin 2018.


En tant qu'outil de gestion du cycle de vie complet, MLflow contient les composants suivants.


  • Suivi MLflow – Un ingénieur utilisera le plus cette fonctionnalité. Il permet d’enregistrer et d’interroger des expériences. Il assure également le suivi du code, des données, de la configuration et des résultats de chaque expérience.
  • Projets MLflow : permet de reproduire des expériences en regroupant le code dans un format indépendant de la plate-forme.
  • Modèles MLflow - Déploie des modèles d'apprentissage automatique dans un environnement où ils peuvent être servis.
  • Référentiels MLflow - Permet le stockage, l'annotation, la découverte et la gestion de modèles dans un référentiel central.


Il est possible d'installer toutes ces fonctionnalités sur une machine de développement afin que les ingénieurs puissent expérimenter à leur guise sans se soucier de gâcher une installation de production.

Tous les fichiers utilisés pour installer et configurer MLflow se trouvent dans notre référentiel Github .

Options d'installation

La documentation MLFlow répertorie pas moins de 6 options pour installer MLFlow. Cela peut sembler excessif, mais ces options s'adaptent à différentes préférences pour une base de données et à différents niveaux de complexité du réseau.


L'option la mieux adaptée à une organisation qui dispose de plusieurs équipes utilisant de grands ensembles de données et créant des modèles qui peuvent eux-mêmes devenir assez volumineux est présentée ci-dessous. Cette option nécessite la configuration de trois serveurs - un serveur de suivi, une base de données PostgreSQL et un magasin d'objets S3 - notre implémentation utilisera MinIO.


Options d'installation


Le serveur de suivi est un point d'entrée unique depuis la machine de développement d'un ingénieur pour accéder aux fonctionnalités MLflow. (Ne vous laissez pas tromper par son nom – il contient tous les composants répertoriés ci-dessus – Suivi, Modèle, Projets et Référentiels.) Le serveur de suivi utilise PostgreSQL pour stocker les entités. Les entités sont des exécutions, des paramètres, des métriques, des balises, des notes et des métadonnées. (Plus d'informations sur les exécutions plus tard.) Le serveur de suivi de notre implémentation accède à MinIO pour stocker les artefacts. Des exemples d'artefacts sont des modèles, des ensembles de données et des fichiers de configuration.


Ce qui est bien avec les outils modernes dont disposent les ingénieurs de nos jours, c'est que vous pouvez émuler un environnement de production - y compris le choix des outils et la connectivité réseau - à l'aide de conteneurs. C'est ce que je vais montrer dans cet article. Je vais montrer comment utiliser Docker Compose pour installer les serveurs décrits ci-dessus en tant que services exécutés dans un conteneur. De plus, la configuration de MLflow est configurée de telle sorte que vous pouvez utiliser une instance existante de MinIO si vous le souhaitez. Dans cet article, je vais montrer comment déployer une toute nouvelle instance de MinIO, mais les fichiers de notre référentiel Github ont un fichier « docker-compose » qui montre comment se connecter à une instance existante de MinIO.

Ce que nous installerons

Vous trouverez ci-dessous une liste de tout ce qui doit être installé. Cette liste comprend les serveurs qui deviendront des services dans des conteneurs (MinIO, Postgres et MLFlow), ainsi que les SDK dont vous aurez besoin (MinIO et MLflow).


  1. Bureau Docker

  2. Serveur de suivi MLFlow via Docker Compose

  3. Serveur MinIO via Docker Compose

  4. PostgresSQL via Docker Compose

  5. SDK MLFlow via l'installation de pip

  6. SDK MinIO via l'installation de pip


Commençons par Docker Desktop, qui servira d'hôte à nos services Docker Compose.

Bureau Docker

Vous pouvez trouver l' installation appropriée pour votre système d'exploitation sur le site de Docker. Si vous installez Docker Desktop sur un Mac, vous devez connaître la puce utilisée par votre Mac : Apple ou Intel. Vous pouvez le déterminer en cliquant sur l'icône Apple dans le coin supérieur gauche de votre Mac et en cliquant sur l'option de menu « À propos de ce Mac ».


Nous sommes maintenant prêts à installer nos services.

Serveur MLFlow, Postgres et MinIO

Le serveur de suivi MLFLow, PostgresSQL et MinIO seront installés en tant que services à l'aide du fichier Docker Compose présenté ci-dessous.


 version: "3.3" services: db: restart: always image: postgres container_name: mlflow_db expose: - "${PG_PORT}" networks: - backend environment: - POSTGRES_USER=${PG_USER} - POSTGRES_PASSWORD=${PG_PASSWORD} - POSTGRES_DATABASE=${PG_DATABASE} volumes: - ./db_data:/var/lib/postgresql/data/ healthcheck: test: ["CMD", "pg_isready", "-p", "${PG_PORT}", "-U", "${PG_USER}"] interval: 5s timeout: 5s retries: 3 s3: restart: always image: minio/minio container_name: mlflow_minio volumes: - ./minio_data:/data ports: - "${MINIO_PORT}:9000" - "${MINIO_CONSOLE_PORT}:9001" networks: - frontend - backend environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - MINIO_ADDRESS=${MINIO_ADDRESS} - MINIO_PORT=${MINIO_PORT} - MINIO_STORAGE_USE_HTTPS=${MINIO_STORAGE_USE_HTTPS} - MINIO_CONSOLE_ADDRESS=${MINIO_CONSOLE_ADDRESS} command: server /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 tracking_server: restart: always build: ./mlflow image: mlflow_server container_name: mlflow_server depends_on: - db ports: - "${MLFLOW_PORT}:5000" networks: - frontend - backend environment: - AWS_ACCESS_KEY_ID=${MINIO_ACCESS_KEY} - AWS_SECRET_ACCESS_KEY=${MINIO_SECRET_ACCESS_KEY} - MLFLOW_S3_ENDPOINT_URL=http://s3:${MINIO_PORT} - MLFLOW_S3_IGNORE_TLS=true command: > mlflow server --backend-store-uri postgresql://${PG_USER}:${PG_PASSWORD}@db:${PG_PORT}/${PG_DATABASE} --host 0.0.0.0 --serve-artifacts --artifacts-destination s3://${MLFLOW_BUCKET_NAME} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:${MLFLOW_PORT}/"] interval: 30s timeout: 10s retries: 3 volumes: db_data: minio_data: networks: frontend: driver: bridge backend: driver: bridge


Il y a quelques points à noter qui vous aideront à résoudre les problèmes en cas de problème. Premièrement, MinIO et PostgreSQL utilisent tous deux le système de fichiers local pour stocker les données. Pour PostgreSQL, il s'agit du dossier `db_data` et pour MinIO, il s'agit du dossier `minio_data`. Si jamais vous souhaitez recommencer avec une nouvelle installation, supprimez ces dossiers.


Ensuite, ce fichier Docker Compose est basé sur la configuration. Par exemple, au lieu de coder en dur le nom de la base de données PostgreSQL en « mlflow », le nom provient du fichier « config.env » présenté ci-dessous en utilisant la syntaxe suivante dans le fichier Docker Compose : « ${PG_DATABASE} ».


 # Postgres configuration PG_USER=mlflow PG_PASSWORD=mlflow PG_DATABASE=mlflow PG_PORT=5432 # MLflow configuration MLFLOW_PORT=5000 MLFLOW_BUCKET_NAME=mlflow # MinIO access keys - these are needed by MLflow MINIO_ACCESS_KEY=XeAMQQjZY2pTcXWfxh4H MINIO_SECRET_ACCESS_KEY=wyJ30G38aC2UcyaFjVj2dmXs1bITYkJBcx0FtljZ # MinIO configuration MINIO_ROOT_USER: 'minio_user' MINIO_ROOT_PASSWORD: 'minio_pwd' MINIO_ADDRESS: ':9000' MINIO_STORAGE_USE_HTTPS: False MINIO_CONSOLE_ADDRESS: ':9001' MINIO_PORT=9000 MINIO_CONSOLE_PORT=9001


Toutes les variables d'environnement dont ces services ont besoin sont configurées dans ce fichier. Ce fichier de configuration contient également les informations nécessaires à la communication de ces services. Notez que c'est l'utilisation de variables d'environnement qui indique au serveur MLFlow Tracking comment accéder à MinIO. En d'autres termes, l'URL (y compris le numéro de port), la clé d'accès, la clé d'accès secrète et le bucket. Cela m'amène à mon dernier et plus important point sur l'utilisation de Docker Compose : la première fois que vous ouvrez ces services, les services de suivi MLflow ne fonctionneront pas car vous devrez d'abord accéder à l'interface utilisateur MinIO, obtenir vos clés et créer le compartiment. que le service de suivi utilisera pour stocker les artefacts.


Faisons-le maintenant. Démarrez les services pour la première fois à l'aide de la commande ci-dessous.


 docker-compose --env-file config.env up -d --build


Assurez-vous d'exécuter cette commande dans le même répertoire où se trouve votre fichier Docker Compose.


Nous pouvons maintenant obtenir nos clés et créer notre bucket à l'aide de l'interface utilisateur MinIO.

La console MinIO

Depuis votre navigateur, accédez à « localhost:9001 ». Si vous avez spécifié un port différent pour l'adresse de la console MinIO dans le fichier `docker-compose`, utilisez ce port à la place. Connectez-vous en utilisant l'utilisateur root et le mot de passe spécifiés dans le fichier `config.env`.


Une fois connecté, accédez à l’onglet Clés d’accès et cliquez sur le bouton Créer une clé d’accès.


Onglet Clés d'accès


Cela vous mènera à la page Créer une clé d'accès.


Page Créer une clé d'accès



Votre clé d'accès et votre clé secrète ne sont enregistrées que lorsque vous cliquez sur le bouton Créer. Ne quittez pas cette page tant que cela n’est pas fait. Ne vous inquiétez pas de copier les clés de cet écran. Une fois que vous aurez cliqué sur le bouton Créer, vous aurez la possibilité de télécharger les clés sur votre système de fichiers (dans un fichier JSON). Si vous souhaitez utiliser le SDK MinIO pour gérer les données brutes, créez une autre clé d'accès et une autre clé secrète pendant que vous êtes sur cette page.


Création d'une clé d'accès


Ensuite, créez un bucket nommé « mlflow ». C'est simple, allez dans l'onglet Buckets et cliquez sur le bouton « Créer un bucket ».


Une fois que vous avez vos clés et que vous avez créé votre bucket, vous pouvez terminer la configuration des services en arrêtant les conteneurs, en mettant à jour le « config.env », puis en redémarrant les conteneurs. La commande ci-dessous arrêtera et supprimera vos conteneurs.


 docker-compose down


Recommencer:

 docker-compose --env-file config.env up -d --build


Commençons ensuite l'interface utilisateur MLflow et assurons-nous que tout fonctionne.

Démarrage de l'interface utilisateur MLflow

Accédez à « localhost :5000 ». Vous devriez voir l'interface utilisateur de MLflow.


Démarrage de l'interface utilisateur MLflow


Prenez le temps d'explorer tous les onglets. Si vous êtes nouveau sur MLflow, familiarisez-vous avec le concept d'exécutions et d'expériences.


  • Une exécution est un passage dans votre code qui aboutit généralement à un modèle entraîné.
  • Les expériences sont un moyen de baliser les exécutions associées afin que vous puissiez les voir regroupées dans l'interface utilisateur de MLflow. Par exemple, vous avez peut-être entraîné plusieurs modèles en utilisant différents paramètres pour tenter d'obtenir la meilleure précision (ou performance). Le fait de marquer ces exécutions avec le même nom d'expérience les regroupera dans l'onglet Expériences.

Installez le package Python MLflow.

Le package MLflow Python est une simple installation « pip ». Je recommande de l'installer dans un environnement virtuel Python.


 pip install mlflow


Vérifiez à nouveau l'installation en répertoriant la bibliothèque MLflow.


 pip list | grep mlflow


Vous devriez voir la bibliothèque ci-dessous.


 mlflow 2.5.0

Installez le package Python MinIO

Vous n'avez pas besoin d'accéder directement à MinIO pour profiter des fonctionnalités de MLflow : le SDK MLflow s'interfacera avec l'instance de MinIO que nous avons configurée ci-dessus. Cependant, vous souhaiterez peut-être vous connecter directement à cette instance de MinIO pour gérer les données avant qu'elles ne soient transmises à MLflow. MinIO est un excellent moyen de stocker toutes sortes de données non structurées. MinIO utilise pleinement le matériel sous-jacent, vous pouvez donc enregistrer toutes les données brutes dont vous avez besoin sans vous soucier de l'évolutivité ou des performances . MinIO inclut des fonctionnalités de réplication de compartiment pour garder les données synchronisées dans plusieurs emplacements. De plus, un jour l’IA sera réglementée ; ce jour-là, vous aurez besoin des fonctionnalités d'entreprise de MinIO ( verrouillage d'objets , gestion des versions , cryptage et verrouillages légaux ) pour sécuriser vos données au repos et pour vous assurer de ne pas supprimer accidentellement quelque chose qu'une agence de réglementation pourrait demander.


Si vous avez installé le package MLflow Python dans un environnement virtuel, installez MinIO dans le même environnement.


 pip install minio


Vérifiez à nouveau l'installation.

 pip list | grep minio


Cela confirmera que la bibliothèque Minio a été installée et affichera la version que vous utilisez.

 minio 7.1.15

Résumé

Cet article fournissait une recette facile à suivre pour configurer MLflow et MinIO sur une machine de développement. L'objectif était de vous faire gagner du temps et des efforts liés à la recherche des serveurs MLflow et de la configuration de Docker-compose.


Tous les efforts ont été faits pour que cette recette reste exacte. Si vous rencontrez un problème, veuillez nous en informer en nous envoyant un message à [email protected] ou en rejoignant la discussion sur notre chaîne Slack générale .


Vous êtes prêt à commencer à coder et à former des modèles avec MLflow et MinIO.


Également publié ici .