使用 MLflow 執行管理定型程式代碼
本文說明管理機器學習訓練的 MLflow 執行。 它也包含如何管理及比較跨 實驗執行的指引。
MLflow 執行 會對應至模型程式代碼的單一執行。 每個回合都會記錄下列資訊:
- 來源:啟動回合的筆記本名稱,或執行的專案名稱和進入點。
- 版本:如果筆記本儲存在 Databricks Git 資料夾中 ,或從 MLflow 專案執行,Git 認可哈希。 否則,筆記本修訂。
- 開始和結束時間:執行開始和結束時間。
- 參數:將模型參數儲存為索引鍵/值組。 索引鍵和值都是字串。
- 計量:模型評估計量儲存為索引鍵/值組。 值為數值。 每個計量都可以在整個執行過程中更新(例如,追蹤模型遺失函式的聚合方式),以及 MLflow 記錄,並可讓您將計量的歷程記錄可視化。
- 標籤:執行儲存為機碼/值組的元數據。 您可以在執行完成期間和之後更新標記。 索引鍵和值都是字串。
- 成品:以任何格式輸出檔案。 例如,您可以將影像、模型(例如挑選的 scikit-learn 模型)和數據檔(例如 Parquet 檔案)記錄為成品。
所有 MLflow 執行都會記錄到使用中的 實驗。 如果您尚未明確將實驗設定為使用中實驗,則會將執行記錄至筆記本實驗。
檢視執行
您可以從其父實驗頁面,或直接從建立執行的筆記本存取執行。
從實驗頁面的 [執行] 數據表中,按兩下回合的開始時間。
從筆記本中,按兩下 [實驗執行] 提要字段中執行的日期和時間旁。
執行 畫面 會顯示執行所使用的參數、執行所產生的計量,以及任何標記或附註。 若要顯示 此回合的 [附註]、 [參數]、 [計量] 或 [卷標 ],請按兩下 卷標的左側。
您也可以存取從此畫面中執行儲存的成品。
預測的代碼段
如果您從執行記錄模型,此模型會出現在 此頁面的 [成品 ] 區段中。 若要顯示說明如何載入和使用模型在Spark和 pandas DataFrame 上進行預測的代碼段,請按兩下模型名稱。
檢視用於執行的筆記本或 Git 專案
若要檢視 建立執行之筆記本 的版本:
- 在實驗頁面上,按兩下 [來源] 資料行中的連結。
- 在 [執行] 頁面上,按兩下 [來源] 旁的連結。
- 從筆記本的 [實驗執行] 提要字段中,按兩下 該實驗回合方塊中的筆記本 圖示 。
與執行相關聯的筆記本版本會出現在主視窗中,並顯示執行日期和時間的醒目提示列。
如果從 Git 專案遠端啟動執行,請按兩下 [Git 認可] 欄位中的連結,以開啟執行中使用的特定專案版本。 [來源] 欄位中的鏈接會開啟執行中所用 Git 專案的主要分支。
將標籤新增至執行
標籤是索引鍵/值組,您可以稍後建立並使用 來 搜尋執行。
在 [ 執行] 頁面中,如果尚未開啟,請按兩下 它。 標記數據表隨即出現。
按兩下 [ 名稱 ] 和 [值 ] 字段,然後輸入標記的索引鍵和值。
按一下新增。
編輯或刪除執行的標記
若要編輯或刪除現有的標記,請使用 [動作] 資料行中的圖示。
重現執行的軟體環境
您可以按下 [重現執行] 來重現執行中確切的軟體環境。 下列對話框隨即出現:
當您按下 [ 確認] 時,使用預設設定:
- 筆記本會複製到對話框中顯示的位置。
- 如果原始叢集仍然存在,則複製的筆記本會附加至原始叢集,並啟動叢集。
- 如果原始叢集已不存在,則會建立並啟動具有相同組態的新叢集,包括任何已安裝的連結庫。 筆記本會連結至新的叢集。
您可以選取複製筆記本的不同位置,並檢查叢集組態和已安裝的連結庫:
- 若要選取不同的資料夾來儲存複製的筆記本,請按兩下 [ 編輯資料夾]。
- 若要查看叢集規格,請按兩下 [ 檢視規格]。若要只複製筆記本而非叢集,請取消核取此選項。
- 若要查看原始叢集上安裝的連結庫,請按兩下 [ 檢視連結庫]。 如果您不在意在原始叢集上安裝與相同的連結庫,請取消核取此選項。
管理執行
重新命名執行
若要重新命名執行,請按下 執行頁面右上角的 ,然後選取 [ 重新命名]。
篩選執行
您可以根據參數或計量值來搜尋執行。 您也可以依標記搜尋執行。
若要搜尋符合包含參數和計量值的表達式的執行,請在搜尋欄位中輸入查詢,然後按兩下 [ 搜尋]。 一些查詢語法範例如下:
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"
您也可以根據其狀態篩選執行(作用中或已刪除),並根據模型版本是否與執行相關聯。 若要這樣做,請分別從 [狀態 ] 和 [建立時間] 下拉功能表進行選取。
下載執行
選取一或多個回合。
按兩下 [ 下載 CSV]。 包含下列欄位的 CSV 檔案會下載:
Run ID,Name,Source Type,Source Name,User,Status,<parameter1>,<parameter2>,...,<metric1>,<metric2>,...
刪除執行
您可以使用 Databricks 機器學習 UI 搭配下列步驟來移除執行:
- 在實驗中,按兩下執行左側的複選框,以選取一或多個回合。
- 按一下刪除。
- 如果執行是父執行,請決定是否也想要刪除子代執行。 預設會選取此選項。
- 按兩下 [ 刪除 ] 以確認。 已刪除的執行會儲存 30 天。 若要顯示已刪除的執行,請選取 [狀態] 欄位中的 [已刪除 ]。
根據建立時間執行大量刪除
您可以使用 Python 來大量刪除在 UNIX 時間戳之前或於 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 機器學習 UI 還原先前刪除的執行。
- 在 [實驗] 頁面上,選取 [狀態] 字段中的 [已刪除] 以顯示已刪除的執行。
- 按兩下執行左側的複選框,以選取一或多個執行。
- 按一下 [還原]。
- 按兩下 [ 還原] 以確認。 若要顯示還原的執行,請在 [狀態] 字段中選取 [ 作用 中]。
大量還原會根據刪除時間執行
您也可以使用 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 檔,以取得參數和傳回值規格,以 根據刪除時間還原執行。
比較執行
您可以從單一實驗或多個實驗比較執行。 [ 比較執行] 頁面會以圖形和表格式格式呈現所選回合的相關信息。 您也可以建立執行結果的視覺效果,以及執行資訊、執行參數和計量的數據表。
若要建立視覺效果:
- 選取繪圖類型(平行座標繪圖、散佈圖或分布圖)。
針對平行 座標繪圖,選取要繪製的參數和計量。 您可以從這裏識別所選參數和計量之間的關聯性,這可協助您更妥善地定義模型的超參數微調空間。
針對 [ 散佈圖 ] 或 [分布圖],選取要顯示在每個軸上的參數或計量。
[參數] 和 [計量] 數據表會顯示所有所選回合的執行參數和計量。 這些數據表中的數據行會由上述的 [執行詳細數據 ] 數據表識別。 為了簡單起見,您可以切換 來隱藏所有所選執行中完全相同的參數和計量。
比較單一實驗的執行
- 在 實驗頁面上,按兩下執行左邊的複選框,選取兩個或多個執行,或選取資料行頂端的方塊來選取所有執行。
- 按兩下 [ 比較]。 [比較
<N>
執行] 畫面隨即出現。
比較多個實驗的執行
- 在 實驗頁面上,按兩下實驗名稱左邊的方塊,選取您要比較的實驗。
- 按兩下 [比較] (n) (n 是您選取的實驗數目)。 隨即出現畫面,其中顯示您選取之實驗的所有回合。
- 按兩下執行左邊的複選框,選取兩個或多個執行,或選取資料行頂端的方塊來選取所有執行。
- 按兩下 [ 比較]。 [比較
<N>
執行] 畫面隨即出現。
在工作區之間複製執行
若要匯入或匯出 MLflow 執行至 Databricks 工作區或從您的 Databricks 工作區執行,您可以使用社群驅動 開放原始碼 專案 MLflow Export-Import。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應