次の方法で共有


MLflow ログ記録モデルを使用してモデルを追跡および比較する

MLflow ログモデルは、そのライフサイクル全体を通じてモデルの進行状況を追跡するのに役立ちます。 モデルをトレーニングするときは、 mlflow.<model-flavor>.log_model() を使用して、一意の ID を使用してすべての重要な情報を結び付ける LoggedModel を作成します。 LoggedModelsの機能を活用するには、MLflow 3 の使用を開始します。

GenAI アプリケーションの場合、 LoggedModels を作成して、git コミットまたはパラメーターのセットを専用オブジェクトとしてキャプチャし、トレースとメトリックにリンクできます。 ディープ ラーニングとクラシック ML では、 LoggedModels は MLflow 実行から生成されます。これは MLflow の既存の概念であり、モデル コードを実行するジョブと考えることができます。 トレーニング実行は出力としてモデルを生成し、評価実行では既存のモデルを入力として使用して、モデルのパフォーマンスを評価するために使用できるメトリックやその他の情報を生成します。

LoggedModel オブジェクトは、さまざまな環境にわたってモデルのライフサイクル全体にわたって保持され、メタデータ、メトリック、パラメーター、モデルの生成に使用されるコードなどの成果物へのリンクが含まれています。 ログに記録されたモデル追跡を使用すると、モデルを相互に比較し、最もパフォーマンスの高いモデルを見つけ、デバッグ中に情報を追跡できます。

ログに記録されたモデルを Unity カタログ モデル レジストリに登録して、すべての MLflow 実験とワークスペースのモデルに関する情報を 1 つの場所で使用できるようにすることもできます。 詳細については、 MLflow 3 でのモデル レジストリの機能強化に関するページを参照してください。

Gen AI、ディープ ラーニング、従来の ML のモデル追跡フロー。

Gen AI とディープ ラーニング モデルの追跡の改善

生成 AI とディープ ラーニング ワークフローは、ログに記録されたモデルが提供する詳細な追跡の恩恵を特に受けます。

Gen AI - 統合された評価とトレース データ:

  • Gen AI モデルでは、レビュー担当者のフィードバック データやトレースなど、評価とデプロイ中に追加のメトリックが生成されます。
  • LoggedModel エンティティを使用すると、1 つのインターフェイスを使用して、モデルによって生成されたすべての情報に対してクエリを実行できます。

ディープ ラーニング - 効率的なチェックポイント管理:

  • ディープ ラーニング トレーニングでは、複数のチェックポイントが作成されます。これは、トレーニング中の特定の時点におけるモデルの状態のスナップショットです。
  • MLflow は、モデルのメトリックとパフォーマンス データを含むチェックポイントごとに個別の LoggedModel を作成します。 これにより、チェックポイントを比較して評価し、最もパフォーマンスの高いモデルを効率的に識別できます。

ログに記録されたモデルを作成する

ログに記録されたモデルを作成するには、既存の MLflow ワークロードと同じ log_model() API を使用します。 次のコード スニペットは、Gen AI、ディープ ラーニング、および従来の ML ワークフロー用にログに記録されたモデルを作成する方法を示しています。

実行可能なノートブックの完全な例については、「ノートブックの 」を参照してください。

ジェンAI (人工知能)

次のコード スニペットは、LangChain エージェントをログに記録する方法を示しています。 log_model()メソッドを使用して、エージェントのフレーバーを設定します。

# 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,
  name="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)

model_idに固有の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
  )

ディープ ラーニング

次のコード スニペットは、ディープ ラーニング トレーニング中にログに記録されたモデルを作成する方法を示しています。 MLflow モデルのフレーバーには、 log_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
      )

従来の機械学習

次のコード スニペットは、sklearn モデルをログに記録し、メトリックを Logged Modelにリンクする方法を示しています。 MLflow モデルのフレーバーには、 log_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 で表示できます。

  1. ワークスペースの [ 実験 ] タブに移動します。
  2. 実験を選択します。 次に、[ モデル ] タブを選択します。

このページには、実験に関連付けられているすべてのログモデルと、そのメトリック、パラメーター、成果物が含まれています。

モデル追跡 UI。

グラフを生成して、実行全体のメトリックを追跡できます。

モデル追跡 UI メトリック グラフ。

ログに記録されたモデルの検索とフィルター処理

[ モデル ] タブでは、その属性、パラメーター、タグ、メトリックに基づいて、ログに記録されたモデルを検索およびフィルター処理できます。

モデル追跡UI内の検索でログに記録されたモデルを探します。

データセット固有のパフォーマンスに基づいてメトリックをフィルター処理でき、特定のデータセットのメトリック値が一致するモデルのみが返されます。 メトリックフィルターを指定せずにデータセットフィルターを提供する場合、それらのデータセットに含まれる任意のメトリックを持つモデルが返されます。

次の属性に基づいてフィルター処理できます。

  • model_id
  • model_name
  • status
  • artifact_uri
  • creation_time (数値)
  • last_updated_time (数値)

文字列のような属性、パラメーター、タグを検索およびフィルター処理するには、次の演算子を使用します。

  • =!=INNOT IN

次の比較演算子を使用して、数値の属性とメトリックを検索およびフィルター処理します。

  • =!=><>=<=

プログラムでログに記録されたモデルを検索する

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()

## Get all Logged Models with a specific name
mlflow.search_logged_models(
  filter_string = "model_name = <my-model-name>"
)

## Get all Logged Models created within a certain time range
mlflow.search_logged_models(
  filter_string = "creation_time >= <creation_time_start> AND creation_time <= <creation_time_end>"
)

## Get all Logged Models with a specific param value
mlflow.search_logged_models(
  filter_string = "params.<param_name> = <param_value_1>"
)

## Get all Logged Models with specific tag values
mlflow.search_logged_models(
  filter_string = "tags.<tag_name> IN (<tag_value_1>, <tag_value_2>)"
)

## Get all Logged Models greater than a specific metric value on a dataset, then order by that metric value
mlflow.search_logged_models(
  filter_string = "metrics.<metric_name> >= <metric_value>",
  datasets = [
    {"dataset_name": <dataset_name>, "dataset_digest": <dataset_digest>}
  ],
  order_by = [
    {"field_name": metrics.<metric_name>, "dataset_name": <dataset_name>,"dataset_digest": <dataset_digest>}
  ]
)

詳細と追加の検索パラメーターについては、 MLflow 3 API のドキュメントを参照してください

モデルの入力と出力による検索実行

モデル ID で実行を検索して、ログに記録されたモデルを含むすべての実行を入力または出力として返すことができます。 フィルター文字列の構文の詳細については、実行の フィルター処理を参照してください。

モデル追跡UI内の検索でログに記録されたモデルを探します。

MLflow API を使用して実行を検索できます。

## Get all Runs with a particular model as an input or output by model id
mlflow.search_runs(filter_string = "models.model_id = <my-model-id>")

次のステップ

MLflow 3 のその他の新機能の詳細については、次の記事を参照してください。