AI

OSS MLプラットフォーム比較:MLflow vs Kubeflow vs DVC で機械学習基盤を構築

オープンソースラボ編集部2026年6月14日

OSS MLプラットフォーム比較:MLflow vs Kubeflow vs DVC で機械学習基盤を構築

AWS SageMaker(ml.m5.xlarge使用で月$400〜)・Weights & Biases(Teamプラン月$50/ユーザー〜)に対して、MLflow(実験追跡・モデルレジストリ)・Kubeflow(Kubernetes上のMLパイプライン)・DVC(データ・モデルのバージョン管理)はOSSの機械学習基盤を代表するツールです。

MLOpsに必要なコンポーネント

ML基盤には以下の機能が必要です:

  • 実験追跡: ハイパーパラメーター・メトリクス・成果物の記録と比較
  • データバージョン管理: トレーニングデータのバージョン・系譜の管理
  • モデルレジストリ: モデルのバージョン・ステージング・本番デプロイの管理
  • パイプライン: 前処理→学習→評価→デプロイの自動化
  • 特徴量ストア: 特徴量の計算・保存・共有・再利用

主要ツールの概要

MLflow

2018年にDatabricksが開発したオープンソースのML実験管理プラットフォームです。GitHubスター20k+。MLflow Tracking(実験ログ)・MLflow Projects(再現可能な実行)・MLflow Models(モデル形式の統一)・MLflow Registry(モデルバージョン管理)の4コンポーネントで構成されます。Python・R・Java・REST APIからアクセスでき、Azure ML・AWS SageMaker・Databricksのバックエンドとしても使えます。

# MLflow Trackingでモデルを実験管理
import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, f1_score
import pandas as pd

# MLflowサーバーの接続先を設定(セルフホストの場合)
mlflow.set_tracking_uri("http://localhost:5000")

# 実験を設定(なければ作成)
mlflow.set_experiment("fraud-detection-v2")

# 実験を記録
with mlflow.start_run(run_name="random-forest-baseline"):
    # ハイパーパラメーターを記録
    params = {
        "n_estimators": 100,
        "max_depth": 10,
        "min_samples_split": 5,
        "random_state": 42,
    }
    mlflow.log_params(params)

    # モデルの学習
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    model = RandomForestClassifier(**params)
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)

    # メトリクスを記録
    metrics = {
        "accuracy": accuracy_score(y_test, y_pred),
        "f1_score": f1_score(y_test, y_pred, average="weighted"),
    }
    mlflow.log_metrics(metrics)

    # モデルを保存(Scikit-learn自動ロギング)
    mlflow.sklearn.log_model(
        model,
        artifact_path="random-forest-model",
        registered_model_name="fraud-detection",  # モデルレジストリに登録
    )

    # カスタムアーティファクトを記録(特徴量重要度グラフ等)
    import matplotlib.pyplot as plt
    feat_imp = pd.Series(model.feature_importances_, index=X.columns).sort_values()
    feat_imp.plot(kind="barh")
    plt.savefig("feature_importance.png")
    mlflow.log_artifact("feature_importance.png")

    print(f"Accuracy: {metrics['accuracy']:.4f}")
# MLflowサーバーをDockerで起動(PostgreSQL + S3バックエンド)
docker run -d \
  --name mlflow-server \
  --restart unless-stopped \
  -p 5000:5000 \
  -e MLFLOW_S3_ENDPOINT_URL=http://minio:9000 \
  -e AWS_ACCESS_KEY_ID=minioadmin \
  -e AWS_SECRET_ACCESS_KEY=minioadmin \
  ghcr.io/mlflow/mlflow:latest \
  mlflow server \
  --backend-store-uri postgresql://mlflow:password@postgres/mlflow \
  --default-artifact-root s3://mlflow-artifacts/ \
  --host 0.0.0.0

# WebUI: http://localhost:5000
# MLflowモデルレジストリでの本番デプロイ管理
from mlflow.tracking import MlflowClient

client = MlflowClient("http://localhost:5000")

# モデルバージョンを「Staging」から「Production」に昇格
client.transition_model_version_stage(
    name="fraud-detection",
    version=3,
    stage="Production",
    archive_existing_versions=True  # 既存のProductionをArchiveに
)

