追蹤 ML 和深度學習訓練執行
MLflow 追蹤元件可讓您記錄來源屬性、參數、計量、標籤,以及與訓練機器學習或深度學習模型相關的成品。 若要開始使用 MLflow,請嘗試其中一個 MLflow 快速入門教學課程。
使用實驗和執行追蹤 MLflow
MLflow 追蹤是以兩個概念為基礎:實驗和執行:
注意
從 2024 年 3 月 27 日起,MLflow 會對所有現有和新執行的總參數、標籤和計量步驟數目,以及所有現有和新實驗的總執行次數加上配額限制,請參閱資源限制。 如果您達到每個實驗的執行配額,Databricks 建議您使用 Python 中的刪除執行 API 刪除不再需要的執行。 如果您達到其他配額限制,Databricks 建議您調整記錄策略以維持在限制之下。 如果您需要增加此限制,請聯絡您的 Databricks 帳戶團隊,並簡單解釋您的使用案例、建議的風險降低方法無法奏效的原因,以及您要求的新限制。
MLflow 實驗是 MLflow 執行的組織主要單位和存取控制單位;所有 MLflow 執行都屬於一個實驗。 實驗讓您視覺化、搜尋和比較執行,以及下載執行成品和中繼資料,以便在其他工具中分析。
MLflow 執行對應於模型程式碼的單次執行。
MLflow 訓練 API 會記錄模型執行的參數、計量、標籤和成品。 追蹤 API 與 MLflow 追蹤伺服器通訊。 當您使用 Databricks 時,由 Databricks 託管的追蹤伺服器會記錄資料。 託管的 MLflow 追蹤伺服器有 Python、Java 和 R API。
注意
MLflow 安裝在 Databricks Runtime ML 叢集上。 若要在 Databricks Runtime 叢集上使用 MLflow,您必須安裝 mlflow
函式庫。 如需將函式庫安裝至叢集的指示,請參閱在叢集中安裝函式庫。 若要為 MLflow 安裝的特定套件有:
- 針對 Python,請選取 Library Source PyPI 並在套件欄位中輸入
mlflow
。 - 針對 R,請選取 Library Source CRAN,並在套件欄位中輸入
mlflow
。 - 針對 Scala,請安裝這兩個套件:
- 選取 Library Source Maven,然後在座標欄位輸入
org.mlflow:mlflow-client:1.11.0
。 - 選取 Library Source PyPI 並在套件欄位中輸入
mlflow
。
- 選取 Library Source Maven,然後在座標欄位輸入
記錄 MLflow 執行的位置
所有 MLflow 執行都會記錄到作用中的實驗,可以使用下列任何一種方式設定:
- 使用 mlflow.set_experiment() 命令。
- 在 mlflow.start_run() 命令中使用
experiment_id
參數。 - 設定其中一個 MLflow 環境變數 MLFLOW_EXPERIMENT_NAME 或 MLFLOW_EXPERIMENT_ID。
如果沒有設定作用中的實驗,則執行記錄會記錄到筆記本實驗中。
若要將實驗結果記錄到執行實驗的工作區以外的遠端託管 MLflow 追蹤伺服器,請設定追蹤 URI 以 mlflow.set_tracking_uri()
參照遠端工作區,並透過 mlflow.set_experiment()
設定您在遠端工作區的實驗路徑。
mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")
如果您在本機執行實驗,並希望將實驗結果記錄到 Databricks MLflow 追蹤伺服器,請提供您的 Databricks 工作區執行個體 (DATABRICKS_HOST
) 和 Databricks 個人存取權杖 (DATABRICKS_TOKEN
)。 接下來,您可以使用 mlflow.set_tracking_uri()
設定追蹤 URI 來參照工作區,並使用 mlflow.set_experiment()
設定實驗的路徑。 如需在哪裡找到 DATABRICKS_HOST
和 DATABRICKS_TOKEN
環境變數值的詳細資料,請參閱執行 Azure Databricks 個人存取權杖驗證。
以下程式碼範例展示設定這些值:
os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")
記錄範例筆記本
本筆記本顯示如何將執行記錄至筆記本實驗和工作區實驗。 只有在筆記本中啟動的 MLflow 執行才能記錄到筆記本實驗中。 從任何筆記本或 API 啟動的 MLflow 執行,都可以記錄到工作區實驗中。 如需檢視記錄執行的資訊,請參閱檢視筆記本實驗和檢視工作區實驗。
記錄 MLflow 執行筆記本
您可以使用 MLflow Python、Java 或 Scala 以及 R API 來開始執行並記錄執行資料。 如需詳細資料,請參閱 MLflow 範例筆記本。
從 Azure Databricks 外部存取 MLflow 追蹤伺服器
您也可以從 Azure Databricks 外部寫入或讀取追蹤伺服器,例如使用 MLflow CLI。 請參閱從 Azure Databricks 外部存取 MLflow 追蹤伺服器。
以程式設計方式分析 MLflow 執行
您可以使用下列兩個 DataFrame API,以程式設計方式存取 MLflow 執行資料:
- MLflow Python 用戶端 search_runs API 會傳回 Pandas DataFrame。
- MLflow 實驗資料來源會傳回 Apache Spark DataFrame。
本範例展示如何使用 MLflow Python 用戶端組建一個儀表板,可將評估計量隨時間的變化、追蹤特定使用者開始執行的次數,以及測量所有使用者的總執行次數均視覺化:
為什麼模型訓練計量和輸出可能會有所不同
ML 中使用的許多演算法都有隨機元素,例如演算法本身內的取樣或隨機初始條件。 當您使用這些演算法之一訓練模型時,即使您以相同的條件開始執行,每次執行的結果也可能不一樣。 許多函式庫提供種子機制來修正這些推測元素的初始條件。 然而,可能有其他變化來源不受種子控制。 有些演算法對資料的順序很敏感,分散式 ML 演算法也可能受到資料分割方式的影響。 一般而言,這種變化並不顯著,在模型開發流程中也不重要。
若要控制由於排序和分割的差異所造成的變異,請使用 PySpark 函式再分配和 sortWithinPartitions。
MLflow 追蹤範例
以下筆記本展示如何在 MLflow 中訓練幾種類型的模型和追蹤訓練資料,以及如何在 Delta Lake 中儲存追蹤資料。