AI

ML実験管理比較:MLflow vs Weights & Biases vs DVC で機械学習を再現可能にする

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

ML実験管理比較:MLflow vs Weights & Biases vs DVC で機械学習を再現可能にする

機械学習プロジェクトで「あのモデルがなぜ精度が良かったのか分からない」「半年前の実験を再現できない」という問題を解決するのがML実験管理(MLOps)ツールです。MLflow(Apache・OSS・セルフホスト)・Weights & Biases(W&B)(SaaS・充実した可視化)・DVC(Git拡張・データバージョン管理)の3つが主要ツールです。

ML実験管理ツールを使う理由

  • 再現性: ハイパーパラメーター・データセット・コード・環境を全て記録して同じモデルを再現
  • 比較: 複数の実験を並べてメトリクス(Accuracy・Loss・F1スコア)を視覚的に比較
  • モデルレジストリ: ベストモデルをバージョン管理してステージング→本番への昇格を管理
  • コラボレーション: チームメンバーが互いの実験結果を確認・コメント・共有

主要ツールの概要

MLflow

2018年公開(Databricks)、Python製のOSSです。GitHubスター19k+。セルフホストで完全無料で使えるML実験管理の標準です。Tracking(実験記録)・Projects(再現可能なコードパッケージ)・Models(モデルレジストリ)・Deployments(デプロイ管理)の4コンポーネントで構成されます。

# docker-compose.yml - MLflow Tracking Server(PostgreSQL + MinIO)
version: "3.8"
services:
  mlflow:
    image: ghcr.io/mlflow/mlflow:v2.16.0
    restart: unless-stopped
    ports:
      - "5000:5000"
    environment:
      MLFLOW_BACKEND_STORE_URI: postgresql://mlflow:${POSTGRES_PASSWORD}@postgres:5432/mlflow
      MLFLOW_ARTIFACT_ROOT: s3://mlflow-artifacts/
      AWS_ACCESS_KEY_ID: ${MINIO_ACCESS_KEY}
      AWS_SECRET_ACCESS_KEY: ${MINIO_SECRET_KEY}
      MLFLOW_S3_ENDPOINT_URL: http://minio:9000
    command: >
      mlflow server
      --host 0.0.0.0
      --port 5000
      --backend-store-uri postgresql://mlflow:${POSTGRES_PASSWORD}@postgres:5432/mlflow
      --default-artifact-root s3://mlflow-artifacts/
    depends_on: [postgres, minio]

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: mlflow
      POSTGRES_USER: mlflow
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - mlflow_pg_data:/var/lib/postgresql/data

  minio:
    image: minio/minio:latest
    ports:
      - "9000:9000"
    environment:
      MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
      MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
    command: server /data --console-address ":9001"
    volumes:
      - minio_data:/data

volumes:
  mlflow_pg_data:
  minio_data:
# MLflow: PyTorchモデルの実験記録
import mlflow
import mlflow.pytorch
import torch
import torch.nn as nn
from torch.utils.data import DataLoader

mlflow.set_tracking_uri('http://localhost:5000')
mlflow.set_experiment('image-classifier-v2')

def train_model(config: dict):
    with mlflow.start_run(run_name=f'lr={config["lr"]}_batch={config["batch_size"]}'):
        # ハイパーパラメーターを記録
        mlflow.log_params(config)

        # タグを設定
        mlflow.set_tags({
            'model_type': 'ResNet50',
            'dataset': 'CIFAR-10',
            'author': 'ml-team',
        })

        model = build_model(config)
        optimizer = torch.optim.Adam(model.parameters(), lr=config['lr'])
        criterion = nn.CrossEntropyLoss()

        for epoch in range(config['epochs']):
            train_loss, train_acc = train_epoch(model, optimizer, criterion)
            val_loss, val_acc = validate(model, criterion)

            # メトリクスをエポックごとに記録
            mlflow.log_metrics({
                'train_loss': train_loss,
                'train_acc': train_acc,
                'val_loss': val_loss,
                'val_acc': val_acc,
            }, step=epoch)

        # モデルをアーティファクトとして保存
        mlflow.pytorch.log_model(
            model,
            artifact_path='model',
            registered_model_name='image-classifier',
        )

        # 混同行列・学習曲線をアーティファクトとして保存
        fig = plot_confusion_matrix(model)
        mlflow.log_figure(fig, 'confusion_matrix.png')

        # カスタムアーティファクト(特徴量重要度等)
        mlflow.log_artifact('feature_importance.csv')

        return val_acc

