[PYTHON] Introduction et astuces de mlflow.

Qu'est-ce que c'est

Le concours kaggle [Google Cloud & NCAA® ML Competition 2020-NCAAW](https://www.kaggle.com/c/google-cloud-ncaa-march-madness-2020-division-] auquel j'ai participé en mars 2020. En raison de l'introduction de la fonction de suivi de mlflow dans 1-womens-tournoi), il était facile à utiliser, je vais donc le publier sous forme de mémorandum. Le contenu de la description décrit principalement comment introduire la fonction de tracking de mlflow et les points sur lesquels je suis tombé par hasard lors de son introduction.

Qu'est-ce que mlflow

mlflow est une plate-forme open source qui gère le cycle de vie du machine learning (pré-traitement-> apprentissage-> déploiement), et a trois fonctions principales. --Suivi: journalisation --Projets: Emballage --Modèles: support de déploiement Cette fois, je vais principalement aborder la manière d'introduire le suivi. Pour plus de détails sur les projets et les modèles, veuillez consulter ici.

Qu'est-ce que le suivi

Le suivi est une fonction qui enregistre chaque paramètre, index d'évaluation et résultat, fichier de sortie, etc. lors de la création d'un modèle d'apprentissage automatique. De plus, si vous mettez un projet dans git, vous pouvez gérer la version du code, mais je pensais que l'histoire s'étendrait aux projets lorsqu'il s'agira de l'introduire, donc je l'omettrai cette fois (la prochaine fois, je parlerai de projets) Je veux gérer ça quand je le fais).

Introduction de mlfrow

installation de mlflow

mlflow peut être installé avec pip.

pip install mlflow

Paramètre URI

Définissez l'URI pour la journalisation (par défaut, il est créé directement sous le dossier lors de l'exécution). Non seulement le répertoire local, mais également la base de données et le serveur HTTP peuvent être spécifiés pour l'URI. Le nom du répertoire de destination de la journalisation doit être mlruns (la raison sera expliquée plus tard).

import mlflow

mlflow.set_tracking_uri('./hoge/mlruns/')

Créer une expérience

L'expérience est créée arbitrairement par l'analyste pour chaque tâche du projet d'apprentissage automatique (par exemple, quantité de fonctionnalités, méthode d'apprentissage automatique, comparaison de paramètres, etc.).

#Si l'expérience n'existe pas, elle sera créée.
mlflow.set_experiment('compare_max_depth')

Courir

Enregistrons réellement.

with mlflow.start_run():
    mlflow.log_param('param1', 1) #Paramètres
    mlflow.log_metric('metric1', 0.1) #But
    mlflow.log_artifact('./model.pickle') #Autres modèles, données, etc.
mlflow.search_runs() #Vous pouvez obtenir le contenu de la journalisation dans l'expérience

Il enregistre les paramètres, les scores, les modèles, etc. Veuillez vous référer au Document officiel pour les spécifications détaillées de chaque fonction.

Démarrer le serveur local