# 本番モデルをロードして推論
import mlflow.pyfunc

model = mlflow.pyfunc.load_model("models:/fraud-detection/Production")
predictions = model.predict(new_data)

DVC(Data Version Control)

2017年に開発されたGit拡張のデータ・モデルバージョン管理ツールです。GitHubスター14k+。大規模データセット(数GB〜数TB)をGitリポジトリに直接コミットせず、S3・GCS・Azure Blob等のストレージに保存しながらGitのワークフロー(ブランチ・差分・コラボ)でデータとモデルを管理します。MLflowと組み合わせることで完全なMLOpsパイプラインを実現できます。

# DVCのインストールとセットアップ
pip install dvc dvc-s3  # S3ストレージ対応

# Gitリポジトリ内でDVCを初期化
git init my-ml-project
cd my-ml-project
dvc init

# リモートストレージを設定(S3の場合)
dvc remote add -d myremote s3://your-bucket/dvc-storage
# または MinIOをローカルで使う
dvc remote add -d localremote s3://dvc-storage
dvc remote modify localremote endpointurl http://localhost:9000

# データファイルをDVCで管理
dvc add data/train.csv data/test.csv
git add data/.gitignore data/train.csv.dvc data/test.csv.dvc
git commit -m "Add training data"
dvc push  # S3に実データをアップロード
# dvc.yaml - ML パイプラインの定義
stages:
  preprocess:
    cmd: python src/preprocess.py
    deps:
      - src/preprocess.py
      - data/raw/train.csv
    params:
      - params.yaml:
        - preprocessing.test_size
        - preprocessing.random_state
    outs:
      - data/processed/train_features.csv
      - data/processed/test_features.csv

  train:
    cmd: python src/train.py
    deps:
      - src/train.py
      - data/processed/train_features.csv
    params:
      - params.yaml:
        - model.n_estimators
        - model.max_depth
    outs:
      - models/fraud_detector.pkl
    metrics:
      - metrics/train_metrics.json

  evaluate:
    cmd: python src/evaluate.py
    deps:
      - src/evaluate.py
      - models/fraud_detector.pkl
      - data/processed/test_features.csv
    metrics:
      - metrics/eval_metrics.json:
          cache: false
    plots:
      - plots/confusion_matrix.png:
          cache: false
# DVCパイプラインを実行・実験を比較
dvc repro          # パイプライン全体を実行(変更のあるステージのみ)
dvc params diff    # パラメーターの差分を表示
dvc metrics show   # 全ブランチのメトリクスを比較

# 実験を作成・比較
dvc exp run --set-param model.n_estimators=200  # パラメーターを変えて実験
dvc exp show                                     # 実験一覧を表示
dvc exp apply exp-abc123                         # 最良の実験を適用

Kubeflow

2017年にGoogleがKubernetes上のML基盤として開発したOSSプラットフォームです。GitHubスター14k+。Kubernetes上でMLのライフサイクル全体(前処理・学習・評価・デプロイ・モニタリング)を管理します。JupyterHubでノートブック環境を提供し、Kubeflow Pipelines(KFP)でDAG形式のMLパイプラインを定義します。大規模なGPUクラスターを活用した分散学習に向いています。

# Kubeflow Pipelines(KFP)でMLパイプラインを定義
import kfp
from kfp import dsl
from kfp.components import create_component_from_func

@create_component_from_func
def preprocess(input_path: str, output_path: str):
    import pandas as pd
    df = pd.read_csv(input_path)
    # 前処理ロジック
    df.to_csv(output_path, index=False)

@create_component_from_func
def train_model(data_path: str, model_path: str, n_estimators: int = 100):
    from sklearn.ensemble import RandomForestClassifier
    import joblib, pandas as pd
    df = pd.read_csv(data_path)
    X, y = df.drop("label", axis=1), df["label"]
    model = RandomForestClassifier(n_estimators=n_estimators)
    model.fit(X, y)
    joblib.dump(model, model_path)

