使用 Azure DevOps 設定 MLOps
適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)
Azure Machine Learning 可讓您與 Azure DevOps 管線整合,自動化機器學習生命週期。 您可以自動化的一些作業包括:
- Azure Machine Learning 基礎結構的部署
- 資料準備 (擷取、轉換、載入作業)
- 使用隨選相應放大和相應增加來定型機器學習模型
- 將機器學習模型部署為公用或私人 Web 服務
- 監視已部署的機器學習模型 (例如效能分析)
在本文中,您將瞭解如何使用 Azure Machine Learning 來設定端對端 MLOps 管道,以執行線性回歸來預測 NYC 的計程車車資。 管道是由元件組成,每個元件都提供不同的函式,這些函式可以向工作區註冊、版本設定,並重複使用各種輸入和輸出。 您將使用適用於 MLOps 建議的 Azure 架構和 Azure MLOps (v2) 解決方案加速器,在 Azure Machine Learning 中快速設定 MLOps 專案。
提示
建議您先瞭解一些 適用於 MLOps 建議的 Azure 架構,再實作任何解決方案。 您必須為指定的機器學習項目挑選最佳架構。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。 試用免費或付費版本的 Azure Machine Learning。
- Azure Machine Learning 工作區。
- 在本機電腦上開始執行 Git。
- Azure DevOps 中的組織。
- 將裝載來源存放庫和管線的 Azure DevOps 專案。
- 適用於 Azure DevOps 的 Terraform 擴充功能 (如果您使用 Azure DevOps + Terraform 啟動基礎架構)
注意
需要 Git 2.27 版或更新版本。 如需安裝 Git 命令的詳細資訊,請參閱 https://git-scm.com/downloads 並選取您的作業系統
重要
本文中的 CLI 命令已使用 Bash 進行測試。 如果您使用不同的殼層,可能會遇到錯誤。
使用 Azure 和 DevOps 設定驗證
您必須先設定 Azure DevOps 的驗證,才能使用 Azure Machine Learning 設定 MLOps 專案。
建立服務主體
為了使用示範,需要建立一或兩個服務準則,視您想要處理的環境數目而定 (開發或 Prod 或兩者)。 您可以使用下列其中一種方法來建立這些準則:
-
提示
如果您是第一次啟動 Cloud Shell,您會收到為 Cloud Shell 建立儲存體帳戶的提示。
如果出現提示,請選擇 Bash 作為 Cloud Shell 中使用的環境。 您也可以在頂端瀏覽列的下拉式清單中變更環境
將下列 bash 命令複製到您的電腦,並使用專案的值更新 projectName、subscriptionId,以及環境變數。 如果您要同時建立 Dev 和 Prod 環境,您必須針對每個環境執行此指令碼一次,為每個環境建立服務主體。 此命令也會將參與者角色授與所提供訂用帳戶中的服務主體。 Azure DevOps 必須有此專案,才能正確使用該訂用帳戶中的資源。
projectName="<your project name>" roleName="Contributor" subscriptionId="<subscription Id>" environment="<Dev|Prod>" #First letter should be capitalized servicePrincipalName="Azure-ARM-${environment}-${projectName}" # Verify the ID of the active subscription echo "Using subscription ID $subscriptionID" echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionId" az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionId echo "Please ensure that the information created here is properly save for future use."
將編輯的命令複製到 Azure Shell 並執行 (Ctrl + Shift + v)。
執行這些命令之後,您會看到與服務主體相關的資訊。 將此資訊儲存到安全的位置,稍後將在示範中使用它來設定 Azure DevOps 存放庫。
{ "appId": "<application id>", "displayName": "Azure-ARM-dev-Sample_Project_Name", "password": "<password>", "tenant": "<tenant id>" }
如果您要為開發和生產環境建立服務主體,請重複步驟 3。 在此示範中,我們只會建立一個稱為 Prod 的環境。
建立服務主體之後,請關閉 Cloud Shell。
設定 Azure DevOps
瀏覽至 Azure DevOps。
選取 [建立新專案] (為本教學課程命名專案
mlopsv2
)。在專案中的 [專案設定] (位於專案頁面的左下角) 下,選取 [服務連線]。
選取 [建立服務連線]。
選取 [Azure Resource Manager]、選取 [下一步]、選取 [服務主體]、選取 [下一步],然後選取 [範圍層級訂用帳戶]。
- 訂用帳戶名稱 – 使用儲存服務主體的訂用帳戶名稱。
- 訂用帳戶標識碼 – 使用您在 步驟 1 輸入中使用的
subscriptionId
作為訂用帳戶識別碼 - 服務主體識別碼 – 使用步驟 1 輸出中的
appId
作為服務主體識別碼 - 服務主體金鑰 – 使用步驟 1 輸出中的
password
作為服務主體金鑰 - 租使用者標識碼 – 使用 步驟 1 輸出中的
tenant
作為租用戶識別碼
將服務連線命名 Azure-ARM-Prod。
選取 [將存取權限授與所有管線],然後選取 [驗證和儲存]。
Azure DevOps 設定已成功完成。
使用 Azure DevOps 設定來源存放庫
開啟您在 Azure DevOps 中建立的專案
開啟 [存放庫] 區段,然後選取 [匯入存放庫]
在 [複製 URL] 欄位中輸入 https://github.com/Azure/mlops-v2-ado-demo。 選取頁面底部的 [匯入]
開啟左側瀏覽窗格底部的 [專案設定]
在 [Repos] 區段底下,選取 [存放庫]。 選取您在上一個步驟中建立的存放庫選取 [安全性] 索引標籤
在 [使用者權限] 區段底下,選取 [mlopsv2 組建服務] 使用者。 將權限 [參與] 權限變更為 [允許],並將 [建立分支] 權限變更為 [允許]。
開啟左側導覽窗格中的 [管線] 區段,然後選取 [建立管線] 按鈕旁的 3 個垂直點。 選取 [管理安全性]。
選取 [使用者] 區段下專案的 [mlopsv2 Build Service] 帳戶。 將權限 [編輯組建管線] 變更為 [允許]
注意
會完成必要條件區段,並會據此部署解決方案加速器。
透過 Azure DevOps 部署基礎結構
此步驟會將訓練管道部署到在先前步驟中建立的 Azure Machine Learning 工作區。
提示
請先確定您已了解解決方案加速器架構模式 ,再檢查 MLOps v2 存放庫並部署基礎結構。 在範例中,您將使用傳統 ML 專案類型。
執行 Azure 基礎結構管線
移至您的存放庫 (
mlops-v2-ado-demo
),然後選取 [config-infra-prod.yml] 檔案。重要
請確定您已選取存放庫的 [主要] 分支。
此組態檔會使用命名空間和後置詞值的名稱,以確保唯一性。 將設定中的下一節更新為您的喜好。
namespace: [5 max random new letters] postfix: [4 max random new digits] location: eastus
注意
如果您執行深度學習工作負載,例如 CV 或 NLP,請確定 GPU 計算可在您的部署區域中使用。
選取 [認可] 並將程式碼推送至管線中。
移至 [管線] 區段
選取建立管線。
選取 [Azure Repos Git]。
從上一節選取您複製的存放庫
mlops-v2-ado-demo
選取 [現有的 Azure Pipelines YAML 檔案]
選取 [
main
] 分支,然後選擇 [mlops/devops-pipelines/cli-ado-deploy-infra.yml
],然後選取 [繼續]。執行管線;完成需要幾分鐘的時間。 管線應該建立下列成品:
- 工作區的資源群組,包括儲存體帳戶、容器登錄、Application Insights、Keyvault 及 Azure Machine Learning 工作區本身。
- 在工作區中,也會建立計算叢集。
現在已部署 MLOps 專案的基礎結構。
注意
無法將現有的存放庫移至必要的位置,警告可能會忽略。
範例訓練和部署情節
解決方案加速器包含範例端對端機器學習管道的程式碼和資料,其會執行線性回歸來預測 NYC 的計程車車資。 管道是由元件組成,每個元件都提供不同的函式,這些函式可以向工作區註冊、版本設定,並重複使用各種輸入和輸出。 電腦視覺和 NLP 案例的範例管道和工作流程將會有不同的步驟和部署步驟。
此訓練管道包含下列步驟:
準備資料
- 此元件會採用多個計程車資料集 (黃色和綠色),並合併/篩選資料,並準備訓練/val 和評估資料集。
- 輸入:./data/ 下的本機資料 (多個 .csv檔案)
- 輸出:單一準備好的資料集 (.csv) 和訓練/val/測試資料集。
訓練模型
- 此元件會使用資料集來訓練線性回歸輸入器。
- 輸入:訓練資料集
- 輸出:訓練模型 (pickle 格式)
評估模型
- 此元件會使用訓練的模型來預測測試集上的計程車車資。
- 輸入:ML 模型和測試資料集
- 輸出:模型效能和是否要部署旗標。
- 此元件會比較模型與新測試資料集上,所有先前部署的模型效能,並決定是否要將模型升階至生產環境。 藉由在 AML 工作區中註冊模型,將模型升階至生產環境。
註冊模型
- 此元件會根據預測在測試集中的精確度來評分模型。
- 輸入:已訓練的模型和部署旗標。
- 輸出:Azure Machine Learning 中已註冊的模型。
部署模型定型管線
移至 ADO 管線
選取 [新增管線]。
選取 [Azure Repos Git]。
從上一節選取您複製的存放庫
mlopsv2
選取 [現有的 Azure Pipelines YAML 檔案]
選取 [
main
] 作為分支,並且選擇 [/mlops/devops-pipelines/deploy-model-training-pipeline.yml
],然後選取 [繼續]。儲存並執行管線
注意
此時,會設定基礎結構,並部署 MLOps 架構的原型設計迴圈。 您已準備好移至我們的定型模型至生產環境。
部署已訓練的模型
此案例包含預先組建的工作流程,適用於部署定型模型、批次評分或將模型部署至端點以進行即時評分的兩種方法。 您可以執行這兩個工作流程,以在 Azure ML 工作區中測試模型的效能。 在此範例中,我們將使用即時評分。
部署 ML 模型端點
移至 ADO 管線
選取 [新增管線]。
選取 [Azure Repos Git]。
從上一節選取您複製的存放庫
mlopsv2
選取 [現有的 Azure Pipelines YAML 檔案]
選取 [
main
] 作為分支,然後選擇 [受控線上端點]/mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml
,然後選取 [繼續]。線上端點名稱必須是唯一的,因此請將
taxi-online-$(namespace)$(postfix)$(environment)
變更為另一個唯一名稱,然後選取 [執行]。 如果沒有失敗,就不需要變更預設值。重要
如果執行因為現有的線上端點名稱而失敗,請如先前所述重新建立管線,並將 [您的端點名稱] 變更為 [您的端點名稱(隨機數字)]
執行完成時,您會看到類似下圖的輸出:
若要測試此部署,請前往 AzureML 工作區中的 [端點] 索引標籤,選取端點,然後按一下 [測試] 索引標籤。您可以使用位於
/data/taxi-request.json
複製存放庫中的範例輸入資料來測試端點。
清除資源
- 如果您不打算繼續使用管線,請刪除 Azure DevOps 專案。
- 在 Azure 入口網站,刪除資源群組和 Azure Machine Learning 執行個體。
下一步
- 安裝和設定 Python SDK v2
- 安裝和設定 Python CLI v2
- GitHub 上的 Azure MLOps (v2) 解決方案加速器
- 使用 Machine Learning 的 MLOps 訓練課程
- 深入了解使用 Azure Machine Learning 的 Azure Pipelines
- 深入瞭解搭配 Azure Machine Learning 使用 GitHub Actions
- 在不到一小時內在 Azure 上部署 MLOps - 社群 MLOps V2 加速器影片