LESSON 30分

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等(分類)モデル、混同行列
XGBoostbooster設定学習曲線モデル、特徴量重要度
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分