使用 MLflow 追蹤 ML 實驗和模型

在本文中,您會了解如何使用 MLflow 來追蹤實驗,並在 Azure Machine Learning 工作區中執行。

追蹤是儲存您所執行實驗相關資訊的程序。 儲存的資訊 (中繼資料) 會根據您的專案而有所不同,而且可以包含:

  • 代碼
  • 環境詳細資料 (例如 OS 版本、Python 套件)
  • 輸入資料
  • 參陣設定
  • 模型
  • 評估計量
  • 評估視覺效果 (例如混淆矩陣、重要性圖表)
  • 評估結果 (包括一些評估預測)

當您在 Azure Machine Learning 中使用作業時,Azure Machine Learning 會自動追蹤有關實驗的一些資訊,例如程式碼、環境和輸入與輸出資料。 不過,對於模型、參數和計量等其他項目,模型建立器必須設定其追蹤,因為其專屬於特定案例。

注意

如果您想要追蹤在 Azure Databricks 上執行的實驗,請參閱使用 MLflow 和 Azure Machine Learning 追蹤 Azure Databricks ML 實驗。 若要深入了解追蹤在 Azure Synapse Analytics 上執行的實驗,請參閱使用 MLflow 和 Azure Machine Learning 追蹤 Azure Synapse Analytics ML 實驗

追蹤實驗的優點

強烈建議機器學習從業人員追蹤實驗,無論您是使用 Azure Machine Learning 中的作業進行定型,還是以互動方式在筆記本中定型。 實驗追蹤可讓您:

  • 將所有機器學習實驗組織在單一位置。 然後,您可以搜尋和篩選實驗並向下切入,以查看您之前執行的實驗詳細資料。
  • 比較實驗、分析結果,以及對模型定型進行偵錯,只要一些額外工作。
  • 重現或重新執行實驗以驗證結果。
  • 改善共同作業,因為您可以看到其他小組成員正在做什麼,共用實驗結果,以及以程式設計方式存取實驗資料。

為什麼要使用 MLflow 來追蹤實驗?

Azure Machine Learning 工作區與 MLflow 相容,這表示您可以使用 MLflow 來追蹤 Azure Machine Learning 工作區內的執行、計量、參數和成品。 使用 MLflow 進行追蹤的主要優點是,您不需要變更定型常式來使用 Azure Machine Learning,或插入任何雲端特定語法。

如需所有支援 MLflow 和 Azure Machine Learning 功能的詳細資訊,請參閱 MLflow 和 Azure Machine Learning

限制

連線到 Azure Machine Learning 時,MLflow API 中提供的某些方法可能無法使用。 如需支援和不支援作業的詳細資訊,請參閱查詢執行和實驗的支援矩陣

必要條件

  • 安裝 MLflow SDK 套件 mlflow 和適用於 MLflow 的 Azure Machine Learning 外掛程式azureml-mlflow

    pip install mlflow azureml-mlflow
    

    提示

    您可使用 mlflow-skinny 套件,這是輕量型 MLflow 套件,沒有 SQL 儲存體、伺服器、UI 或資料科學相依性。 如果使用者主要需要 MLflow 的追蹤和記錄功能,而不需匯入包含部署在內的完整功能套件,則建議使用 mlflow-skinny

  • Azure Machine Learning 工作區。 您可以遵循建立機器學習資源教學課程來建立一個工作區。

  • 如果您要執行遠端追蹤 (也就是追蹤在 Azure Machine Learning 外部執行的實驗),請將 MLflow 設定為指向 Azure Machine Learning 工作區的追蹤 URI。 如需如何將 MLflow 連線至工作區的詳細資訊,請參閱設定適用於 Azure Machine Learning 的 MLflow

設定實驗

MLflow 會在實驗和執行 (在 Azure Machine Learning 中,執行稱為作業) 中組織資訊。 根據預設,執行會記錄到為您自動建立的實驗,名為「預設」。 您可以設定進行追蹤的實驗。

