MLflow のランでトレーニングコードを管理する

この記事では、機械学習トレーニングを管理するための MLflow のランについて説明します。 また、 エクスペリメント間でランを管理および比較する方法に関するガイダンスも含まれています。

MLflow の実行は、モデル コードの 1 回 の実行 に対応します。 各実行では、次の情報が記録されます。

  • ソース: ランを起動したノートブックの名前、またはランのプロジェクト名とエントリ ポイント。

    • バージョン: ノートブックがDatabricks Git フォルダーに保存されている場合、またはMLflow プロジェクトから実行されている場合の Git コミット ハッシュ。 それ以外の場合は、ノートブックのリビジョン。

    • 開始時刻と終了時刻: ランの開始時刻と終了時刻。

    • パラメーター: キーと値のペアとして保存されたモデルパラメーター。 キーと値はどちらも文字列です。

    • メトリクス: キーと値のペアとして保存されたモデル評価メトリクス。 値は数値です。 各メトリクスは実行中に更新でき (たとえば、モデルの損失関数がどのように収束しているかを追跡するため)、MLflow はメトリクスの履歴を記録して視覚化できます。

    • タグ: キーと値のペアとして保存されたメタデータを実行します。 タグは、実行中および完了後に更新できます。 キーと値はどちらも文字列です。

    • アーティファクト: 任意の形式の出力ファイル。 たとえば、イメージ、モデル (漬物 Scikit-Learn モデルなど)、データ ファイル (Parquet ファイルなど) を成果物として記録できます。

すべての MLflow のランは、 アクティブなエクスペリメントに記録されます。 エクスペリメントをアクティブなエクスペリメントとして明示的に設定していない場合、ランはノートブックのエクスペリメントに記録されます。

ランの表示

ランには、その親 Experiment ページから、またはランを作成したノートブックから直接アクセスできます。

エクスペリメント ページの runs テーブルで、ランの開始時刻をクリックします。

ノートブックで、[エクスペリメントの実行] サイドバーで実行の日時の横にあるクリック 外部リンク します。

ラン 画面 には、ランに使用されたパラメーター、ランの結果のメトリクス、およびタグやメモが表示されます。 このランの メモパラメーターメトリクス、または タグ を表示するには、ラベルの左側をクリックします 右矢印

この画面では、ランから保存された成果物にもアクセスできます。

ランの表示

予測用のコード スニペット

ランからモデルをログに記録すると、モデルはこのページの「アーティファクト」セクションに表示されます。 モデルをロードして使用して Spark およびPandas DataFramesで予測を行う方法を示すコード スニペットを表示するには、モデル名をクリックします。

コード スニペットを予測する

ランで使用されたノートブックまたは Git プロジェクトを表示する

ランを作成した ノートブックのバージョン を表示するには:

  • [エクスペリメント] ページで、[ ソース ] 列のリンクをクリックします。

  • ランページで、[ ソース] の横にあるリンクをクリックします。

  • ノートブックの [エクスペリメントのラン] サイドバーで、そのエクスペリメントのランのボックスにある [ノートブック ] アイコン ノートブックバージョンアイコン をクリックします。

ランに関連付けられているノートブックのバージョンがメイン ウィンドウに表示され、ランの日時を示す強調表示バーが表示されます。

ランが Git プロジェクトからリモートで起動された場合は、[ Git コミット ] フィールドのリンクをクリックして、ランで使用されているプロジェクトの特定のバージョンを開きます。 [ ソース ] フィールドのリンクをクリックすると、ランで使用される Git プロジェクトのメイン ブランチが開きます。

ランにタグを追加する

タグは、作成して後で ランを検索するために使用できるキーと値のペアです。

  1. ランページで、まだ開いていない場合はクリック タグアイコン します。タグテーブルが表示されます。

    タグテーブル
  2. [ 名前 ] フィールドと [ 値] フィールドをクリックし、タグのキーと値を入力します。

  3. [追加] をクリックします。

    タグを追加

ランのタグを編集または削除する

既存のタグを編集または削除するには、[ アクション ] 列のアイコンを使用します。

タグアクション

ランのソフトウェア環境を再現する

ランの正確なソフトウェア環境を再現するには、[ ランの再現] をクリックします。 次のダイアログが表示されます。

ランダイアログの再現

デフォルト設定では、[ 確認]をクリックすると、次のようになります。

  • ノートブックは、ダイアログに表示される場所に複製されます。

  • 元のクラスターがまだ存在する場合は、複製されたノートブックが元のクラスターにアタッチされ、クラスターが開始されます。

  • 元のクラスターが存在しなくなった場合は、インストールされているライブラリーを含め、同じ構成の新しいクラスターが作成され、開始されます。 ノートブックが新しいクラスターにアタッチされます。

