使用 MLflow 和 Azure Machine Learning 來追蹤 ML 模型
適用於: Python SDK azureml v1 (部分機器翻譯)
在本文中,了解如何啟用 MLflow 追蹤,以連線 Azure Machine Learning 做為 MLflow 實驗的後端。
MLflow 是一個開放原始碼程式庫,可用於管理機器學習實驗的生命週期。 MLflow 追蹤是 MLflow 的元件,不論您的實驗環境是在本機電腦、遠端計算目標、虛擬機器或 Azure Databricks 叢集上,此元件都能記錄及追蹤您的定型執行計量和模型成品。
如需了解所有支援的 MLflow 和 Azure Machine Learning 功能,包括 MLflow Project 支援 (預覽版) 和模型部署,請參閱 MLflow 和 Azure Machine Learning。
提示
如果您想要追蹤在 Azure Databricks 或 Azure Synapse Analytics 上執行的實驗,請參閱文章使用 MLflow 和 Azure Machine Learning 追蹤 Azure Databricks ML 實驗或使用 MLflow 和 Azure Machine Learning 追蹤 Azure Synapse Analytics ML 實驗。
注意
本文件中的資訊主要適用於想要監視模型定型程序的資料科學家和開發人員。 如果您是系統管理員,且想要從 Azure Machine Learning 監視資源使用量和事件 (例如配額、已完成的定型作業或已完成的模型部署),請參閱監視 Azure Machine Learning。
必要條件
安裝
mlflow
套件。- 您可以使用 MLflow Skinny,這是輕量型 MLflow 套件,沒有 SQL 儲存體、伺服器、UI 或資料科學相依性。 如果使用者主要需要追蹤和記錄功能,而不需要匯入包含部署在內的完整 MLflow 功能套件,則建議使用此選項。
安裝
azureml-mlflow
套件。安裝並設定 Azure Machine Learning CLI (v1),並確定您已安裝 ml 擴充功能。
重要
本文中的 Azure CLI 命令使用
azure-cli-ml
或 v1 (Azure Machine Learning 的擴充功能)。 v1 擴充功能的支援將於 2025 年 9 月 30 日終止。 您將能安裝並使用 v1 擴充功能,直到該日期為止。建議您在 2025 年 9 月 30 日之前轉換至
ml
或 v2 擴充功能。 如需有關 v2 擴充功能的詳細資訊,請參閱 Azure ML CLI 擴充功能和 Python SDK v2。
從本機電腦或遠端計算追蹤執行
搭配 Azure Machine Learning 使用 MLflow 追蹤可讓您將在本機電腦上執行的記錄計量和成品儲存至 Azure Machine Learning 工作區。
設定追蹤環境
若要追蹤目前未在 Azure Machine Learning 計算上執行的執行 (下文中稱為「本機計算」),您必須將本機計算指向 Azure Machine Learning MLflow 追蹤 URI。
注意
在 Azure 計算服務 (Azure Notebooks、裝載於 Azure 計算執行個體或計算叢集上的 Jupyter Notebook) 上執行時,您不需要設定追蹤 URI。 系統會自動為您設定。
適用於: Python SDK azureml v1 (部分機器翻譯)
您可以使用適用於 Python 的 Azure Machine Learning SDK v1 來取得 Azure Machine Learning MLflow 追蹤 URI。 確保您正在使用的叢集中已安裝程式庫 azureml-sdk
。 下列範例會取得與您工作區建立關聯的唯一 MLFLow 追蹤 URI。 然後,此方法 set_tracking_uri()
會將 MLflow 追蹤 URI 指向該 URI。
使用工作區設定檔:
from azureml.core import Workspace import mlflow ws = Workspace.from_config() mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
提示
您可以透過下列方式下載工作區設定檔:
- 瀏覽至 Azure Machine Learning 工作室
- 按一下頁面右上角 - >下載設定檔。
- 將檔案
config.json
儲存在您正在使用的相同目錄中。
使用訂用帳戶識別碼、資源群組名稱和工作區名稱:
from azureml.core import Workspace import mlflow #Enter details of your Azure Machine Learning workspace subscription_id = '<SUBSCRIPTION_ID>' resource_group = '<RESOURCE_GROUP>' workspace_name = '<AZUREML_WORKSPACE_NAME>' ws = Workspace.get(name=workspace_name, subscription_id=subscription_id, resource_group=resource_group) mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
設定實驗名稱
所有 MLflow 執行皆會記錄到使用中的實驗。 根據預設,執行會記錄到為您自動建立的實驗,名為 Default
。 若要設定您想要處理的實驗,請使用 MLflow 命令 mlflow.set_experiment()
。
experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)
提示
使用 Azure Machine Learning SDK 提交作業時,您可以在提交時使用 experiment_name
屬性設定實驗名稱。 您不必在定型指令碼上設定。
開始定型執行
設定 MLflow 實驗名稱之後,您可以透過 start_run()
開始進行定型執行。 然後,使用 log_metric()
來啟用 MLflow 記錄 API,並開始記錄您的訓練執行計量。
import os
from random import random
with mlflow.start_run() as mlflow_run:
mlflow.log_param("hello_param", "world")
mlflow.log_metric("hello_metric", random())
os.system(f"echo 'hello world' > helloworld.txt")
mlflow.log_artifact("helloworld.txt")
如需了解如何使用 MLflow 在執行中記錄計量、參數和成品的詳細資料,請參閱如何記錄和檢視計量。
追蹤在 Azure Machine Learning 上的執行
適用於: Python SDK azureml v1 (部分機器翻譯)
遠端執行 (作業) 可讓您以更強固的重複方式將模型定型。 這些作業也可以利用更強大的計算,例如 Machine Learning 計算叢集。 請參閱為模型定型使用計算目標,以了解不同的計算選項。
提交執行時,Azure Machine Learning 會自動設定 MLflow 來處理執行所在的工作區。 這表示不需要設定 MLflow 追蹤 URI。 除此之外,實驗會根據實驗提交的詳細資料自動命名。
重要
將定型作業提交至 Azure Machine Learning 時,您不需要在定型邏輯上設定 MLflow 追蹤 URI,因為系統已為您設定。 您不需要在訓練常式中設定實驗名稱。
建立訓練常式
首先,您應該建立 src
子目錄,並在 src
子目錄中的 train.py
檔案中,使用您的定型指令碼來建立檔案。 您的所有訓練程式碼都會進入 src
子目錄,包括 train.py
。
定型程式碼取自於 Azure Machine Learning 範例存放庫中的 MLflow 範例。
將此程式碼複製到檔案:
# imports
import os
import mlflow
from random import random
# define functions
def main():
mlflow.log_param("hello_param", "world")
mlflow.log_metric("hello_metric", random())
os.system(f"echo 'hello world' > helloworld.txt")
mlflow.log_artifact("helloworld.txt")
# run functions
if __name__ == "__main__":
# run main function
main()
設定實驗
您必須使用 Python 將實驗提交至 Azure Machine Learning。 在筆記本或 Python 檔案中,使用 Environment
類別來設定您的計算和定型執行環境。
from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies
env = Environment(name="mlflow-env")
# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
conda_packages=["scikit-learn", "matplotlib"],
pip_packages=["azureml-mlflow", "pandas", "numpy"]
)
env.python.conda_dependencies = cd
然後以您的遠端計算作為計算目標來建立 ScriptRunConfig
。
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory="src",
script=training_script,
compute_target="<COMPUTE_NAME>",
environment=env)
透過此計算和訓練回合組態,使用 Experiment.submit()
方法來提交執行。 此方法會自動設定 MLflow 追蹤 URI,並將記錄從 MLflow 導向您的工作區。
from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()
experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)
run = exp.submit(src)
在您的工作區中檢視計量和成品
您的工作區中會追蹤 MLflow 記錄中的計量和成品。 若要隨時查看,請瀏覽至您的工作區,然後在 Azure Machine Learning Studio 工作區中,以名稱尋找實驗。 或執行下列程式碼。
使用 MLflow get_run() 來擷取執行計量。
from mlflow.tracking import MlflowClient
# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)
metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params
print(metrics,tags,params)
若要檢視執行的成品,您可以使用 MlFlowClient.list_artifacts()
client.list_artifacts(run_id)
若要將成品下載至目前目錄,您可以使用 MLFlowClient.download_artifacts()
client.download_artifacts(run_id, "helloworld.txt", ".")
如需了解如何使用 MLflow 在 Azure Machine Learning 中從實踐擷取資訊並執行的詳細資訊,請參閱管理實驗並使用 MLflow 執行。
比較和查詢
使用下列程式碼,在您的 Azure Machine Learning 工作區中比較和查詢所有 MLflow 執行。 深入了解如何使用 MLflow 查詢執行。
from mlflow.entities import ViewType
all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)
runs.head(10)
自動記錄
透過 Azure Machine Learning 與 MLFlow,使用者可以在將模型定型時自動記錄計量、模型參數與模型成品。 支援各種熱門的機器學習程式庫。
若要啟用自動記錄功能,請在您的定型程式碼前面插入下列程式碼:
mlflow.autolog()
管理模型
使用支援 MLflow 模型登錄的 Azure Machine Learning 模型登錄來註冊並追蹤您的模型。 Azure Machine Learning 模型會與 MLflow 模型結構描述一致,讓您輕鬆地在不同的工作流程中匯出和匯入這些模型。 MLflow 相關的中繼資料 (例如執行識別碼) 也會標記已註冊的模型以供追蹤之用。 使用者可提交定型執行、註冊,並部署從 MLflow 執行產生的模型。
如果您想要在一個步驟中部署和註冊您的生產環境就緒模型,請參閱部署和註冊 MLflow 模型。
若要從執行註冊並檢視模型,請使用下列步驟:
執行完成之後,請呼叫
register_model()
方法。# the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml. model_path = "model" model_uri = 'runs:/{}/{}'.format(run_id, model_path) mlflow.register_model(model_uri,"registered_model_name")
使用 Azure Machine Learning 工作室,在您的工作區中檢視已註冊的模型。
在下列範例中,已註冊的模型
my-model
已將 MLflow 追蹤中繼資料標記。選取 [成品] 索引標籤,以查看符合 MLflow 模型結構描述的所有模型檔案 (conda.yaml、MLmodel、model.pkl)。
選取 MLmodel 以查看執行所產生的 MLmodel 檔案。
清除資源
如果您不打算在工作區使用已記錄的計量和成品,則目前無法個別刪除這些項目。 請改以刪除包含儲存體帳戶和工作區的資源群組,以免產生任何費用:
在 Azure 入口網站中,選取最左邊的 [資源群組]。
在清單中,選取您所建立的資源群組。
選取 [刪除資源群組]。
輸入資源群組名稱。 接著選取刪除。
Notebook 範例
使用搭配 Azure Machine Learning 筆記本的 MLflow 示範和擴充本文所述的概念。 另請參閱社群導向存放庫 AzureML-Examples \(英文\)。
下一步
- 使用 MLflow 部署模型。
- 監視生產模型是否有資料漂移。
- 使用 MLflow 追蹤 Azure Databricks 執行。
- 管理您的模型。