共用方式為


使用 MLflow 執行管理訓練程式碼

本文說明了管理機器學習訓練的 MLflow 執行。 它也包含了如何管理及比較跨實驗執行的指引。

MLflow 執行對應於模型程式碼的單次執行。 每個執行都包含下列資訊:

  • 來源:啟動執行的筆記本名稱,或執行的專案名稱和進入點。
    • 版本:如果筆記本儲存在 Databricks Git 資料夾中,或從 MLflow 專案執行,則 Git 認可雜湊。 否則為筆記本修訂。
    • 開始和結束時間:執行的開始和結束時間。
    • 參數:將模型參數儲存為索引鍵/值組。 索引鍵和值都是字串。
    • 計量:執行儲存為索引鍵/值組的模型評估計畫。 值為數值。 每個計量都可在整個執行過程中更新 (例如,追蹤模型遺失函式的聚合方式),以及 MLflow 記錄,並可讓您將計量的歷程記錄視覺化。
    • 標籤:執行另存為索引鍵/值組的計量。 您可在執行完成期間和之後更新標記。 索引鍵和值都是字串。
    • 成品:以任何格式輸出檔案。 例如,您可將影像、模型 (例如挑選的 scikit-learn 模型)和資料檔 (例如 Parquet 檔案) 記錄為成品。

所有 MLflow 執行皆會記錄到作用中的實驗。 如果您尚未明確將實驗設定為作用中實驗,則會將執行記錄至筆記本實驗。

檢視執行

您可從其父實驗頁面,或直接從建立執行的筆記本存取執行。

從 [實驗] 頁面的 [執行] 資料表中,按下執行的開始時間。

從筆記本,在 [實驗執行] 側邊欄中,按一下執行日期旁邊的 外部連結 圖示。

[執行] 畫面會顯示執行所使用的參數、執行所產生的計量,以及任何標籤或附註。 若要顯示此執行的 [附註]、[參數]、[計量] 或 [標籤],請按下標籤左側的 向右箭號

您也可存取從此畫面的執行儲存的成品。

檢視執行

預測的程式碼片段

如果您從執行記錄模型,此模型會出現在此頁面的 [成品] 區段中。 若要顯示說明如何載入和使用模型的程式碼片段,以在 Spark 和 pandas DataFrame 上進行預測,請按下模型名稱。

預測程式碼片段

檢視用於執行的筆記本或 Git 專案

若要檢視建立執行的筆記本的版本

  • 在實驗頁面上,按下 [來源] 資料行中的連結。
  • 在 [執行] 頁面上,按下 [來源] 旁的連結。
  • 從筆記本的 [實驗執行] 側邊欄中,按下該實驗執行的方塊中的 [筆記本]筆記本版本圖示 圖示。

與執行相關聯的筆記本版本,以及顯示執行日期和時間的醒目提示列會出現在主視窗中。

如果從 Git 專案遠端啟動執行,請按下 [Git 認可] 欄位中的連結,以開啟執行中使用的特定專案版本。 [來源] 欄位中的連結會開啟執行中所用 Git 專案的主分支。

將標記新增至執行

標籤是索引鍵/值組,您可稍後建立和用來搜尋執行

  1. 如果尚未開啟,在 [執行] 頁面中,請按下 標記圖示。 標籤資料表會隨即出現。

    標記資料表

  2. 按一下 [名稱] 和 [值] 欄位,然後輸入標籤的索引鍵和值。

  3. 按一下新增

    新增標籤

編輯或刪除執行的標記

若要編輯或刪除現有的標籤,請使用 [動作] 資料行中的圖示。

標籤動作

重現執行的軟體環境

您可按下 [重現執行] 來重現執行中確切的軟體環境。 下列對話方塊隨即顯示:

重現執行對話方塊

當您按下 [確認] 時,使用預設設定:

  • 筆記本會被複製到對話方塊中顯示的位置。
  • 如果原始叢集仍然存在,則複製的筆記本會連結至原始叢集,並啟動叢集。
  • 如果原始叢集已不存在,則會建立並啟動具有相同組態的新叢集,包括任何已安裝的程式庫。 筆記本會連結至您所使用的最後一個叢集。

您可為複製的筆記本選取不同位置,並檢查叢集組態和已安裝的程式庫:

  • 若要選取不同的資料夾來儲存複製的筆記本,請按下 [編輯資料夾]
  • 若要查看叢集規格,請按下 [檢視規格]。若要只複製筆記本而非叢集,請取消選取此選項。
  • 若要查看原始叢集上安裝的程式庫,請按下 [檢視程式庫]。 如果您不在意安裝與原始叢集上相同的程式庫,請取消選取此選項。

管理執行

重新命名執行

若要重新命名執行,請按下執行頁面右上角的 三個按鈕圖示,然後選取 [重新命名]

篩選執行

您可根據參數或計量值來搜尋執行。 您也可依標記搜尋執行。

  • 若要搜尋符合包含參數和計量值的運算式的執行,請在搜尋欄位中輸入查詢,然後按下 [搜尋]。 一些查詢語法範例如下:

    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

    根據預設,會根據上次記錄的值篩選計量值。 使用 MINMAX 可讓您分別依照最小或最大計量值來搜尋執行。 只有在 2024 年 8 月之後記錄的執行才會有最小和最大計量值。

  • 若要依標記搜尋執行,請輸入以下格式的標籤:tags.<key>="<value>"。 字串值必須括在所示的引號中。

    tags.estimator_name="RandomForestRegressor"

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

    索引鍵和值都可包含空格。 如果索引鍵包含空格,您必須將其括在反引號中,如下所示。

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

