共用方式為


設定 Azure Machine Learning 的 MLflow

本文說明如何設定 MLflow 以連線到 Azure 機器學習 工作區,以進行追蹤、登錄管理和部署。

Azure 機器學習 工作區與 MLflow 相容,這表示它們可以作為 MLflow 伺服器,而不需要任何額外的設定。 每個工作區都有一個 MLflow 追蹤 URI,MLflow 可用其來連線到工作區。 Azure 機器學習 工作區已設定為使用 MLflow,因此不需要額外的設定。

不過,如果您在 Azure 機器學習 外部工作,則必須設定 MLflow 以指向工作區。 受影響的環境包括本機計算機、Azure Synapse Analytics 和 Azure Databricks。

重要

當您使用 Azure 計算基礎結構時,不需要設定追蹤 URI。 系統會自動為您設定。 自動設定的環境包括 Azure 機器學習 Notebook、裝載在 Azure 機器學習 計算實例上的 Jupyter Notebook,以及 Azure 機器學習 計算叢集上執行的作業。

必要條件

  • MLflow SDK mlflow 套件和適用於 MLflow 的 Azure 機器學習 azureml-mlflow 外掛程式。 您可以使用下列命令來安裝此軟體:

    pip install mlflow azureml-mlflow
    

    提示

    請考慮 mlflow使用 mlflow-skinny,而不是 。 此套件是輕量型 MLflow 套件,不含 SQL 記憶體、伺服器、UI 或數據科學相依性。 建議主要需要 MLflow 追蹤和記錄功能但不想匯入完整的功能套件,包括部署的使用者。

  • Azure Machine Learning 工作區。 若要建立工作區,請參閱 建立您需要開始使用的資源。

  • 在工作區中執行 MLflow 作業的訪問許可權。 如需作業和必要許可權的清單,請參閱 MLflow 作業

設定 MLflow 追蹤 URI

若要執行遠程追蹤,或追蹤在 Azure 機器學習 外部執行的實驗,請將 MLflow 設定為指向 Azure 機器學習 工作區的追蹤 URI。

若要將 MLflow 連線到 Azure 機器學習 工作區,您需要工作區的追蹤 URI。 每個工作區都有自己的追蹤 URI,其開頭為通訊協定 azureml://

  1. 取得工作區的追蹤 URI:

    適用於:Azure CLI ml 延伸模組 v2 (目前)

    1. 登入並設定您的工作區:

      az account set --subscription <subscription-ID>
      az configure --defaults workspace=<workspace-name> group=<resource-group-name> location=<location> 
      
    2. 使用 az ml workspace 命令取得追蹤 URI:

      az ml workspace show --query mlflow_tracking_uri
      
  2. 設定追蹤 URI:

    使用 方法, set_tracking_uri() 將 MLflow 追蹤 URI 設定為工作區的追蹤 URI。

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    提示

    某些案例涉及在共享環境中工作,例如 Azure Databricks 叢集或 Azure Synapse Analytics 叢集。 在這些情況下,最好在叢集層級設定 MLFLOW_TRACKING_URI 環境變數,而不是針對每個會話。 在叢集層級設定變數會自動設定 MLflow 追蹤 URI,以指向叢集中所有會話的 Azure 機器學習。

設定驗證

設定追蹤之後,您也需要設定相關聯工作區的驗證方法。

根據預設,MLflow 的 Azure Machine Learning 外掛程式會開啟預設瀏覽器來提示認證,以執行互動式驗證。 但外掛程式也支持數個其他驗證機制。 套件 azure-identity 提供這項支援。 此套件會安裝為外掛程式的 azureml-mlflow 相依性。

驗證程式會逐一嘗試下列方法,直到成功為止:

  1. 環境:會讀取並用於驗證透過環境變數指定的帳戶資訊。
  2. 受控識別:如果應用程式部署至已啟用受控識別的 Azure 主機,則會使用受控識別進行驗證。
  3. Azure CLI:如果您使用 Azure CLIaz login 命令登入,您的認證會用於驗證。
  4. Azure PowerShell:如果您使用 Azure PowerShellConnect-AzAccount 命令來登入,您的認證會用於驗證。
  5. 互動式瀏覽器:用戶會透過預設瀏覽器以互動方式進行驗證。

