MLflow基礎
田中VPoE「実験トラッキングの重要性はわかったな。ここからはMLflowを使って実際に手を動かしてみよう。MLflowはOSSで、導入のハードルが低い。」
あなた「MLflowにはいくつかの機能があると聞きましたが、まずは何から覚えればいいですか?」
田中VPoE「まずはMLflow Trackingだ。パラメータ、メトリクス、アーティファクトを記録する基本機能。これが全ての土台になる。」
MLflowの全体像
MLflowは4つのコンポーネントから構成されています。
| コンポーネント | 機能 | 本レッスンの対象 |
|---|---|---|
| MLflow Tracking | 実験の記録・比較 | 対象 |
| MLflow Models | モデルのパッケージング | 一部対象 |
| MLflow Model Registry | モデルのライフサイクル管理 | 次レッスン |
| MLflow Projects | 再現可能な実行環境 | 参考 |
MLflow Trackingの基本
セットアップ
# インストール
# pip install mlflow
import mlflow
# ローカルモードで使用(ファイルベース)
# デフォルトでは ./mlruns ディレクトリに保存される
# サーバーモードで使用(チーム共有)
# mlflow.set_tracking_uri("http://mlflow-server:5000")
基本的な使い方
import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, f1_score
from sklearn.model_selection import train_test_split
# 実験名を設定
mlflow.set_experiment("churn_prediction")
# Runの開始
with mlflow.start_run(run_name="random_forest_v1"):
# 1. パラメータの記録
params = {
"n_estimators": 100,
"max_depth": 10,
"random_state": 42,
}
mlflow.log_params(params)
# 2. モデルの学習
model = RandomForestClassifier(**params)
model.fit(X_train, y_train)
# 3. メトリクスの記録
y_pred = model.predict(X_test)
mlflow.log_metric("accuracy", accuracy_score(y_test, y_pred))
mlflow.log_metric("f1_score", f1_score(y_test, y_pred))
# 4. モデルアーティファクトの保存
mlflow.sklearn.log_model(model, "model")
# 5. タグの設定
mlflow.set_tag("model_type", "RandomForest")
mlflow.set_tag("developer", "tanaka")
時系列メトリクスの記録
with mlflow.start_run(run_name="xgboost_training_curve"):
mlflow.log_params({"learning_rate": 0.01, "n_estimators": 500})
# エポックごとのメトリクスを記録
for epoch in range(100):
train_loss = train_model_one_epoch(model, train_data)
val_loss = evaluate(model, val_data)
# stepパラメータで時系列を記録
mlflow.log_metric("train_loss", train_loss, step=epoch)
mlflow.log_metric("val_loss", val_loss, step=epoch)
# 最終メトリクス
mlflow.log_metric("best_val_loss", min(val_losses))
自動ログ機能(Autolog)
MLflowはscikit-learn、XGBoost、LightGBM、PyTorchなどの主要ライブラリに対して、自動でパラメータやメトリクスを記録する機能を提供しています。
import mlflow
# scikit-learn の自動ログを有効化
mlflow.sklearn.autolog()
# XGBoostの場合
# mlflow.xgboost.autolog()
# LightGBMの場合
# mlflow.lightgbm.autolog()
# 以降、通常通り学習するだけで自動記録される
with mlflow.start_run():
model = RandomForestClassifier(n_estimators=100, max_depth=10)
model.fit(X_train, y_train)
# → パラメータ、メトリクス、モデルが自動記録される
自動記録される情報
| ライブラリ | パラメータ | メトリクス | アーティファクト |
|---|---|---|---|
| scikit-learn | 全ハイパーパラメータ | accuracy等(分類) | モデル、混同行列 |
| XGBoost | booster設定 | 学習曲線 | モデル、特徴量重要度 |
| PyTorch | なし(手動) | loss、メトリクス | モデル |
図や表のアーティファクト記録
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
with mlflow.start_run():
# ... 学習コード ...
# 混同行列の保存
cm = confusion_matrix(y_test, y_pred)
disp = ConfusionMatrixDisplay(confusion_matrix=cm)
disp.plot()
plt.savefig("confusion_matrix.png")
mlflow.log_artifact("confusion_matrix.png")
# 特徴量重要度の保存
importance_df = pd.DataFrame({
"feature": feature_names,
"importance": model.feature_importances_
}).sort_values("importance", ascending=False)
importance_df.to_csv("feature_importance.csv", index=False)
mlflow.log_artifact("feature_importance.csv")
# ディレクトリごと保存
mlflow.log_artifacts("./plots", artifact_path="figures")
MLflow UIの活用
UIの起動
# ローカルモード
mlflow ui --port 5000
# ブラウザで http://localhost:5000 にアクセス
UIで確認できる情報
| 画面 | 内容 |
|---|---|
| 実験一覧 | 全実験のRun一覧、フィルタ・ソート |
| Run詳細 | パラメータ、メトリクス、アーティファクト |
| 比較ビュー | 複数Runのメトリクス比較、散布図 |
| メトリクスグラフ | 時系列メトリクスの可視化 |
UIでの実験比較
1. 比較したいRunを複数選択
2. 「Compare」ボタンをクリック
3. パラメータとメトリクスの対比表が表示される
4. 散布図でパラメータとメトリクスの関係を可視化
MLflowサーバーモード
チームで共有するには、MLflow Tracking Serverを立てます。
アーキテクチャ
[DSチームのPC] → [MLflow Tracking Server] → [バックエンドDB(PostgreSQL)]
→ [アーティファクトストレージ(S3)]
サーバーの起動
# PostgreSQL + S3バックエンドの場合
mlflow server \
--backend-store-uri postgresql://user:pass@db-host:5432/mlflow \
--default-artifact-root s3://mlflow-artifacts/ \
--host 0.0.0.0 \
--port 5000
クライアント側の設定
import mlflow
# Tracking URIをサーバーに向ける
mlflow.set_tracking_uri("http://mlflow-server:5000")
# 以降は同じコードで、結果がサーバーに記録される
mlflow.set_experiment("churn_prediction")
with mlflow.start_run():
mlflow.log_param("model", "XGBoost")
# ...
MLflow Modelsの基本
モデルのパッケージング
# モデルの保存(MLflow形式)
with mlflow.start_run():
model = train_model()
mlflow.sklearn.log_model(
model,
artifact_path="model",
input_example=X_test[:5], # 入力例を添付
signature=mlflow.models.infer_signature(X_test, y_pred), # 型情報
)
モデルの読み込み
# Run IDから読み込み
model = mlflow.sklearn.load_model("runs:/abc123def456/model")
# モデルレジストリから読み込み(次レッスン)
model = mlflow.sklearn.load_model("models:/churn_model/Production")
MLflow Model形式の構造
model/
├── MLmodel # メタデータ(フレームワーク、入出力形式)
├── model.pkl # シリアライズされたモデル
├── conda.yaml # 依存ライブラリ
├── requirements.txt # pip依存
├── python_env.yaml # Python環境情報
└── input_example.json # 入力サンプル
まとめ
| 項目 | ポイント |
|---|---|
| MLflow構成 | Tracking、Models、Model Registry、Projectsの4コンポーネント |
| 基本操作 | log_params、log_metrics、log_model、log_artifact |
| 自動ログ | autolog()で主要ライブラリの情報を自動記録 |
| サーバーモード | PostgreSQL + S3でチーム共有 |
| Models | モデルを標準フォーマットでパッケージング |
チェックリスト
- MLflowの4つのコンポーネントを説明できる
- パラメータ、メトリクス、アーティファクトの記録コードを書ける
- autolog機能の使い方を理解している
- MLflow UIで実験を比較する方法を説明できる
- サーバーモードの構成を理解している
次のステップへ
MLflowの基本操作を学びました。次は、モデルレジストリを使ったモデルのライフサイクル管理を学びましょう。
推定読了時間:30分