# 実験グリッドサーチ
configs = [
    {'lr': 0.001, 'batch_size': 32, 'epochs': 50, 'dropout': 0.3},
    {'lr': 0.0001, 'batch_size': 64, 'epochs': 50, 'dropout': 0.5},
    {'lr': 0.0003, 'batch_size': 128, 'epochs': 50, 'dropout': 0.3},
]

best_acc = 0
for config in configs:
    acc = train_model(config)
    if acc > best_acc:
        best_acc = acc
        print(f'新しいベストモデル: {acc:.4f}')

# モデルレジストリで本番昇格
from mlflow.tracking import MlflowClient
client = MlflowClient()

# ベストモデルをStagingに昇格
client.transition_model_version_stage(
    name='image-classifier',
    version='3',
    stage='Staging',
)

# テスト完了後にProductionに昇格
client.transition_model_version_stage(
    name='image-classifier',
    version='3',
    stage='Production',
)
# MLflow: 実験結果の比較・分析
import mlflow
import pandas as pd

mlflow.set_tracking_uri('http://localhost:5000')

# 全実験のメトリクスをDataFrameで取得
runs = mlflow.search_runs(
    experiment_names=['image-classifier-v2'],
    filter_string='metrics.val_acc > 0.85',
    order_by=['metrics.val_acc DESC'],
    max_results=20,
)

print(runs[['run_id', 'params.lr', 'params.batch_size', 'metrics.val_acc', 'metrics.val_loss']].to_string())

DVC(Data Version Control)

2017年公開、Python製のOSSです。GitHubスター14k+。Gitの拡張として大容量データセット・モデルファイルをS3/GCS/Azure Blobでバージョン管理するツールです。実験管理よりもデータパイプラインとデータバージョニングに特化しており、MLflowと組み合わせて使うことが多いです。

# DVC: データセットとモデルのバージョン管理
pip install dvc dvc-s3

# Git + DVCプロジェクト初期化
git init
dvc init

# S3 をリモートストレージに設定
dvc remote add -d myremote s3://my-ml-bucket/dvc-store
dvc remote modify myremote access_key_id ${AWS_ACCESS_KEY_ID}
dvc remote modify myremote secret_access_key ${AWS_SECRET_ACCESS_KEY}

# 大容量ファイルをDVCで管理(GitではなくS3に保存)
dvc add data/train.csv data/test.csv
dvc add models/best_model.pkl

# Git には .dvc ポインターファイルのみコミット
git add data/train.csv.dvc data/test.csv.dvc models/best_model.pkl.dvc .gitignore
git commit -m "Add training data and model v1"
dvc push  # 実データをS3にアップロード

# チームメンバーがデータを取得
git pull
dvc pull  # S3から実データをダウンロード

# データパイプラインを定義(dvc.yaml)
dvc repro  # パイプラインを順番に実行(変更があったステップのみ再実行)
# dvc.yaml: 再現可能なMLパイプライン定義
stages:
  preprocess:
    cmd: python src/preprocess.py --input data/raw.csv --output data/processed.csv
    deps:
      - src/preprocess.py
      - data/raw.csv
    outs:
      - data/processed.csv

  train:
    cmd: python src/train.py --data data/processed.csv --output models/model.pkl
    deps:
      - src/train.py
      - data/processed.csv
    outs:
      - models/model.pkl
    metrics:
      - metrics/train_metrics.json:
          cache: false

  evaluate:
    cmd: python src/evaluate.py --model models/model.pkl --data data/test.csv
    deps:
      - src/evaluate.py
      - models/model.pkl
      - data/test.csv
    metrics:
      - metrics/eval_metrics.json:
          cache: false

