mlflow
MLflowを使用して、機械学習の実験トラッキング、バージョン管理付きモデルレジストリの管理、本番環境へのモデルデプロイ、および実験の再現を行います。特定のフレームワークに依存しないMLライフサイクル管理プラットフォームです。
description の原文を見る
Track ML experiments, manage model registry with versioning, deploy models to production, and reproduce experiments with MLflow - framework-agnostic ML lifecycle platform
SKILL.md 本文
MLflow: ML ライフサイクル管理プラットフォーム
このスキルを使用する場合
以下が必要な場合にMLflowを使用してください:
- ML実験を追跡する (パラメータ、メトリクス、アーティファクト)
- モデルレジストリを管理する (バージョン管理とステージ遷移)
- モデルをデプロイする (ローカル、クラウド、サービング環境)
- 実験を再現する (プロジェクト設定)
- モデルバージョンとパフォーマンスメトリクスを比較する
- ML プロジェクトでチームと協力する
- 任意の ML フレームワークと統合する (フレームワーク非依存)
ユーザー: 20,000以上の組織 | GitHub スター: 23k以上 | ライセンス: Apache 2.0
インストール
# MLflowをインストール
pip install mlflow
# 追加機能付きでインストール
pip install mlflow[extras] # SQLAlchemy, boto3等を含む
# MLflow UIを起動
mlflow ui
# http://localhost:5000 でアクセス
クイックスタート
基本的な追跡
import mlflow
# 実行を開始
with mlflow.start_run():
# パラメータをログ
mlflow.log_param("learning_rate", 0.001)
mlflow.log_param("batch_size", 32)
# 訓練コード
model = train_model()
# メトリクスをログ
mlflow.log_metric("train_loss", 0.15)
mlflow.log_metric("val_accuracy", 0.92)
# モデルをログ
mlflow.sklearn.log_model(model, "model")
自動ログ (自動追跡)
import mlflow
from sklearn.ensemble import RandomForestClassifier
# 自動ログを有効化
mlflow.autolog()
# 訓練 (自動的にログされます)
model = RandomForestClassifier(n_estimators=100, max_depth=5)
model.fit(X_train, y_train)
# メトリクス、パラメータ、モデルが自動的にログされます!
コア概念
1. 実験と実行
実験: 関連する実行のための論理的なコンテナ 実行: MLコードの単一実行 (パラメータ、メトリクス、アーティファクト)
import mlflow
# 実験を作成/設定
mlflow.set_experiment("my-experiment")
# 実行を開始
with mlflow.start_run(run_name="baseline-model"):
# パラメータをログ
mlflow.log_param("model", "ResNet50")
mlflow.log_param("epochs", 10)
# 訓練
model = train()
# メトリクスをログ
mlflow.log_metric("accuracy", 0.95)
# モデルをログ
mlflow.pytorch.log_model(model, "model")
# 実行IDは自動生成されます
print(f"Run ID: {mlflow.active_run().info.run_id}")
2. パラメータのログ
with mlflow.start_run():
# 単一パラメータ
mlflow.log_param("learning_rate", 0.001)
# 複数パラメータ
mlflow.log_params({
"batch_size": 32,
"epochs": 50,
"optimizer": "Adam",
"dropout": 0.2
})
# ネストされたパラメータ (辞書として)
config = {
"model": {
"architecture": "ResNet50",
"pretrained": True
},
"training": {
"lr": 0.001,
"weight_decay": 1e-4
}
}
# JSON文字列または個別パラメータとしてログ
for key, value in config.items():
mlflow.log_param(key, str(value))
3. メトリクスのログ
with mlflow.start_run():
# 訓練ループ
for epoch in range(NUM_EPOCHS):
train_loss = train_epoch()
val_loss = validate()
# 各ステップでメトリクスをログ
mlflow.log_metric("train_loss", train_loss, step=epoch)
mlflow.log_metric("val_loss", val_loss, step=epoch)
# 複数メトリクスをログ
mlflow.log_metrics({
"train_accuracy": train_acc,
"val_accuracy": val_acc
}, step=epoch)
# 最終メトリクスをログ (ステップなし)
mlflow.log_metric("final_accuracy", final_acc)
4. アーティファクトのログ
with mlflow.start_run():
# ファイルをログ
model.save('model.pkl')
mlflow.log_artifact('model.pkl')
# ディレクトリをログ
os.makedirs('plots', exist_ok=True)
plt.savefig('plots/loss_curve.png')
mlflow.log_artifacts('plots')
# テキストをログ
with open('config.txt', 'w') as f:
f.write(str(config))
mlflow.log_artifact('config.txt')
# 辞書を JSON としてログ
mlflow.log_dict({'config': config}, 'config.json')
5. モデルのログ
# PyTorch
import mlflow.pytorch
with mlflow.start_run():
model = train_pytorch_model()
mlflow.pytorch.log_model(model, "model")
# Scikit-learn
import mlflow.sklearn
with mlflow.start_run():
model = train_sklearn_model()
mlflow.sklearn.log_model(model, "model")
# Keras/TensorFlow
import mlflow.keras
with mlflow.start_run():
model = train_keras_model()
mlflow.keras.log_model(model, "model")
# HuggingFace Transformers
import mlflow.transformers
with mlflow.start_run():
mlflow.transformers.log_model(
transformers_model={
"model": model,
"tokenizer": tokenizer
},
artifact_path="model"
)
自動ログ
人気のあるフレームワークのメトリクス、パラメータ、モデルを自動的にログします。
自動ログを有効化
import mlflow
# サポートされているすべてのフレームワークに対して有効化
mlflow.autolog()
# または特定のフレームワークに対して有効化
mlflow.sklearn.autolog()
mlflow.pytorch.autolog()
mlflow.keras.autolog()
mlflow.xgboost.autolog()
Scikit-learn での自動ログ
import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 自動ログを有効化
mlflow.sklearn.autolog()
# データを分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 訓練 (パラメータ、メトリクス、モデルが自動的にログされます)
with mlflow.start_run():
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
model.fit(X_train, y_train)
# 正確度、f1_scoreなどのメトリクスが自動的にログされます
# モデルが自動的にログされます
# 訓練期間がログされます
PyTorch Lightning での自動ログ
import mlflow
import pytorch_lightning as pl
# 自動ログを有効化
mlflow.pytorch.autolog()
# 訓練
with mlflow.start_run():
trainer = pl.Trainer(max_epochs=10)
trainer.fit(model, datamodule=dm)
# ハイパーパラメータがログされます
# 訓練メトリクスがログされます
# 最高のモデルチェックポイントがログされます
モデルレジストリ
バージョン管理とステージ遷移によってモデルのライフサイクルを管理します。
モデルを登録
import mlflow
# モデルをログして登録
with mlflow.start_run():
model = train_model()
# モデルをログ
mlflow.sklearn.log_model(
model,
"model",
registered_model_name="my-classifier" # すぐに登録
)
# または後で登録
run_id = "abc123"
model_uri = f"runs:/{run_id}/model"
mlflow.register_model(model_uri, "my-classifier")
モデルステージ
モデルをステージ間で遷移: なし → ステージング → 本番 → アーカイブ
from mlflow.tracking import MlflowClient
client = MlflowClient()
# ステージングに昇格
client.transition_model_version_stage(
name="my-classifier",
version=3,
stage="Staging"
)
# 本番に昇格
client.transition_model_version_stage(
name="my-classifier",
version=3,
stage="Production",
archive_existing_versions=True # 古い本番バージョンをアーカイブ
)
# モデルをアーカイブ
client.transition_model_version_stage(
name="my-classifier",
version=2,
stage="Archived"
)
レジストリからモデルをロード
import mlflow.pyfunc
# 最新の本番モデルをロード
model = mlflow.pyfunc.load_model("models:/my-classifier/Production")
# 特定のバージョンをロード
model = mlflow.pyfunc.load_model("models:/my-classifier/3")
# ステージングからロード
model = mlflow.pyfunc.load_model("models:/my-classifier/Staging")
# モデルを使用
predictions = model.predict(X_test)
モデルバージョニング
client = MlflowClient()
# すべてのバージョンをリスト
versions = client.search_model_versions("name='my-classifier'")
for v in versions:
print(f"Version {v.version}: {v.current_stage}")
# ステージ別の最新バージョンを取得
latest_prod = client.get_latest_versions("my-classifier", stages=["Production"])
latest_staging = client.get_latest_versions("my-classifier", stages=["Staging"])
# モデルバージョンの詳細を取得
version_info = client.get_model_version(name="my-classifier", version="3")
print(f"Run ID: {version_info.run_id}")
print(f"Stage: {version_info.current_stage}")
print(f"Tags: {version_info.tags}")
モデルアノテーション
client = MlflowClient()
# 説明を追加
client.update_model_version(
name="my-classifier",
version="3",
description="ResNet50 classifier trained on 1M images with 95% accuracy"
)
# タグを追加
client.set_model_version_tag(
name="my-classifier",
version="3",
key="validation_status",
value="approved"
)
client.set_model_version_tag(
name="my-classifier",
version="3",
key="deployed_date",
value="2025-01-15"
)
実行の検索
プログラムで実行を見つけます。
from mlflow.tracking import MlflowClient
client = MlflowClient()
# 実験内のすべての実行を検索
experiment_id = client.get_experiment_by_name("my-experiment").experiment_id
runs = client.search_runs(
experiment_ids=[experiment_id],
filter_string="metrics.accuracy > 0.9",
order_by=["metrics.accuracy DESC"],
max_results=10
)
for run in runs:
print(f"Run ID: {run.info.run_id}")
print(f"Accuracy: {run.data.metrics['accuracy']}")
print(f"Params: {run.data.params}")
# 複雑なフィルタを使用して検索
runs = client.search_runs(
experiment_ids=[experiment_id],
filter_string="""
metrics.accuracy > 0.9 AND
params.model = 'ResNet50' AND
tags.dataset = 'ImageNet'
""",
order_by=["metrics.f1_score DESC"]
)
統合の例
PyTorch
import mlflow
import torch
import torch.nn as nn
# 自動ログを有効化
mlflow.pytorch.autolog()
with mlflow.start_run():
# 設定をログ
config = {
"lr": 0.001,
"epochs": 10,
"batch_size": 32
}
mlflow.log_params(config)
# 訓練
model = create_model()
optimizer = torch.optim.Adam(model.parameters(), lr=config["lr"])
for epoch in range(config["epochs"]):
train_loss = train_epoch(model, optimizer, train_loader)
val_loss, val_acc = validate(model, val_loader)
# メトリクスをログ
mlflow.log_metrics({
"train_loss": train_loss,
"val_loss": val_loss,
"val_accuracy": val_acc
}, step=epoch)
# モデルをログ
mlflow.pytorch.log_model(model, "model")
HuggingFace Transformers
import mlflow
from transformers import Trainer, TrainingArguments
# 自動ログを有効化
mlflow.transformers.autolog()
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True
)
# MLflow実行を開始
with mlflow.start_run():
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset
)
# 訓練 (自動的にログされます)
trainer.train()
# 最終モデルをレジストリにログ
mlflow.transformers.log_model(
transformers_model={
"model": trainer.model,
"tokenizer": tokenizer
},
artifact_path="model",
registered_model_name="hf-classifier"
)
XGBoost
import mlflow
import xgboost as xgb
# 自動ログを有効化
mlflow.xgboost.autolog()
with mlflow.start_run():
dtrain = xgb.DMatrix(X_train, label=y_train)
dval = xgb.DMatrix(X_val, label=y_val)
params = {
'max_depth': 6,
'learning_rate': 0.1,
'objective': 'binary:logistic',
'eval_metric': ['logloss', 'auc']
}
# 訓練 (自動的にログされます)
model = xgb.train(
params,
dtrain,
num_boost_round=100,
evals=[(dtrain, 'train'), (dval, 'val')],
early_stopping_rounds=10
)
# モデルとメトリクスが自動的にログされます
ベストプラクティス
1. 実験で整理
# ✅ 良い: 異なるタスク向けに別の実験
mlflow.set_experiment("sentiment-analysis")
mlflow.set_experiment("image-classification")
mlflow.set_experiment("recommendation-system")
# ❌ 悪い: すべてを1つの実験に
mlflow.set_experiment("all-models")
2. わかりやすい実行名を使用
# ✅ 良い: わかりやすい名前
with mlflow.start_run(run_name="resnet50-imagenet-lr0.001-bs32"):
train()
# ❌ 悪い: 名前なし (自動生成UUID)
with mlflow.start_run():
train()
3. 包括的なメタデータをログ
with mlflow.start_run():
# ハイパーパラメータをログ
mlflow.log_params({
"learning_rate": 0.001,
"batch_size": 32,
"epochs": 50
})
# システム情報をログ
mlflow.set_tags({
"dataset": "ImageNet",
"framework": "PyTorch 2.0",
"gpu": "A100",
"git_commit": get_git_commit()
})
# データ情報をログ
mlflow.log_param("train_samples", len(train_dataset))
mlflow.log_param("val_samples", len(val_dataset))
4. モデル系統を追跡
# 系統を理解するために実行をリンク
with mlflow.start_run(run_name="preprocessing"):
data = preprocess()
mlflow.log_artifact("data.csv")
preprocessing_run_id = mlflow.active_run().info.run_id
with mlflow.start_run(run_name="training"):
# 親実行を参照
mlflow.set_tag("preprocessing_run_id", preprocessing_run_id)
model = train(data)
5. デプロイメント向けにモデルレジストリを使用
# ✅ 良い: 本番用にレジストリを使用
model_uri = "models:/my-classifier/Production"
model = mlflow.pyfunc.load_model(model_uri)
# ❌ 悪い: 実行IDをハードコード
model_uri = "runs:/abc123/model"
model = mlflow.pyfunc.load_model(model_uri)
デプロイメント
モデルをローカルでサーブ
# 登録済みモデルをサーブ
mlflow models serve -m "models:/my-classifier/Production" -p 5001
# 実行からサーブ
mlflow models serve -m "runs:/<RUN_ID>/model" -p 5001
# エンドポイントをテスト
curl http://127.0.0.1:5001/invocations -H 'Content-Type: application/json' -d '{
"inputs": [[1.0, 2.0, 3.0, 4.0]]
}'
クラウドにデプロイ
# AWS SageMaker にデプロイ
mlflow sagemaker deploy -m "models:/my-classifier/Production" --region-name us-west-2
# Azure ML にデプロイ
mlflow azureml deploy -m "models:/my-classifier/Production"
設定
トラッキングサーバー
# バックエンドストアを使用してトラッキングサーバーを起動
mlflow server \
--backend-store-uri postgresql://user:password@localhost/mlflow \
--default-artifact-root s3://my-bucket/mlflow \
--host 0.0.0.0 \
--port 5000
クライアント設定
import mlflow
# トラッキングURIを設定
mlflow.set_tracking_uri("http://localhost:5000")
# または環境変数を使用
# export MLFLOW_TRACKING_URI=http://localhost:5000
リソース
- ドキュメント: https://mlflow.org/docs/latest
- GitHub: https://github.com/mlflow/mlflow (23k以上のスター)
- 例: https://github.com/mlflow/mlflow/tree/master/examples
- コミュニティ: https://mlflow.org/community
関連項目
references/tracking.md- 包括的なトラッキングガイドreferences/model-registry.md- モデルのライフサイクル管理references/deployment.md- 本番デプロイメントパターン
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。