MLflowとの連携
MLflowはMLライフサイクル管理プラットフォームです。MLOps Desktopと組み合わせることで、実験管理機能を強化できます。
併用のメリット
Section titled “併用のメリット”| MLOps Desktop | MLflow |
|---|---|
| ビジュアルUI | チーム全体の実験管理 |
| ローカル完結 | サーバーで共有 |
| 迅速な試行 | 本番モデル管理 |
| 個人作業 | チーム協業 |
セットアップ
Section titled “セットアップ”MLflowのインストール
Section titled “MLflowのインストール”pip install mlflowサーバーの起動(任意)
Section titled “サーバーの起動(任意)”UIと永続化が必要な場合:
mlflow ui --backend-store-uri sqlite:///mlflow.dbhttp://localhost:5000 でアクセスできます。
連携パターン
Section titled “連携パターン”パターン1: Scriptノードからログ
Section titled “パターン1: Scriptノードからログ”パイプライン内からMLflowに記録:
import mlflow
# サーバーを使用する場合mlflow.set_tracking_uri("http://localhost:5000")
# 実行を記録with mlflow.start_run(run_name="random-forest-v1"): # パラメータ mlflow.log_params({ "model_type": "RandomForestClassifier", "n_estimators": 100, "max_depth": 10, "test_size": 0.2 })
# メトリクス(Evaluatorの結果を使用) mlflow.log_metrics({ "accuracy": 0.967, "f1_score": 0.965, "precision": 0.968, "recall": 0.967 })
# モデルを保存 mlflow.sklearn.log_model(model, "model")パターン2: エクスポート後にログ
Section titled “パターン2: エクスポート後にログ”MLOps Desktopでエクスポートした後に記録:
import mlflowimport joblibimport json
# エクスポートしたファイルを読み込みmodel = joblib.load("model.joblib")with open("model_meta.json") as f: meta = json.load(f)
# MLflowに記録with mlflow.start_run(run_name=meta.get("model_type", "model")): mlflow.log_params(meta.get("hyperparameters", {})) mlflow.log_metrics(meta.get("metrics", {})) mlflow.sklearn.log_model(model, "model") mlflow.log_artifact("model_meta.json")パターン3: 一括ログ
Section titled “パターン3: 一括ログ”ディレクトリ内のモデルを一括で記録:
import mlflowimport joblibimport jsonfrom pathlib import Path
def log_experiment(model_path: str, meta_path: str): model = joblib.load(model_path) with open(meta_path) as f: meta = json.load(f)
with mlflow.start_run(run_name=Path(model_path).stem): mlflow.set_tag("training_date", meta.get("training_date", "unknown")) mlflow.log_params(meta.get("hyperparameters", {})) mlflow.log_metrics(meta.get("metrics", {})) mlflow.sklearn.log_model( model, "model", registered_model_name=meta.get("model_type", "MLOpsModel") ) mlflow.log_artifact(meta_path) print(f"Logged {model_path}")
# 一括実行models_dir = Path("./exported_models")for model_path in models_dir.glob("*.joblib"): meta_path = model_path.with_name(f"{model_path.stem}_meta.json") if meta_path.exists(): log_experiment(str(model_path), str(meta_path))ワークフロー例
Section titled “ワークフロー例”個人での使用
Section titled “個人での使用”-
MLOps Desktopで試行錯誤
- 迅速にプロトタイプを作成
- Optunaでチューニング
- 良好なモデルをエクスポート
-
ローカルMLflowに記録
- 実験を時系列で追跡
- 結果を比較
- モデルを保存
-
デプロイ
- MLflowのツールを使用
- またはエクスポートしたモデルを直接使用
チームでの使用
Section titled “チームでの使用”-
各メンバーがMLOps Desktopで実験
- 個人での試行錯誤
- 迅速なプロトタイプ作成
-
良好な結果を共有MLflowサーバーに記録
- チーム全体で可視化
- 結果を比較
-
MLflowのモデルレジストリで管理
- Staging → Production
- モデルの系譜を追跡
- デプロイを調整
MLflowの主要機能
Section titled “MLflowの主要機能”実験トラッキング
Section titled “実験トラッキング”http://localhost:5000 でUIにアクセスし、実行を比較できます。
モデルレジストリ
Section titled “モデルレジストリ”# 登録mlflow.register_model("runs:/run_id/model", "ChurnPredictor")
# ステージ変更from mlflow.tracking import MlflowClientclient = MlflowClient()client.transition_model_version_stage( name="ChurnPredictor", version=1, stage="Production")モデルサービング
Section titled “モデルサービング”mlflow models serve -m "models:/ChurnPredictor/Production" -p 5001curl -X POST http://localhost:5001/invocations \ -H "Content-Type: application/json" \ -d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'ベストプラクティス
Section titled “ベストプラクティス”命名規則の統一
Section titled “命名規則の統一”パイプライン名: churn-random-forest-v2MLflow Run名: churn-random-forest-v2モデル名: ChurnPredictorアーティファクトの保存
Section titled “アーティファクトの保存”mlflow.log_artifact("feature_importance.png")mlflow.log_artifact("confusion_matrix.png")mlflow.log_artifact("shap_summary.png")タグによる整理
Section titled “タグによる整理”mlflow.set_tags({ "source": "mlops_desktop", "dataset": "customer_churn_2024", "team": "data_science", "purpose": "production"})runs = client.search_runs( experiment_ids=["1"], filter_string="tags.source = 'mlops_desktop' AND metrics.accuracy > 0.95")for run in runs: print(f"{run.info.run_name}: {run.data.metrics['accuracy']}")MLflowで補う機能
Section titled “MLflowで補う機能”- チーム間のコラボレーション
- 集中管理サーバー
- 承認ワークフロー
- A/Bテスト基盤
MLOps Desktopで補う機能
Section titled “MLOps Desktopで補う機能”- ドラッグ&ドロップでのパイプライン構築
- コードなしでのモデル設定
- ローカル完結、オフライン対応
- 作成・試行 → MLOps Desktop(ビジュアル、高速、ローカル)
- 管理・デプロイ → MLflow(チーム向け、本番対応)
迅速に試行した後、適切に管理する。両方を併用することで、それぞれの強みを活かせます。
次のステップ: