【基本,mlflow】機械学習の実験管理ツールmlflowの基本的な使い方(Tracking API)

今回は機械学習の実験管理用ツールのmlflowのTracking APIの基本操作を紹介します。

mlflow とは

mlflow は機械学習の実験等を管理するためのツールの一つです。

実験結果やパラメータなど簡単に管理できてとても便利です。
様々な API がありますが、今回は実験結果の管理が行える Tracking API を使ってみます。

mlflow を触ってみる

mlflow の導入

まずは mlflow をインストールします。

pip install mlflow

mlflow の準備

python コードで import します。

import mlflow

mlflowの結果を保存するディレクトリを指定します。
(どこでも良いなら指定しなくても大丈夫です。現在のディレクトリにmlrunsというディレクトリが自動で作られます)

# ※自分で保存したいディレクトリを指定したい場合。今回はtest_mlflow_dirに保存していく
mlflow.set_tracking_uri("test_mlflow_dir")

実験の名前などを指定してmlflow.start_runで実験をスタートします。

exp_name = "test"
mlflow.set_experiment(exp_name)
tracking = mlflow.tracking.MlflowClient()
experiment = tracking.get_experiment_by_name(exp_name)
with mlflow.start_run(experiment_id=experiment.experiment_id):
      # 以下に処理を記述していく

あとは with ブロック内に実験のコードを書いていきます。

もしくは、以下でも大丈夫です。

mlflow.start_run(experiment_id=experiment.experiment_id)
<処理>
mlflow.end_run()

パラメータの保存

パラメータを一つ保存したい場合には mlflow.log_param をつかいます。

mlflow.log_param("param1", param1)

まとめて保存したいときは mlflow.log_params を使います。

mlflow.log_params({"param1":param1, "param2":param2}

argparse をまとめて保存したい時には以下のようにすることで保存できます。

parser = argparse.ArgumentParser("Test")
parser.add_argument("--test", type=str, default="test_param")
args = parser.parse_args()

mlflow.log_params(vars(args))

メトリックの保存

実験のメトリックを一つ保存したい時には mlflow.log_metric を使います。

mlflow.log_metric("metric1", metric1)

実験のメトリックを複数保存したい時には mlflow.log_metrics を使います。

mlflow.log_metrics({"metric1": metric1, "metric2": metric2})

図などのスカラー以外を保存する時

png などを保存する場合には保存した Path を与えて mlflow.log_artifact を使って保存します。

mlflow.log_artifact("test.png")
mlflow.log_artifact("test.csv")

UI で実験結果を見る

シェルから以下のコマンドを実行します。
今回は local の test_mlflow_dir に保存しているので、以下のように引数を与えてあげます。

mlflow ui --backend-store-uri file:test_mlflow_dir

出力されたurlにアクセスすると以下のようなUIが出てきます。
このUIからmetricの推移やパラメータなどを確認できます。実験の比較もかんたんにできます。

実験結果を python で取得してみる

※ここはまだ調査中

実験結果は mlflow.search_runs を使って取得できます。
experiment_ids に実験の id を指定します。(ID は UI 上でも確認できます)

mlflow.set_tracking_uri()

result = mlflow.search_runs(experiment_ids="0")

おわりに

実際にはもっとたくさんできることがあります。
詳細は公式の document 等を参照してください。

コメント

タイトルとURLをコピーしました