複製されたノートブックの別の場所を選択し、クラスター構成とインストールされているライブラリを調べることができます。

  • 複製されたノートブックを保存する別のフォルダーを選択するには、[ フォルダーの編集] をクリックします。

  • クラスター仕様を表示するには、[ 仕様の表示] をクリックします。 クラスターではなくノートブックのみを複製するには、このオプションをオフにします。

  • 元のクラスターにインストールされているライブラリを表示するには、[ ライブラリの表示] をクリックします。 元のクラスターと同じライブラリをインストールする必要がない場合は、このオプションをオフにします。

ランの管理

ラン名の変更

ランの名前を変更するには、ランページの右上隅をクリックし 3 つのボタン アイコン 、[ 名前の変更] を選択します。

ランのフィルタリング

パラメーターまたはメトリクス値に基づいてランを検索できます。 タグでランを検索することもできます。

  • パラメーターとメトリクス値を含む式に一致するランを検索するには、検索フィールドにクエリーを入力し、[ 検索] をクリックします。 クエリー構文の例をいくつか次に示します。

    metrics.r2 > 0.3

    params.elasticNetParam = 0.5

    params.elasticNetParam = 0.5 AND metrics.avg_areaUnderROC > 0.3

  • タグでランを検索するには、 tags.<key>="<value>"の形式でタグを入力します。 文字列値は、次に示すように引用符で囲む必要があります。

    tags.estimator_name="RandomForestRegressor"

    tags.color="blue" AND tags.size=5

    キーと値の両方にスペースを含めることができます。 キーにスペースが含まれている場合は、次に示すようにバッククォートで囲む必要があります。

    tags.`my custom tag` = "my value"
    

また、状態 (アクティブまたは削除済み) と、モデル バージョンがランに関連付けられているかどうかに基づいてランをフィルター処理することもできます。 これを行うには、[ 状態 ] ドロップダウン メニューと [ 作成時刻 ] ドロップダウン メニューからそれぞれ選択します。

ランのフィルタリング

ランのダウンロード

  1. 1 つ以上のランを選択します。

  2. [ CSV のダウンロード] をクリックします。 次のフィールドを含む CSV ファイルがダウンロードされます。

    Run ID,Name,Source Type,Source Name,User,Status,<parameter1>,<parameter2>,...,<metric1>,<metric2>,...
    

ランの削除

次のステップで Databricks Machine Learning UIを使用してランを削除できます。

  1. エクスペリメントで、ランの左側にあるチェックボックスをクリックして、1 つ以上のランを選択します。

  2. [削除] をクリックします。

  3. ランが親ランの場合は、子孫ランも削除するかどうかを決定します。 このオプションはデフォルトで選択されています。

  4. [ 削除 ] をクリックして確定します。 削除されたランは30日間保存されます。 削除されたランを表示するには、[状態] フィールドで [ 削除済み ] を選択します。

作成時刻に基づくランの一括削除

Pythonを使用して、UNIX タイムスタンプより前または UNIX タイムスタンプで作成された実験のランを一括削除できます。 Databricks Runtime 14.1 以降を使用すると、 mlflow.delete_runs API を呼び出してランを削除し、削除されたランの数を返すことができます。

mlflow.delete_runs問題は次のとおりです:

  • experiment_id: 削除するランを含むエクスペリメントの ID。

  • max_timestamp_millis: 削除ランの UNIX エポック以降の最大作成タイムスタンプ (ミリ秒単位)。 このタイムスタンプより前またはその時点で作成されたランのみが削除されます。

  • max_runs:オプション。 削除するランの最大数を示す正の整数。 max_runs の最大許容値は 10000 です。 指定しない場合、 max_runsデフォルトは 10000 です。

import mlflow

