使用 MLflow 追蹤模型開發
MLflow 追蹤可讓您記錄與訓練機器學習或深度學習模型相關的筆記本、訓練數據集、參數、指標、標籤和相關的工件。 如需開始使用 MLflow 的範例筆記本,請參閱 教學課程:Azure Databricks 上的端對端 ML 模型。
使用實驗和執行追蹤 MLflow
模型開發過程是循環反覆的,在開發和優化模型時,追蹤您的工作可能會很困難。 在 Azure Databricks 中,您可以使用 MLflow 追蹤 來協助您追蹤模型開發程式,包括您嘗試的參數設定或組合,以及它們如何影響模型的效能。
MLflow 追蹤會使用 實驗, 和 執行 來記錄和追蹤您的 ML 和深度學習模型開發。 一個運行代表模型程式代碼的單次執行。 在 MLflow 執行期間,您可以記錄模型參數和結果。 實驗是相關試次的集合。 在實驗中,您可以比較和篩選回合,以瞭解模型的執行方式,以及其效能如何取決於參數設定、輸入數據等等。
注意
從 2024 年 3 月 27 日開始,MLflow 會對所有現有和新回合的總參數、標記和計量步驟數目加上配額限制,以及所有現有和新實驗的總執行次數,請參閱 資源限制。 如果您達到每個實驗的執行配額,Databricks 建議您使用 Python 中的刪除執行 API 刪除不再需要的執行。 如果您達到其他配額限制,Databricks 建議調整記錄策略以維持在限制之下。 如果您需要增加此限制,請連絡您的 Databricks 帳戶小組,並簡短說明您的使用案例、建議的風險降低方法為何無法運作,以及您要求的新限制。
MLflow 追蹤 API
MLflow 追蹤 API 從模型執行記錄參數、計量、標記和成品。 追蹤 API 與 MLflow 追蹤伺服器通訊。 當您使用 Databricks 時,由 Databricks 託管的追蹤伺服器會記錄資料。 託管的 MLflow 追蹤伺服器有 Python、Java 和 R API。
MLflow 已預安裝在 Databricks Runtime ML 叢集上。 若要在 Databricks Runtime 叢集上使用 MLflow,您必須安裝 mlflow
函式庫。 如需將函式庫安裝至叢集的指示,請參閱在叢集中安裝函式庫。
記錄 MLflow 執行的位置
所有 MLflow 運行都會記錄到目前的實驗,您可以使用下列任何方式來設定:
- 使用 mlflow.set_experiment() 命令。
- 在
experiment_id
中使用 參數。 - MLFLOW_EXPERIMENT_NAME 或MLFLOW_EXPERIMENT_ID設定其中一個 MLflow 環境變數。
如果未設定使用中實驗,則會將執行記錄到 Notebook 實驗。
若要將實驗結果記錄至您執行實驗的工作區以外的遠端裝載 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
)。 接下來,您可以設定追蹤 URI 以使用 mlflow.set_tracking_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 可以自動記錄以許多機器學習和深度學習框架撰寫的訓練代碼。 這是開始使用 MLflow 追蹤的最簡單方式。 請參閱 範例筆記本。
若要進一步控制記錄哪些參數和計量,或記錄其他成品,例如 CSV 檔案或繪圖,請使用 MLflow 記錄 API。 請參閱 範例筆記本。
使用自動記錄來追蹤模型開發
此範例筆記本示範如何與 scikit-learn 一起使用自動記錄功能。 如需關於其他 Python 庫的自動記錄功能的信息,請參閱 MLflow 自動記錄功能文件。
MLflow 自動記錄 Python 筆記本
使用記錄 API 來追蹤模型開發
此範例筆記本示範如何使用 Python 記錄 API。 MLflow 也 REST、R 和 Java API。
MLflow 記錄 API Python 筆記本
記錄執行至工作區實驗
根據預設,當您在 Databricks 筆記本中訓練模型時,執行過程會被記錄至筆記本的實驗記錄。 只有在筆記本中啟動的 MLflow 執行才能記錄到筆記本實驗中。
從任何筆記本或 API 啟動的 MLflow 執行,都可以記錄到工作區實驗中。 若要記錄執行結果至工作區實驗,請在筆記本或 API 呼叫中使用類似以下的程式碼:
experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)
如需建立工作區實驗的指示,請參閱 建立工作區實驗。 如需檢視記錄執行的資訊,請參閱檢視筆記本實驗和檢視工作區實驗。
從 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 追蹤模型開發。