共用方式為


使用 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

必要條件

從本機電腦或遠端計算追蹤執行

搭配 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。

  1. 使用工作區設定檔:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    提示

    您可以透過下列方式下載工作區設定檔:

    1. 瀏覽至 Azure Machine Learning 工作室
    2. 按一下頁面右上角 - >下載設定檔。
    3. 將檔案 config.json 儲存在您正在使用的相同目錄中。
  2. 使用訂用帳戶識別碼、資源群組名稱和工作區名稱:

    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 使用自動記錄功能

管理模型

使用支援 MLflow 模型登錄的 Azure Machine Learning 模型登錄來註冊並追蹤您的模型。 Azure Machine Learning 模型會與 MLflow 模型結構描述一致,讓您輕鬆地在不同的工作流程中匯出和匯入這些模型。 MLflow 相關的中繼資料 (例如執行識別碼) 也會標記已註冊的模型以供追蹤之用。 使用者可提交定型執行、註冊,並部署從 MLflow 執行產生的模型。

如果您想要在一個步驟中部署和註冊您的生產環境就緒模型,請參閱部署和註冊 MLflow 模型

若要從執行註冊並檢視模型,請使用下列步驟:

  1. 執行完成之後,請呼叫 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")
    
  2. 使用 Azure Machine Learning 工作室,在您的工作區中檢視已註冊的模型。

    在下列範例中,已註冊的模型 my-model 已將 MLflow 追蹤中繼資料標記。

    register-mlflow-model

  3. 選取 [成品] 索引標籤,以查看符合 MLflow 模型結構描述的所有模型檔案 (conda.yaml、MLmodel、model.pkl)。

    model-schema

  4. 選取 MLmodel 以查看執行所產生的 MLmodel 檔案。

    MLmodel-schema

清除資源

如果您不打算在工作區使用已記錄的計量和成品,則目前無法個別刪除這些項目。 請改以刪除包含儲存體帳戶和工作區的資源群組,以免產生任何費用:

  1. 在 Azure 入口網站中,選取最左邊的 [資源群組]

    在 Azure 入口網站中刪除

  2. 在清單中,選取您所建立的資源群組。

  3. 選取 [刪除資源群組]

  4. 輸入資源群組名稱。 接著選取刪除

Notebook 範例

使用搭配 Azure Machine Learning 筆記本的 MLflow 示範和擴充本文所述的概念。 另請參閱社群導向存放庫 AzureML-Examples \(英文\)。

下一步