MLflow の実行でトレーニング結果を表示する
この記事では、 MLflow 実行を使用してモデル トレーニング エクスペリメントの結果を表示および分析する方法と、実行を管理および整理する方法について説明します。 MLflow エクスペリメントの詳細については、「MLflow エクスペリメントを使用してトレーニング実行を整理する」を参照してください。
MLflow の実行 は、モデル コードの 1 回の実行に対応します。 各実行には、実行を開始したノートブック、実行によって作成されたモデル、キーと値のペアとして保存されたモデル パラメーターとメトリクス、実行メタデータのタグ、実行によって作成されたアーティファクトまたは出力ファイルなどの情報が記録されます。
すべての MLflow のランは、 アクティブなエクスペリメントに記録されます。 エクスペリメントをアクティブなエクスペリメントとして明示的に設定していない場合、ランはノートブックのエクスペリメントに記録されます。
実行の詳細の表示
実行には、エクスペリメントの詳細ページからアクセスするか、実行を作成したノートブックから直接アクセスできます。
エクスペリメントの詳細ページで、実行テーブルの実行名をクリックします。
ノートブックから、エクスペリメント 実行 サイドバーで実行名をクリックします。
実行画面には、実行に使用されたパラメーター、実行の結果として得られるメトリクス、およびソース ノートブックへのリンクを含む実行の詳細が表示されます。実行から保存されたアーティファクトは、[ アーティファクト ] タブで使用できます。
予測用のコード スニペット
実行からモデルをログに記録すると、 モデルはアーティファクト タブに表示され、モデルを読み込んで使用し、 Spark と Pandas DataFramesで予測を行う方法を示すコード スニペットと共に表示されます。
実行に使用したノートブックを表示する
ランを作成した ノートブックのバージョン を表示するには:
エクスペリメントの詳細ページで、[ ソース ] 列のリンクをクリックします。
ランページで、[ ソース] の横にあるリンクをクリックします。
ノートブックの [エクスペリメントのラン] サイドバーで、そのエクスペリメントのランのボックスにある [ノートブック ] アイコン をクリックします。
ランに関連付けられているノートブックのバージョンがメイン ウィンドウに表示され、ランの日時を示す強調表示バーが表示されます。
ランにタグを追加する
タグは、作成して後で ランを検索するために使用できるキーと値のペアです。
実行ページの 「詳細 」表で、「 タグ」 の横にある 「追加 」をクリックします。
[タグの追加/編集] ダイアログが開きます。 [ キー ] フィールドにキーの名前を入力し、[ タグの追加] をクリックします。
[値] フィールドに、タグの値を入力します。
プラス記号をクリックして、入力したキーと値のペアを保存します。
タグを追加するには、手順 2 から 4 を繰り返します。
完了したら、[ タグの保存] をクリックします。
ランのタグを編集または削除する
実行ページの[詳細] テーブルで、をクリックします。 鉛筆アイコン。を既存のタグの横に貼り付けます。
[タグの追加/編集] ダイアログが開きます。
タグを削除するには、そのタグの [X] をクリックします。
タグを編集するには、ドロップダウンメニューからキーを選択し、[ 値 ]フィールドの値を編集します。 プラス記号をクリックして、変更を保存します。
完了したら、[ タグの保存] をクリックします。
ランのソフトウェア環境を再現する
実行ページの右上にある 「実行の再現 」をクリックすると、実行の正確なソフトウェア環境を再現できます。 次のダイアログが表示されます。
デフォルト設定では、[ 確認]をクリックすると、次のようになります。
ノートブックは、ダイアログに表示される場所に複製されます。
元のクラスターがまだ存在する場合は、複製されたノートブックが元のクラスターにアタッチされ、クラスターが開始されます。
元のクラスターが存在しなくなった場合は、インストールされているライブラリーを含め、同じ構成の新しいクラスターが作成され、開始されます。 ノートブックが新しいクラスターにアタッチされます。
複製されたノートブックの別の場所を選択し、クラスター構成とインストールされているライブラリを調べることができます。
複製されたノートブックを保存する別のフォルダーを選択するには、[ フォルダーの編集] をクリックします。
クラスター仕様を表示するには、[ 仕様の表示] をクリックします。 クラスターではなくノートブックのみを複製するには、このオプションをオフにします。
元のクラスタリングが存在しなくなった場合は、[ ライブラリの表示] をクリックすると、元のクラスタリングにインストールされているライブラリを確認できます。 元のクラスタリングがまだ存在する場合、このセクションはグレー表示されます。
ランのフィルタリング
エクスペリメントの詳細ページのテーブルで、パラメーターまたはメトリクスの値に基づいて実行を検索できます。 タグで実行を検索することもできます。
パラメーター値とメトリクス値を含む式に一致する実行を検索するには、検索フィールドにクエリを入力して Enter キーを押します。 クエリ構文の例を次に示します。
metrics.r2 > 0.3
params.elasticNetParam = 0.5
params.elasticNetParam = 0.5 AND metrics.avg_areaUnderROC > 0.3
MIN(metrics.rmse) <= 1
MAX(metrics.memUsage) > 0.9
LATEST(metrics.memUsage) = 0 AND MIN(metrics.rmse) <= 1
デフォルトでは、メトリクス値は最後にログされた値に基づいてフィルタリングされます。
MIN
またはMAX
を使用すると、それぞれメトリクスの最小値または最大値に基づいて実行を検索できます。2024 年 8 月以降にログ記録された実行のみ、最小値と最大値があります。タグでランを検索するには、
tags.<key>="<value>"
の形式でタグを入力します。 文字列値は、次に示すように引用符で囲む必要があります。tags.estimator_name="RandomForestRegressor"
tags.color="blue" AND tags.size=5
キーと値の両方にスペースを含めることができます。 キーにスペースが含まれている場合は、次に示すようにバッククォートで囲む必要があります。
tags.`my custom tag` = "my value"
また、状態 (アクティブまたは削除済み)、実行が作成された日時、使用されたデータセットに基づいて実行をフィルタリングすることもできます。 これを行うには、 作成された時間、 状態、または データセット のドロップダウンメニューからそれぞれ選択します。
ランのダウンロード
エクスペリメントの詳細ページから、以下の手順で実行をダウンロードできます。
をクリックしてケバブメニューを開きます。
表示されているすべての実行 (最大 100 個) を含む CSV 形式でファイルをダウンロードするには、[
<n>
実行のダウンロード] を選択します。MLflow では、1 行に 1 回の実行を含むファイルが作成され、ダウンロードされます。これには、実行ごとに次のフィールドが含まれます。Start Time, Duration, Run ID, Name, Source Type, Source Name, User, Status, <parameter1>, <parameter2>, ..., <metric1>, <metric2>, ...
100 を超える実行をダウンロードする場合、またはプログラムによって実行をダウンロードする場合は、[ すべての実行をダウンロード] を選択します。 ダイアログが開き、コピーしたりノートブックで開いたりできるコード スニペットが表示されます。 ノートブックのセルでこのコードを実行した後、セル出力から [Download all rows from the cell output] を選択します。
ランの削除
エクスペリメントの詳細ページから実行を削除するには、次の手順に従います。
エクスペリメントで、ランの左側にあるチェックボックスをクリックして、1 つ以上のランを選択します。
[削除] をクリックします。
ランが親ランの場合は、子孫ランも削除するかどうかを決定します。 このオプションはデフォルトで選択されています。
[ 削除 ] をクリックして確定します。 削除されたランは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 ドキュメントを参照してください。
ランの復元
以前に削除した実行は、次のように UI から復元できます。
エクスペリメント ページの 状態 フィールドで、削除済み を選択して、削除された実行を表示します。
ランの左側にあるチェックボックスをクリックして、1 つ以上のランを選択します。
[ 復元] をクリックします。
[復元] をクリックして確定します。復元された実行は、[状態] フィールドで [アクティブ ] を選択すると表示されます。
削除時刻に基づくランの一括復元
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 つのエクスペリメントのランの比較
エクスペリメントの詳細ページで、実行の左側にあるチェックボックスをクリックして 2 つ以上の実行を選択するか、列の上部にあるチェックボックスをオンにしてすべての実行を選択します。
[ 比較] をクリックします。 [ラン
<N>
の比較]画面が表示されます。
複数のエクスペリメントのランを比較する
[エクスペリメント] ページで、エクスペリメント名の左側にあるボックスをクリックして、比較するエクスペリメントを選択します。
[ 比較] (n) をクリックします (n は選択したエクスペリメントの数です)。 選択したエクスペリメントのすべてのランを示す画面が表示されます。
ランの左側にあるチェックボックスをオンにして 2 つ以上のランを選択するか、列の上部にあるチェックボックスをオンにしてすべてのランを選択します。
[ 比較] をクリックします。 [ラン
<N>
の比較]画面が表示されます。
ワークスペース間でのランのコピー
Databricks ワークスペースとの間で MLflow のランをインポートまたはエクスポートするには、コミュニティ主導の オープンソース プロジェクト MLflow エクスポート/インポートを使用できます。