# Replace <experiment_id>, <max_timestamp_ms>, and <max_runs> with your values.
runs_deleted = mlflow.delete_runs(
  experiment_id=<experiment_id>,
  max_timestamp_millis=<max_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_deleted = mlflow.delete_runs(
  experiment_id="4183847697906956",
  max_timestamp_millis=1711990504000,
  max_runs=10
)

Databricks Runtime 13.3 LTS 以前を使用すると、Databricks ノートブックで次のクライアント コードを実行できます。

from typing import Optional

def delete_runs(experiment_id: str,
                max_timestamp_millis: int,
                max_runs: Optional[int] = None) -> int:
    """
    Bulk delete runs in an experiment that were created prior to or at the specified timestamp.
    Deletes at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to delete.
    :param max_timestamp_millis: The maximum creation timestamp in milliseconds
                                 since the UNIX epoch for deleting runs. Only runs
                                 created prior to or at this timestamp are deleted.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to delete. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs deleted.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request

    json_body = {"experiment_id": experiment_id, "max_timestamp_millis": max_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/delete-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_deleted"]

作成時刻に基づいてランを削除するためのパラメーターと戻り値の仕様については、Databricks エクスペリメント API のドキュメントを参照してください。

ランの復元

以前に削除したランは、 Databricks Machine Learning UIを使用して復元できます。

  1. エクスペリメント ページで、[状態] フィールドで [削除済み] を選択して、削除されたランを表示します。

  2. ランの左側にあるチェックボックスをクリックして、1 つ以上のランを選択します。

  3. [ 復元] をクリックします。

  4. [ 復元 ] をクリックして確定します。 復元されたランを表示するには、[状態] フィールドで [アクティブ ] を選択します。

削除時刻に基づくランの一括復元

Pythonを使用して、UNIX タイムスタンプ以降に削除されたエクスペリメントのランを一括復元することもできます。 Databricks Runtime 14.1 以降を使用すると、 mlflow.restore_runs API を呼び出してランを復元し、復元されたランの数を返すことができます。

mlflow.restore_runs問題は次のとおりです:

  • experiment_id: 復元するランを含むエクスペリメントの ID。

  • min_timestamp_millis: 復元ランの UNIX エポックからの最小削除タイムスタンプ (ミリ秒単位)。 このタイムスタンプ以降に削除されたランのみが復元されます。

  • max_runs:オプション。 復元するランの最大数を示す正の整数。 max_runs の最大許容値は 10000 です。 指定しない場合、max_runs のデフォルトは 10000 です。

import mlflow

# Replace <experiment_id>, <min_timestamp_ms>, and <max_runs> with your values.
runs_restored = mlflow.restore_runs(
  experiment_id=<experiment_id>,
  min_timestamp_millis=<min_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_restored = mlflow.restore_runs(
  experiment_id="4183847697906956",
  min_timestamp_millis=1711990504000,
  max_runs=10
)

Databricks Runtime 13.3 LTS 以前を使用すると、Databricks ノートブックで次のクライアント コードを実行できます。

from typing import Optional

def restore_runs(experiment_id: str,
                 min_timestamp_millis: int,
                 max_runs: Optional[int] = None) -> int:
    """
    Bulk restore runs in an experiment that were deleted at or after the specified timestamp.
    Restores at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to restore.
    :param min_timestamp_millis: The minimum deletion timestamp in milliseconds
                                 since the UNIX epoch for restoring runs. Only runs
                                 deleted at or after this timestamp are restored.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to restore. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs restored.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request
    json_body = {"experiment_id": experiment_id, "min_timestamp_millis": min_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/restore-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_restored"]

削除時間に基づいてランを復元するためのパラメーターと戻り値の仕様については、Databricks エクスペリメント API のドキュメントを参照してください。

ランの比較

単一のエクスペリメントまたは複数のエクスペリメントからのランを比較できます。 [ ランの比較] ページには、選択したランに関する情報がグラフィック形式と表形式で表示されます。 また、ラン結果の視覚化や、ラン情報、ランパラメーター、およびメトリクスのテーブルを作成することもできます。

ビジュアライゼーションを作成するには:

  1. プロットタイプ(平行座標プロット散布図、等 高線図)を選択します。

    1. 平行座標プロットの場合は、プロットするパラメーターとメトリクスを選択します。ここから、選択したパラメーターとメトリクスの関係を識別できるため、モデルのハイパーパラメーター調整スペースをより適切に定義できます。

      ランの比較ページの視覚化
    2. 散布図 または 等高線プロットの場合は、各軸に表示するパラメーターまたはメトリクスを選択します。

パラメーター とメトリクステーブルには、選択したすべてのランのランパラメーターと メトリクス が表示されます。これらのテーブルの列は、すぐ上の [ランの詳細 ] テーブルで識別されます。 わかりやすくするために、 を切り替えることで、選択したすべてのランで同一のパラメーターとメトリクスを 差分のみを表示ボタン非表示にすることができます。

ランページテーブルの比較

1 つのエクスペリメントのランの比較

  1. [エクスペリメント] ページで、ランの左側にあるチェック ボックスをオンにして 2 つ以上のランを選択するか、列の上部にあるチェックボックスをオンにしてすべてのランを選択します。

  2. [ 比較] をクリックします。 [ラン <N> の比較]画面が表示されます。

複数のエクスペリメントのランを比較する

  1. [エクスペリメント] ページで、エクスペリメント名の左側にあるボックスをクリックして、比較するエクスペリメントを選択します。

  2. [ 比較] (n) をクリックします (n は選択したエクスペリメントの数です)。 選択したエクスペリメントのすべてのランを示す画面が表示されます。

  3. ランの左側にあるチェックボックスをオンにして 2 つ以上のランを選択するか、列の上部にあるチェックボックスをオンにしてすべてのランを選択します。

  4. [ 比較] をクリックします。 [ラン <N> の比較]画面が表示されます。

ワークスペース間でのランのコピー

Databricks ワークスペースとの間で MLflow のランをインポートまたはエクスポートするには、コミュニティ主導の オープンソース プロジェクト MLflow エクスポート/インポートを使用できます。