機能比較表

比較項目MLflowW&BDVC
セルフホスト△(有料)
実験可視化✅ 最充実
データバージョニング✅ 最強
モデルレジストリ
無料枠無制限(OSS)月200hOSS無制限
学習コスト

ML実験管理はDevOpsカテゴリ/categories/devopsのCI/CDパイプライン(GitHub Actions)と統合して、PRごとにモデルの精度回帰テストを実行して品質を自動担保します。LLM Toolsカテゴリ/categories/llm-toolsのファインチューニング(Unsloth・Axolotl)ジョブのハイパーパラメーター探索と実験記録にもMLflowが広く使われています。

FAQ

Q. MLflowをGitHub ActionsのCI/CDに統合するには?

A. PRのたびにモデルを再訓練して精度回帰を自動検知するワークフローを構築します。①GitHub Actionsワークフロー(.github/workflows/ml-ci.yml)でdvc reproを実行して再現可能なパイプラインを実行②MLflowに実験結果を記録③mlflow.search_runs()で前回のベースラインと精度を比較④精度が閾値を下回った場合はPRにコメントを投稿して警告。MLflow Tracking ServerへのアクセスはGitHub Secrets(MLFLOW_TRACKING_URIMLFLOW_TRACKING_USERNAME)で管理します。

Q. W&BとMLflowはどう使い分けますか?

A. チーム規模が大きく・可視化の品質・リアルタイム進捗共有が重要ならW&Bコスト0・セルフホスト・データ完全管理ならMLflowが向いています。W&Bの優位点: ①実験の可視化UI(並列座標チャート・ハイパーパラメーター重要度)がMLflowより格段に充実②Sweeps(ハイパーパラメーター自動探索・Bayesian最適化)が標準搭載③Academic向けは無料で商用も月200h無料。MLflowの優位点: ①AWS/GCP/Azure上に完全セルフホストしてデータが外部に出ない②Databricks MLflowとの統合で大規模企業向けガバナンス③モデルレジストリのステージング/本番管理がシンプルなUIで操作可能。

Q. DVCはMLflowと組み合わせて使えますか?

A. DVCとMLflowは補完的な役割を持ち、組み合わせが推奨されます。役割分担: ①DVC: データセット(data/)・モデルアーティファクト(models/)のGitバージョン管理+パイプライン定義②MLflow: 実験ごとのメトリクス記録・パラメーター記録・可視化・モデルレジストリ。実装: DVCのパイプラインステージ(dvc.yaml)内でPythonスクリプトを実行し、そのスクリプト内でMLflowのmlflow.start_run()でメトリクスを記録します。dvc reproが実行された各Runの結果がMLflow UIで比較できる完全な実験管理環境になります。

Q. モデルをMLflowからFastAPIでサービングするには?

A. mlflow.pyfunc.load_model()でモデルを読み込んでFastAPIエンドポイントで提供します。①pip install mlflow fastapi uvicornmodel = mlflow.pyfunc.load_model('models:/image-classifier/Production')③FastAPIの起動時にモデルをメモリにロード④@app.post('/predict')エンドポイントで推論を実行。MLflow Serving組み込み: mlflow models serve -m models:/image-classifier/Production -p 8080 --no-condaでMLflow自体がFlaskベースのサービングサーバーを起動(本番用途ではFastAPIのほうが高速・柔軟)。コンテナイメージ生成: mlflow models build-docker -m models:/image-classifier/Production -n my-classifierでDockerイメージを自動生成してKubernetesにデプロイできます。

まとめ

ユースケース推奨ツール
セルフホスト・モデルレジストリ・コスト0MLflow
チーム共有・充実した可視化・SweepsWeights & Biases
データバージョン管理・再現可能パイプラインDVC

関連外部リソース

他の記事も読む

Let's Build Together

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

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