設定 Azure Machine Learning 的 MLflow
本文說明如何設定 MLflow 以連線到 Azure Machine Learning 工作區,進行追蹤、登錄和部署。
Azure Machine Learning 工作區與 MLflow 相容,這表示兩者可以作為 MLflow 伺服器,而不需要任何額外設定。 每個工作區都有一個 MLflow 追蹤 URI,MLflow 可用其來連線到工作區。 Azure Machine Learning 工作區已設定為使用 MLflow,因此不需要額外的設定。
不過,如果您在 Azure Machine Learning 外部工作 (例如本機電腦、Azure Synapse Analytics 或 Azure Databricks),則必須設定 MLflow 以指向工作區。
重要
在 Azure 計算 (Azure Machine Learning Notebooks、裝載在 Azure Machine Learning 計算執行個體上的 Jupyter Notebook,或 Azure Machine Learning 計算叢集上執行的作業) 上執行時,您不需要設定追蹤 URI。 系統會自動為您設定。
必要條件
若要遵循本教學課程,您需要具備下列必要條件:
安裝 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 追蹤 URI
若要將 MLflow 連線到 Azure Machine Learning 工作區,您需要工作區的追蹤 URI。 每個工作區都有自己的追蹤 URI,而且具有通訊協定 azureml://
。
取得工作區的追蹤 URI:
登入和設定您的工作區:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
您可以使用
az ml workspace
命令來取得追蹤 URI:az ml workspace show --query mlflow_tracking_uri
設定追蹤 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 Machine Learning,而不是針對每個工作階段執行。
設定驗證
設定追蹤之後,您也必須設定相關聯工作區的驗證方法。 根據預設,MLflow 的 Azure Machine Learning 外掛程式會開啟預設瀏覽器來提示認證,以執行互動式驗證。
適用於 MLflow 的 Azure Machine Learning 外掛程式透過 azure-identity
套件支援數種驗證機制,該套件會安裝為外掛程式 azureml-mlflow
的相依性。 下列驗證方法會逐一嘗試,直到其中一個成功為止:
- 環境:讀取透過環境變數指定的帳戶資訊,並使用其進行驗證。
- 受控識別:如果應用程式部署至已啟用受控識別的 Azure 主機,則會向其進行驗證。
- Azure CLI:如果使用者透過 Azure CLI
az login
命令登入,其會以該使用者身分進行驗證。 - Azure PowerShell:如果使用者透過 Azure PowerShell 的
Connect-AzAccount
命令登入,其會以該使用者身分進行驗證。 - 互動式瀏覽器:透過預設瀏覽器以互動方式驗證使用者。
對於有使用者連線到工作階段的互動式作業,您可以依賴互動式驗證,因此不需要採取進一步的動作。
警告
互動式瀏覽器驗證會在提示輸入認證時,封鎖程式碼執行。 這個方法不適合在自動環境裡進行驗證,例如定型作業。 建議您設定不同的驗證模式。
對於需要自動執行的案例,您必須設定服務主體,以與 Azure Machine Learning 通訊。
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
或 PKCS12
憑證檔案的路徑 (包括私密金鑰),並將 AZURE_CLIENT_CERTIFICATE_PASSWORD
設定為憑證檔案的密碼 (如果有的話)。
設定授權和權限等級
某些預設角色,例如 AzureML 資料科學家或參與者,已設定為在 Azure Machine Learning 工作區中執行 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 Machine Learning 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 中的工作區,可供開始使用。