@dsl.pipeline(name="Fraud Detection Pipeline")
def fraud_detection_pipeline(input_data: str = "gs://bucket/raw/train.csv"):
    preprocess_task = preprocess(
        input_path=input_data,
        output_path="gs://bucket/processed/train.csv"
    )
    train_task = train_model(
        data_path=preprocess_task.outputs["output_path"],
        model_path="gs://bucket/models/fraud_detector.pkl",
        n_estimators=200,
    )

# パイプラインをKubeflowにデプロイ
client = kfp.Client(host="http://kubeflow.yourcompany.com")
client.create_run_from_pipeline_func(fraud_detection_pipeline, arguments={})

機能比較表

比較項目MLflowDVCKubeflow
実験追跡✅(コア機能)✅(基本)
データバージョン管理✅(コア機能)
モデルレジストリ
パイプライン✅(dvc repro)✅(KFP)
Kubernetes依存✅(必須)
分散学習
GitHub Stars20k+14k+14k+

MLflowで追跡した実験結果はDevOpsカテゴリ/categories/devopsのGrafanaでリアルタイム可視化できます。学習済みモデルをプロダクションAPIとして提供する際のサーバー管理はDevOpsカテゴリ/categories/devopsのDockerとKubernetesの知識が必要です。LLMのファインチューニングと実験管理の組み合わせはLLMツールカテゴリ/categories/llm-toolsを参照してください。

FAQ

Q. MLflowとWeights & Biasesはどちらを選ぶべきですか?

A. **Weights & Biases(W&B)**が優れている点: ①リアルタイムメトリクス表示が美麗②スイープ(ハイパーパラメーターサーチ)が内蔵③チームコラボレーション機能が成熟④モデルアーティファクトのビジュアライズが優れる。MLflowが優れている点: ①完全OSSでセルフホスト可能(コスト・プライバシー)②AWS/Azure/Databricksのマネージドオプションがある③実装がシンプルで既存コードへの組み込みが容易④モデルレジストリとデプロイ連携が充実。個人・小規模チームはW&Bの無料枠が便利。企業でデータをクラウドに送りたくない場合はMLflow一択です。

Q. DVCとGit LFSはどう違いますか?どちらを選ぶべきですか?

A. Git LFSはGitリポジトリ内で大きなファイルをリモートに保存しますが、データのバージョン差分の可視化・パイプライン管理・実験追跡はありません。DVCはGit LFSの代替ではなくMLワークフロー専用のデータバージョン管理ツールです。DVCを選ぶ場合: ①ML実験のパイプライン管理も必要②データの変更履歴・比較が必要③複数の実験(異なるデータ前処理)を管理したい。Git LFSを選ぶ場合: ①単に大きなバイナリファイルをGitで管理したい②ML以外の用途(ゲームアセット・デザインファイル等)。

Q. MLflowのセルフホストサーバーのバックアップ方法は?

A. MLflowのデータは2か所に保存されます。①PostgreSQL(実験メタデータ・パラメーター・メトリクス)→通常のPostgreSQLバックアップで対応②S3/MinIO(モデルアーティファクト・プロット等)→S3のバージョニングまたはrcloneでバックアップ。

# MLflowメタデータのバックアップ(PostgreSQL)
pg_dump -U mlflow mlflow | gzip > mlflow_backup_$(date +%Y%m%d).sql.gz

# アーティファクトのバックアップ(S3/MinIOの場合)
rclone copy s3://mlflow-artifacts/ s3-backup:backup-bucket/mlflow-artifacts/

Q. KubeflowとAirflow(Apache)はMLパイプラインとして競合しますか?

A. 役割が異なります。Kubeflow Pipelines: Kubernetes上でのMLパイプライン特化。GPU・分散学習・モデルサービングに最適化。Apache Airflow: 汎用ワークフローオーケストレーター。ETL・BI・非ML処理に強い。KubeflowでMLトレーニングパイプラインを管理し、学習済みモデルをAirflowでデータウェアハウスに連携するという組み合わせが現実的なアーキテクチャです。

まとめ

ユースケース推奨ツール
実験追跡・モデルレジストリMLflow
データ・モデルのバージョン管理DVC
Kubernetes上の大規模ML基盤Kubeflow

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。