對於使用者連線到會話的互動式作業,您可以依賴互動式驗證。 不需要進行其他動作。

警告

互動式瀏覽器驗證會在提示輸入認證時,封鎖程式碼執行。 這個方法不適合在自動環境裡進行驗證,例如定型作業。 建議您在這些環境中設定不同的驗證模式。

針對需要自動執行的案例,您必須設定服務主體以與 Azure 機器學習 通訊。 如需建立服務主體的相關信息,請參閱 設定服務主體

在下列程式代碼中使用服務主體的租使用者識別碼、用戶端識別碼和客戶端密碼:

import os

os.environ["AZURE_TENANT_ID"] = "<Azure-tenant-ID>"
os.environ["AZURE_CLIENT_ID"] = "<Azure-client-ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<Azure-client-secret>"

提示

當您在共用環境中工作時,建議您在計算層級設定這些環境變數。 最佳做法是將其作為 Azure Key Vault 執行個體中的祕密加以管理。

例如,在 Azure Databricks 叢集組態中,您可以使用下列方式在環境變數中使用秘密: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}。 如需在 Azure Databricks 中實作此方法的詳細資訊,請參閱 參考環境變數中的秘密,或參考您平台的檔。

如果您想要使用憑證而不是秘密,您可以設定下列環境變數:

  • 設定 AZURE_CLIENT_CERTIFICATE_PATH 為檔案的路徑,其中包含隱私權增強郵件 (PEM) 或公鑰密碼編譯標準 12 (PKCS #12) 格式的憑證和私鑰組。
  • 如果憑證檔案使用密碼,請將 設定 AZURE_CLIENT_CERTIFICATE_PASSWORD 為密碼。

設定授權和權限等級

某些預設角色,例如 AzureML 資料科學家 和參與者,已設定為在 Azure 機器學習 工作區中執行 MLflow 作業。 如果您使用自訂角色,您需要下列許可權:

  • 若要使用 MLflow 追蹤:

    • Microsoft.MachineLearningServices/workspaces/experiments/*
    • Microsoft.MachineLearningServices/workspaces/jobs/*
  • 若要使用 MLflow 模型登錄:

    • Microsoft.MachineLearningServices/workspaces/models/*/*

若要瞭解如何將工作區的存取權授與您建立的服務主體或用戶帳戶,請參閱 授與存取權

針對 驗證問題進行疑難排解

MLflow 會嘗試在第一個與服務互動的作業上向 Azure Machine Learning 進行驗證,例如 mlflow.set_experiment()mlflow.start_run()。 如果您在程式期間遇到問題或非預期的驗證提示,您可以增加記錄層級,以取得錯誤的詳細資料:

import logging

logging.getLogger("azure").setLevel(logging.DEBUG)

設定實驗名稱 (選擇性)

所有 MLflow 執行皆會記錄到使用中的實驗。 根據預設,系統會將執行記錄到為您自動建立名為 Default 的實驗。 您可以設定用於追蹤的實驗。

提示

當您使用 Azure 機器學習 CLI v2 提交作業時,您可以使用作業 YAML 定義中的 屬性來設定實驗名稱experiment_name。 您不必在定型指令碼中設定。 如需詳細資訊,請參閱 YAML:顯示名稱、實驗名稱、描述和標記

使用 MLflow mlflow.set_experiment() 命令來設定實驗。

experiment_name = "experiment_with_mlflow"
mlflow.set_experiment(experiment_name)

設定非公用 Azure 雲端的支援

MLflow 的 Azure Machine Learning 外掛程式預設會設定為使用全域 Azure 雲端。 不過,您可以藉由設定環境變數來設定您正在使用的 AZUREML_CURRENT_CLOUD Azure 雲端:

import os

os.environ["AZUREML_CURRENT_CLOUD"] = "AzureChinaCloud"

可使用下列 Azure CLI 命令來識別您所使用的雲端:

az cloud list

目前雲端的值 IsActive 設定為 True

現在您的環境已連線到 Azure Machine Learning 中的工作區,可供開始使用。