如需互動式定型,例如在 Jupyter 筆記本中,請使用 MLflow 命令 mlflow.set_experiment()。 例如,下列程式碼片段會設定實驗:

experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)

設定執行

Azure Machine Learning 會追蹤 MLflow 稱為執行的任何定型作業。 使用執行來擷取作業執行的所有處理。

當您以互動方式工作時,MLflow 會在您嘗試記錄需要作用中執行的資訊時,立即開始追蹤您的定型常式。 例如,當您記錄計量、參數或啟動定型週期,並啟用 Mlflow 的自動記錄功能時,MLflow 追蹤就會啟動。 不過,特別是如果您想要在 [持續時間] 欄位中擷取實驗的總時間,明確啟動執行通常很有幫助。 若要明確啟動執行,請使用 mlflow.start_run()

無論您是否手動啟動執行,您最終都需要停止執行,讓 MLflow 知道您的實驗執行已完成,而且可以將執行的狀態標示為 [已完成]。 若要停止執行,請使用 mlflow.end_run()

我們強烈建議您手動啟動執行,如此一來,當您在筆記本中工作時,就不會忘記結束執行。

  • 若要手動啟動執行並在您於筆記本中完成工作時結束執行:

    mlflow.start_run()
    
    # Your code
    
    mlflow.end_run()
    
  • 使用內容管理員範例來協助您記住結束執行通常很有幫助:

    with mlflow.start_run() as run:
        # Your code
    
  • 當您使用 mlflow.start_run() 啟動新的執行時,指定 run_name 參數很有用,這稍後會轉譯為 Azure Machine Learning 使用者介面中的執行名稱,並協助您更快速地識別執行:

    with mlflow.start_run(run_name="hello-world-example") as run:
        # Your code
    

啟用 MLflow 自動記錄

您可以手動使用 MLflow 記錄計量、參數和檔案。 不過,您也可以依賴 MLflow 的自動記錄功能。 MLflow 支援的每個機器學習架構都會自動為您決定要追蹤的內容。

若要啟用自動記錄功能,請在您的定型程式碼前面插入下列程式碼:

mlflow.autolog()

在您的工作區中檢視計量和成品

您的工作區中會追蹤 MLflow 記錄中的計量和成品。 您可以隨時在工作室中檢視和存取它們,或透過 MLflow SDK 以程式設計方式存取它們。

若要在工作室中檢視計量和成品:

  1. 移至 Azure Machine Learning 工作室

  2. 瀏覽至您的工作區。

  3. 在工作區中依名稱尋找實驗。

  4. 選取記錄的計量,以轉譯右側的圖表。 您可以藉由套用平滑、變更色彩或繪製單一圖表上的多個計量來自訂圖表。 您也可以視需要調整大小並重新排列配置。

  5. 在已建立所需的檢視之後,儲存以供日後使用,並使用直接連結與小組成員共用。

    計量檢視的螢幕快照。

若要透過 MLflow SDK 以程式設計方式存取或查詢計量、參數和成品,請使用 mlflow.get_run()

import mlflow

run = mlflow.get_run("<RUN_ID>")

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

print(metrics, params, tags)

提示

針對計量,先前的範例程式碼只會傳回指定計量的最後一個值。 如果您想要擷取指定計量的所有值,請使用 mlflow.get_metric_history 方法。 如需擷取計量值的詳細資訊,請參閱從執行取得參數和計量

若要下載您記錄的成品,例如檔案和模型,請使用 mlflow.artifacts.download_artifacts()

mlflow.artifacts.download_artifacts(run_id="<RUN_ID>", artifact_path="helloworld.txt")

如需如何使用 MLflow 從實驗擷取或比較資訊並在 Azure Machine Learning 中執行的詳細資訊,請參閱使用 MLflow 查詢和比較實驗並執行