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 エクスポート/インポートを使用できます。