Re:ゼロから始めるML生活

どちらかといえばエミリア派です

mlflowを使ってみた

f:id:nogawanogawa:20200329110122p:plain:w500

最近こちらの記事を拝見しました。

ymym3412.hatenablog.com

読んでて、mlflowってなんじゃい??ってなったので、今回はmlflowの使い方を勉強してみたのでそのメモです。

mlflow

MLflow is an open source platform for managing the end-to-end machine learning lifecycle. MLflow Documentation — MLflow 1.7.2 documentation

mlflow.org

簡単に言えば、mlflowは機械学習の管理を行うライブラリです。

機能としては大きく3つあって、

  • MLflow Tracking
    • 実験の管理
  • MLflow Projects
    • モデルを再利用できるようにパッケージング
  • MLflow Models
    • モデルのデプロイ

となってます。

詳しくはこちらの記事がわかりやすかったです。 パッケージ化やデプロイ機能については下記の記事などをご参照ください。

qiita.com

インストール

インストールは簡単で、

$ pip install mlflow

だけです。 基本的な使い方はtutorialに記載がありますので、そちらも合わせて御覧ください

mlflow.org

MLflow Tracking

今回はPythonスクリプトのトラッキングを試してみます。 上のquickstartをそのままなぞってみます。

サンプルコードはこんな感じになっています。

import os
from mlflow import log_metric, log_param, log_artifact

if __name__ == "__main__":
    # Log a parameter (key-value pair)
    log_param("param1", 5)

    # Log a metric; metrics can be updated throughout the run
    log_metric("foo", 1)
    log_metric("foo", 2)
    log_metric("foo", 3)

    # Log an artifact (output file)
    with open("output.txt", "w") as f:
        f.write("Hello world!")
    log_artifact("output.txt")

$ python tutorial.py

するとmlrunsというディレクトリができるかと思います。 

これができていることを確認したら、GUIを起動してみます。

$ mlflow ui

これで http://127.0.0.1:5000にアクセスすればトラッキングの結果が見れるようになっています。

適当に自分で書いてみる

実際に使用しそうな場面を想定してやってみます。 参考にしたコードはこちら。なんの変哲もないLightGBMのサンプルコードです。

github.com

こちらを使用するにあたり、kaggleのdocker imageを使用しました。

これらをつかって、簡単に使い方を確認していきます。

パラメータ

mlflowで管理したい実行時パラメータについては、下記のように記述することで管理されるようになります。

num_boost_round=5
early_stopping_rounds=5

mlflow.log_param("num_boost_round",num_boost_round)
mlflow.log_param("early_stopping_rounds",early_stopping_rounds)

メトリクス

最終的な評価値など、メトリクスについて管理したいものについて、下記のように記述することでmlflowでトラッキングできるようになっています。

rmse = mean_squared_error(y_test, y_pred) ** 0.5

mlflow.log_metric("rmse", rmse)

その他、モデル自体のバージョン管理や、生成物などもmlflowで管理出来るようです。 詳しくは以下の記事がわかりやすかったです。

qiita.com

確認する

実行が完了したら、 http://127.0.0.1:5000にアクセスすればパラメータとメトリクスの一覧を確認することが出来ます。

f:id:nogawanogawa:20200329190537p:plain:w500

複数の実行の比較を行うことも可能になっています。 実際にどんなパラメータを使用して、結果がどうなっていたか、下記のように管理出来ます。

f:id:nogawanogawa:20200329190556p:plain:w500

こんな感じに、気になったバージョン間で比較ができるので、実験の結果を分析するのには非常に有効かと思います。

感想

思ったより簡単に使えたので良かったです。

kaggleなど、大量に実験を行うような場面では、実験管理だけでも一苦労かと思います。 多分強いkagglerはもっと賢いやり方を使ってると思うので、そのへんも少しずつ調査していきたいなーとか思いました。