Accédez au répertoire défini par URI. À ce stade, assurez-vous que le répertoire mlruns est sous le contrôle (si le répertoire mlruns n'existe pas, le répertoire mlruns sera créé). Démarrez le serveur local avec mlflow ui.

$ cd ./hoge/
$ ls
mlruns

$ mlflow ui

Lorsque vous ouvrez http: //127.0.0.1: 5000 sur le navigateur, l'écran suivant s'affiche. スクリーンショット 2020-03-15 14.36.33.png

Il est également possible de comparer chaque paramètre. スクリーンショット 2020-03-15 14.37.56.png

Tips

Obtenir l'identifiant de l'expérience

tracking = mlflow.tracking.MlflowClient()
experiment = tracking.get_experiment_by_name('hoge')
print(experiment.experiment_id)

Obtenez le nom de l'expérience

#Méthode 1:Obtenir la liste des expériences
tracking.list_experiments()

#Méthode 2: 
tracking = mlflow.tracking.MlflowClient()
experimet = tracking.get_experiment('1') #passer l'identifiant de l'expérience
print(experimet.name)

Supprimer l'expérience

tracking = mlflow.tracking.MlflowClient()
tracking.delete_experiment('1')

Obtenir l'ID d'exécution

with mlflow.start_run():
    run_id = mlflow.active_run().info.run_id

Si vous passez le run_id acquis au paramètre de start_run (), le journal de la cible run_id sera écrasé.

Supprimer la course

tracking = mlflow.tracking.MlflowClient()
tracking.delete_run(run_id)

Journalisation avec dict

#Si vous souhaitez enregistrer plusieurs paramètres en même temps, transmettez-le avec dict.
params = {
    'test1': 1,
    'test2': 2
         }
metrics = {
    'metric1': 0.1,
    'metric2': 0.2
         }

with mlflow.start_run():
    mlflow.log_params(params)
    mlflow.log_metrics(metrics)

download artifacts

tracking = mlflow.tracking.MlflowClient()
print(tracking.list_artifacts(run_id=run_id)) #Obtenez une liste d'artefacts
[<FileInfo: file_size=23, is_dir=False, path='model.pickle'>]

tracking.download_artifacts(run_id=run_id, path='model.pickle', dst_path='./')

Recommended Posts

Introduction et astuces de mlflow.
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Introduction et mise en œuvre de la fonction d'activation
Introduction de scikit-Optimize
Introduction facile de la série python3 et d'OpenCV3
Introduction de Python
Astuces Python et Numpy
Introduction de ferenOS 1 (installation)
Introduction du wrapper Virtualenv
Remarques et conseils sur l'assemblage vertical de PySpark DataFrame
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
Mécanisme de pyenv et virtualenv
Pré-traitement et post-traitement de pytest
[Introduction à cx_Oracle] (Partie 4) Récupération et défilement du jeu de résultats
Combinaison de récursif et de générateur
Combinaison de anyenv et direnv
Explication et mise en œuvre de SocialFoceModel
Introduction d'activités appliquant Python
Différenciation du tri et généralisation du tri
Coexistence de pyenv et autojump
[Introduction à Scipy] Calcul de la courbe de Lorenz et du coefficient de Gini ♬
Utilisation et intégration de "Shodan"
Le problème des menteurs et de l'honnêteté
Introduction de DataLiner ver.1.3 et comment utiliser Union Append
Occurrence et résolution de tensorflow.python.framework.errors_impl.FailedPreconditionError
Installation source et installation de Python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
[Introduction à Udemy Python3 + Application] 69. Importation du chemin absolu et du chemin relatif
[Introduction à l'application Udemy Python3 +] 12. Indexation et découpage des chaînes de caractères
[Introduction à cx_Oracle] (Partie 2) Principes de base de la connexion et de la déconnexion à Oracle Database
Présentation de M5StickC (Mesure de température / humidité et transmission MQTT, UIFlow Python)
[Introduction to Data Scientists] Bases de Python ♬ Branchements conditionnels et boucles
[Introduction aux Data Scientists] Bases de Python ♬ Fonctions et fonctions anonymes, etc.
Construction d'environnement de python et opencv
Connaissance de base de Linux et des commandes de base
Ordre des arguments pour RegularGridInterpolator et interp2d
L'histoire de Python et l'histoire de NaN
Explication et implémentation de l'algorithme ESIM
Risque de mélange! ndarray et matrice
Installer SciPy et matplotlib (Python)
[Introduction à Python3 Jour 1] Programmation et Python
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Mémorandum de sauvegarde et modèle de chargement
Introduction d'une méthode de conception de contrôleur pilotée par les données
Explication et mise en œuvre du perceptron simple
Calcul de la classe auto-fabriquée et de la classe existante
Introduction à Hadoop et MapReduce avec Python
Jupyter Notebook: 4 trucs et astuces banals
Ceci et cela des propriétés python
Introduction de ferenOS 3 (mise à jour et installation du package)
Introduction du package de dessin python pygal
Introduction à la détection des anomalies et résumé des méthodes
Caractéristiques du lien symbolique et dur
Coexistence de Python2 et 3 avec CircleCI (1.0)