您也可根據其狀態,以及根據模型版本是否與執行相關聯,篩選執行 (作用中或已刪除)。 為此,請分別從 [狀態] 和 [建立時間] 下拉式功能表進行選取。

篩選執行

下載執行

  1. 選取一或多個執行。

  2. 按下 [下載 CSV]。 會下載包含下列欄位的 CSV 檔案:

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

刪除執行

您可使用 Databricks Mosaic AI UI 搭配下列步驟來刪除執行:

  1. 在實驗中,按下執行左側的核取方塊,以選取一或多個執行。
  2. 按一下刪除
  3. 如果執行是父系執行,請決定是否也想要刪除子系執行。 預設會選取此選項。
  4. 按一下 [刪除] 以確認。 已刪除的執行會儲存 30 天。 若要顯示已刪除的執行,請選取 [狀態] 欄位中的 [已刪除]

根據建立時間執行大量刪除

您可使用 Python 來大量刪除在 UNIX 時間戳記之前或之上建立的實驗執行。 使用 Databricks Runtime 14.1 或更新版本,您可呼叫 mlflow.delete_runs API 來刪除執行,並傳回已刪除的執行數目。

以下是 mlflow.delete_runs 參數:

  • experiment_id:包含要刪除的執行的實驗的識別碼。
  • max_timestamp_millis:以毫秒為單位的建立時間戳記上限,自 UNIX Epoch 以來用於刪除執行。 只會刪除在此時間戳記之前或之上建立的執行。
  • 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 或更早版本,您可在 Azure Databricks Notebook 中執行下列用戶端程式碼。

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"]

如需根據建立時間刪除執行的參數和傳回值規格,請參閱 Azure Databricks 實驗 API 文件。

還原執行

您可使用 Databricks Mosaic AI UI 還原先前刪除的執行。

  1. 在 [實驗] 頁面上,選取 [狀態] 欄位中的 [已刪除] 以顯示已刪除的執行。
  2. 按下執行左側的核取方塊,以選取一或多個執行。
  3. 按一下 [還原]。
  4. 按下 [還原] 以確認。 若要顯示還原的執行,請在 [狀態] 欄位中選取 [作用中]

根據刪除時間執行大量還原

您也可使用 Python 來大量還原執行在 UNIX 時間戳記或之後刪除的實驗。 使用 Databricks Runtime 14.1 或更新版本,您可呼叫 mlflow.restore_runs API 來還原執行,並傳回還原的執行數目。

以下是 mlflow.restore_runs 參數:

  • experiment_id:包含要還原的執行的實驗的識別碼。
  • min_timestamp_millis:以毫秒為單位的刪除時間戳記下限,自 UNIX Epoch 以來用於還原執行。 只有在此時間戳記或之後刪除的執行才會還原。
  • 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 或更早版本,您可在 Azure Databricks Notebook 中執行下列用戶端程式碼。

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"]

如需根據刪除時間還原執行的參數和傳回值規格,請參閱 Azure Databricks 實驗 API 文件。

比較執行

您可從單一實驗或多個實驗比較執行。 [比較執行] 頁面會以圖形和表格式的格式呈現所選執行的相關資訊。 您也可建立執行結果的視覺效果,以及執行資訊、執行參數和計量的資料表。

建立視覺效果:

  1. 選取繪圖類型 ([平行座標圖]、[散佈圖] 或 [分佈圖])。
    1. 針對 [平行座標圖],選取要繪製的參數和計量。 從這裡,您可以找出所選參數和計量之間的關係,這有助於您更妥善地定義模型的超參數調整空間。

      比較執行頁面視覺效果

    2. 針對 [散佈圖] 或 [分佈圖],選取要顯示在每個軸上的參數或計量。

[參數] 和 [計量] 資料表會顯示所有所選執行的執行參數和計量。 這些資料表中的資料行會由上述的 [執行詳細資料] 資料表識別。 為了簡約起見,您可切換 僅顯示差異按鈕 來隱藏全部所選執行中完全相同的參數和計量。

比較執行頁面資料表

比較單一實驗的執行

  1. 在 [實驗] 頁面上,按下執行左側的核取方塊,選取兩個或多個執行,或核取資料行頂端的方塊來選取所有執行。
  2. 按一下 [比較]。 [比較 <N> 執行] 畫面隨即出現。

比較多個實驗的執行

  1. 在 [實驗] 頁面上,按下實驗名稱左側的方塊,選取您要比較的實驗。
  2. 按下 [比較 (n) (n] 是您選取的實驗數目)。 隨即出現畫面,其中顯示您選取的實驗的所有執行。
  3. 按下執行左側的核取方塊,選取兩個或多個執行,或核取資料行頂端的方塊來選取所有執行。
  4. 按一下 [比較]。 [比較 <N> 執行] 畫面隨即出現。

在工作區之間複製執行

若要透過 Databricks 工作區匯入或匯出 MLflow 執行,您可使用社群導向的開放原始碼專案 MLflow Export-Import