ある日、過去の実験結果を見返そうとして、手が止まりました。
- 「このスコア、どの実験の結果だっけ?」
- 「AUCが一番高かったのって、どの条件だった?」
- 「似たような実験が多すぎて、違いが分からない」
ノートブックは大量にあり、メモも一応残っている。
でも 実験結果を横並びで比較できない。
「設定は覚えていなくてもいいから、せめて結果だけでも一覧で見たい」
そう思って使い始めたのが MLflow でした。
この記事では、
- 実験結果を手作業で管理することの限界
- MLflowを使うと何が楽になるのか
- 最低限押さえておきたい使い方
を、実体験ベースでまとめます。
なぜ「実験結果の管理」が難しくなるのか
実験管理というと、
- 設定ファイルをどう管理するか
- パラメータをどう再現するか
に目が向きがちですが、実際に困るのは 結果の整理 です。
例えば、
- accuracy / AUC / loss をメモしているだけ
- CSVやスプレッドシートに転記している
- ノートブックを開いてセルを探し直す
このやり方だと、
- 実験数が増えるほど追えなくなる
- 条件差分を見落とす
- 「結局どれが良かったの?」が分からない
という状態になりがちです。
MLflowは、この「結果の整理・比較」を仕組みで解決するツールです。
MLflowとは何をしてくれるツールか
MLflowは、機械学習の実験結果を管理・可視化するためのツールです。
主に次のことができます。
- 実験結果(accuracy, loss など)を自動で記録
- 実験ごとのパラメータを保存
- 結果を一覧表示・横並び比較
- Web UI で直感的に確認
一言で言うと、「実験結果をあとから比較できる形で残す仕組み」です。
MLflowのインストール
pip install mlflow
MLflowの基本概念
MLflowでは、実験を次の2階層で管理します。
- Experiment:実験のまとまり(例:LightGBMの検証)
- Run:その中の1回の実行
1回モデルを学習・評価するごとに、
1つの Run が作られるイメージです。
最小構成の使い方
import mlflow
# 実験名を指定
mlflow.set_experiment("baseline_experiment")
with mlflow.start_run():
# パラメータを記録
mlflow.log_param("model", "LightGBM")
mlflow.log_param("num_leaves", 40)
# 評価指標を記録
mlflow.log_metric("auc", 0.82)
mlflow.log_metric("accuracy", 0.75)
これだけで、
- どんな条件で
- どんな数値が出たか
が MLflow に記録されます。
MLflow UIで結果を確認する
ターミナルで以下を実行します。
mlflow ui
ブラウザで
http://localhost:5000
にアクセスすると、実験結果が一覧表示されます。
MLflowを使ってよかった点
① 実験結果を一覧で見られる
ノートブックを開き直さなくても、
- 実験名
- パラメータ
- accuracy / AUC / loss
が一覧で確認できます。
② 横並びで比較できる
複数の Run を選択して Compare を押すと、
- どのパラメータを変えたのか
- それで結果がどう変わったのか
を一目で確認できます。
「この改善、効いてたっけ?」がすぐ分かるようになりました。
③ グラフで推移を確認できる
log_metric を使っていれば、
- 学習の進行
- スコアの変化
も自動でグラフ化されます。
細かい可視化コードを書かなくていいのは、
地味ですがかなり助かります。
設定管理は別のツールに任せるのがおすすめ
MLflowは 結果の管理・比較 に強い一方で、
- 設定ファイルの構造化
- 実行ごとのディレクトリ管理
は得意ではありません。
そのため、
- 設定管理 → 別ツール
- 結果の可視化・比較 → MLflow
と役割を分けるのがおすすめです。
設定管理については、
別の記事で Hydra を使った方法を紹介しています。
おわりに
MLflowを使い始めてから、
- 「どの実験が一番良かったか」
- 「何を変えたら改善したのか」
を感覚ではなく、画面を見て判断できるようになりました。
実験管理というと難しそうに聞こえますが、
まずは 結果を記録して並べるだけでも、作業効率は大きく変わります。
同じように、
- 実験結果が散らかってきた
- 比較がつらくなってきた
と感じている方の参考になれば嬉しいです。