使用 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 中提供的某些方法可能無法使用。 如需支援和不支援作業的詳細資訊,請參閱查詢執行和實驗的支援矩陣。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。 試用免費或付費版本的 Azure Machine Learning。
安裝 MLflow SDK 套件
mlflow
和適用於 MLflow 的 Azure Machine Learningazureml-mlflow
外掛程式:pip install mlflow azureml-mlflow
提示
您可使用
mlflow-skinny
套件,這是輕量型 MLflow 套件,沒有 SQL 儲存體、伺服器、UI 或資料科學相依性。 如果使用者主要需要 MLflow 的追蹤和記錄功能,而不需匯入包含部署在內的完整功能套件,則建議使用mlflow-skinny
。Azure Machine Learning 工作區。 若要建立工作區,請參閱 建立機器學習資源教學課程。 檢閱您在工作區中執行 MLflow 作業所需的存取權限。
如果您要執行遠端追蹤 (也就是追蹤在 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 以程式設計方式存取它們。
若要在工作室中檢視計量和成品:
瀏覽至您的工作區。
在工作區中依名稱尋找實驗。
選取記錄的計量,以轉譯右側的圖表。 您可以藉由套用平滑、變更色彩或繪製單一圖表上的多個計量來自訂圖表。 您也可以視需要調整大小並重新排列配置。
在已建立所需的檢視之後,儲存以供日後使用,並使用直接連結與小組成員共用。
若要透過 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 查詢和比較實驗並執行。