MLflow 記録済みモデル (ベータ) を使用したモデルの追跡と比較
ベータ版
この機能は ベータ版です。
MLflow 記録済みモデルは、モデルのライフサイクル全体を通じてモデルの進行状況を追跡するのに役立ちます。 モデルをトレーニングするときは、 mlflow.<model-flavor>.log_model()
を使用して、一意の ID を使用してすべての重要な情報を結び付ける LoggedModel
を作成します。
LoggedModel
オブジェクトは、モデルのライフサイクル全体を通じて、さまざまな環境や実行にわたって保持され、メタデータ、メトリクス、パラメーター、モデルの生成に使用されたコードなどのアーティファクトへのリンクが含まれています。
記録済みモデル トラッキングを使用すると、モデルを相互に比較し、最もパフォーマンスの高いモデルを見つけ、デバッグ中に情報を追跡できます。
ジェネレーションAIおよびディープラーニングモデルの追跡の改善
生成AI とディープラーニング ワークフローは、特に記録済みモデルが提供する詳細な追跡の恩恵を受けます。
Gen AI - 統合された評価データとトレースデータ:
- Gen AI モデルは、評価とデプロイ中に、レビューアーのフィードバックデータやトレースなど、追加のメトリクスを生成します。
LoggedModel
エンティティを使用すると、モデルによって生成されたすべての情報を 1 つのインターフェイスを使用してクエリできます。
ディープラーニング - 効率的なチェックポイント管理:
- ディープラーニングのトレーニングでは、トレーニング中の特定のポイントでのモデルの状態のスナップショットである複数のチェックポイントが作成されます。
- MLflow 、チェックポイントごとに個別の
LoggedModel
を作成し、モデルのメトリクスとパフォーマンスデータを含めます。 これにより、チェックポイントを比較および評価して、最もパフォーマンスの高いモデルを効率的に特定できます。
記録済みモデルの作成
記録済みモデルを作成するには、既存の ワークロードと同じlog_model()
API MLflowを使用します。次のコード スニペットは、gen AI、ディープラーニング、および従来の ML ワークフローの記録済みモデルを作成する方法を示しています。
実行可能なノートブックの完全な例については、「 ノートブックの例」を参照してください。
- Gen AI
- Deep learning
- Traditional ML
The following code snippet shows how to log a LangChain agent. Use the log_model()
method for your flavor of agent.
# Log the chain with MLflow, specifying its parameters
# As a new feature, the LoggedModel entity is linked to its name and params
model_info = mlflow.langchain.log_model(
lc_model=chain,
artifact_path="basic_chain",
params={
"temperature": 0.1,
"max_tokens": 2000,
"prompt_template": str(prompt)
},
model_type="agent",
input_example={"messages": "What is MLflow?"},
)
# Inspect the LoggedModel and its properties
logged_model = mlflow.get_logged_model(model_info.model_id)
print(logged_model.model_id, logged_model.params)
Start an evaluation job and link the metrics to a Logged Model by providing the unique model_id
for the LoggedModel
:
# Start a run to represent the evaluation job
with mlflow.start_run() as evaluation_run:
eval_dataset: mlflow.entities.Dataset = mlflow.data.from_pandas(
df=eval_df,
name="eval_dataset",
)
# Run the agent evaluation
result = mlflow.evaluate(
model=f"models:/{logged_model.model_id}",
data=eval_dataset,
model_type="databricks-agent"
)
# Log evaluation metrics and associate with agent
mlflow.log_metrics(
metrics=result.metrics,
dataset=eval_dataset,
# Specify the ID of the agent logged above
model_id=logged_model.model_id
)
The following code snippet shows how to create Logged Models during deep learning training. Use the log_model()
method for your flavor of MLflow model.
# Start a run to represent the training job
with mlflow.start_run():
# Load the training dataset with MLflow. We will link training metrics to this dataset.
train_dataset: Dataset = mlflow.data.from_pandas(train_df, name="train")
X_train, y_train = prepare_data(train_dataset.df)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(scripted_model.parameters(), lr=0.01)
for epoch in range(101):
X_train, y_train = X_train.to(device), y_train.to(device)
out = scripted_model(X_train)
loss = criterion(out, y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Log a checkpoint with metrics every 10 epochs
if epoch % 10 == 0:
# Each newly created LoggedModel checkpoint is linked with its
# name, params, and step
model_info = mlflow.pytorch.log_model(
pytorch_model=scripted_model,
name=f"torch-iris-{epoch}",
params={
"n_layers": 3,
"activation": "ReLU",
"criterion": "CrossEntropyLoss",
"optimizer": "Adam"
},
step=epoch,
input_example=X_train.numpy(),
)
# Log metric on training dataset at step and link to LoggedModel
mlflow.log_metric(
key="accuracy",
value=compute_accuracy(scripted_model, X_train, y_train),
step=epoch,
model_id=model_info.model_id,
dataset=train_dataset
)
The following code snippet shows how to log a sklearn model and link metrics to the Logged Model
. Use the log_model()
method for your flavor of MLflow model.
## Log the model
model_info = mlflow.sklearn.log_model(
sk_model=lr,
name="elasticnet",
params={
"alpha": 0.5,
"l1_ratio": 0.5,
},
input_example = train_x
)
# Inspect the LoggedModel and its properties
logged_model = mlflow.get_logged_model(model_info.model_id)
print(logged_model.model_id, logged_model.params)
# Evaluate the model on the training dataset and log metrics
# These metrics are now linked to the LoggedModel entity
predictions = lr.predict(train_x)
(rmse, mae, r2) = compute_metrics(train_y, predictions)
mlflow.log_metrics(
metrics={
"rmse": rmse,
"r2": r2,
"mae": mae,
},
model_id=logged_model.model_id,
dataset=train_dataset
)
ノートブックの例
たとえば、 LoggedModels
の使用方法を示すノートブックについては、次のページを参照してください。
モデルの表示と進行状況の追跡
記録済みモデルは、ワークスペース UI で表示できます。
- ワークスペースの エクスペリメント タブに移動します。
- エクスペリメントを選択します。 次に、[ モデル ] タブを選択します。
このページには、エクスペリメントに関連付けられているすべての記録済みモデルと、そのメトリクス、パラメーター、アーティファクトが含まれています。
記録済みモデルで検索およびフィルタリングし、実行全体でメトリクスを追跡するためのチャートを生成できます。
Search 記録済みモデル programmatically
UIに加えて、次の MLflow APIを使用して記録済みモデルを検索します。
## Get a Logged Model using a model_id
mlflow.get_logged_model(model_id = <my-model-id>)
## Get all Logged Models that you have access to
mlflow.search_logged_models()
詳細情報と追加の検索パラメーターについては、 MLflow 3.0 API のドキュメントを参照してください。