共用方式為


使用 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 架構,再實作任何解決方案。 您必須為指定的機器學習項目挑選最佳架構。

必要條件

注意

需要 Git 2.27 版或更新版本。 如需安裝 Git 命令的詳細資訊,請參閱 https://git-scm.com/downloads 並選取您的作業系統

重要

本文中的 CLI 命令已使用 Bash 進行測試。 如果您使用不同的殼層,可能會遇到錯誤。

使用 Azure 和 DevOps 設定驗證

您必須先設定 Azure DevOps 的驗證,才能使用 Azure Machine Learning 設定 MLOps 專案。

建立服務主體

為了使用示範,需要建立一或兩個服務準則,視您想要處理的環境數目而定 (開發或 Prod 或兩者)。 您可以使用下列其中一種方法來建立這些準則:

  1. 啟動 Azure Cloud Shell

    提示

    如果您是第一次啟動 Cloud Shell,您會收到為 Cloud Shell 建立儲存體帳戶的提示。

  2. 如果出現提示,請選擇 Bash 作為 Cloud Shell 中使用的環境。 您也可以在頂端瀏覽列的下拉式清單中變更環境

    Cloud Shell 環境下拉式清單的螢幕擷取畫面。

  3. 將下列 bash 命令複製到您的電腦,並使用專案的值更新 projectNamesubscriptionId,以及環境變數。 如果您要同時建立 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."
    
  4. 將編輯的命令複製到 Azure Shell 並執行 (Ctrl + Shift + v)。

  5. 執行這些命令之後,您會看到與服務主體相關的資訊。 將此資訊儲存到安全的位置,稍後將在示範中使用它來設定 Azure DevOps 存放庫。

    {
       "appId": "<application id>",
       "displayName": "Azure-ARM-dev-Sample_Project_Name",
       "password": "<password>",
       "tenant": "<tenant id>"
    }
    
  6. 如果您要為開發和生產環境建立服務主體,請重複步驟 3。 在此示範中,我們只會建立一個稱為 Prod 的環境。

  7. 建立服務主體之後,請關閉 Cloud Shell。

設定 Azure DevOps

  1. 瀏覽至 Azure DevOps

  2. 選取 [建立新專案] (為本教學課程命名專案 mlopsv2)。

    ADO 專案的螢幕擷取畫面。

  3. 在專案中的 [專案設定] (位於專案頁面的左下角) 下,選取 [服務連線]

  4. 選取 [建立服務連線]

    ADO 新增服務連線按鈕的螢幕擷取畫面。

  5. 選取 [Azure Resource Manager]、選取 [下一步]、選取 [服務主體]、選取 [下一步],然後選取 [範圍層級訂用帳戶]

    • 訂用帳戶名稱 – 使用儲存服務主體的訂用帳戶名稱。
    • 訂用帳戶標識碼 – 使用您在 步驟 1 輸入中使用的 subscriptionId 作為訂用帳戶識別碼
    • 服務主體識別碼 – 使用步驟 1 輸出中的 appId 作為服務主體識別碼
    • 服務主體金鑰 – 使用步驟 1 輸出中的 password 作為服務主體金鑰
    • 租使用者標識碼 – 使用 步驟 1 輸出中的tenant 作為租用戶識別碼
  6. 將服務連線命名 Azure-ARM-Prod

  7. 選取 [將存取權限授與所有管線],然後選取 [驗證和儲存]

Azure DevOps 設定已成功完成。

使用 Azure DevOps 設定來源存放庫

  1. 開啟您在 Azure DevOps 中建立的專案

  2. 開啟 [存放庫] 區段,然後選取 [匯入存放庫]

    Azure DevOps 匯入存放庫第一次的螢幕擷取畫面。

  3. 在 [複製 URL] 欄位中輸入 https://github.com/Azure/mlops-v2-ado-demo。 選取頁面底部的 [匯入]

    Azure DevOps 匯入 MLOps 示範存放庫的螢幕擷取畫面。

  4. 開啟左側瀏覽窗格底部的 [專案設定]

  5. 在 [Repos] 區段底下,選取 [存放庫]。 選取您在上一個步驟中建立的存放庫選取 [安全性] 索引標籤

  6. 在 [使用者權限] 區段底下,選取 [mlopsv2 組建服務] 使用者。 將權限 [參與] 權限變更為 [允許],並將 [建立分支] 權限變更為 [允許]Azure DevOps 權限的螢幕擷取畫面。

  7. 開啟左側導覽窗格中的 [管線] 區段,然後選取 [建立管線] 按鈕旁的 3 個垂直點。 選取 [管理安全性]

    管線安全性的螢幕擷取畫面。

  8. 選取 [使用者] 區段下專案的 [mlopsv2 Build Service] 帳戶。 將權限 [編輯組建管線] 變更為 [允許]

    新增安全性的螢幕擷取畫面。

注意

會完成必要條件區段,並會據此部署解決方案加速器。

透過 Azure DevOps 部署基礎結構

此步驟會將訓練管道部署到在先前步驟中建立的 Azure Machine Learning 工作區。

提示

請先確定您已了解解決方案加速器架構模式 ,再檢查 MLOps v2 存放庫並部署基礎結構。 在範例中,您將使用傳統 ML 專案類型

執行 Azure 基礎結構管線

  1. 移至您的存放庫 (mlops-v2-ado-demo),然後選取 [config-infra-prod.yml] 檔案。

    重要

    請確定您已選取存放庫的 [主要] 分支。

    ADO 中存放庫的螢幕擷取畫面。

    此組態檔會使用命名空間和後置詞值的名稱,以確保唯一性。 將設定中的下一節更新為您的喜好。

     namespace: [5 max random new letters]
     postfix: [4 max random new digits]
     location: eastus
    

    注意

    如果您執行深度學習工作負載,例如 CV 或 NLP,請確定 GPU 計算可在您的部署區域中使用。

  2. 選取 [認可] 並將程式碼推送至管線中。

  3. 移至 [管線] 區段

    ADO 管線的螢幕擷取畫面。

  4. 選取建立管線

  5. 選取 [Azure Repos Git]

    ADO Where's your code 的螢幕擷取畫面。

  6. 從上一節選取您複製的存放庫 mlops-v2-ado-demo

  7. 選取 [現有的 Azure Pipelines YAML 檔案]

    設定步驟上 Azure DevOps Pipeline 頁面的螢幕擷取畫面。

  8. 選取 [main] 分支,然後選擇 [mlops/devops-pipelines/cli-ado-deploy-infra.yml],然後選取 [繼續]

  9. 執行管線;完成需要幾分鐘的時間。 管線應該建立下列成品:

    • 工作區的資源群組,包括儲存體帳戶、容器登錄、Application Insights、Keyvault 及 Azure Machine Learning 工作區本身。
    • 在工作區中,也會建立計算叢集。
  10. 現在已部署 MLOps 專案的基礎結構。 ADO Infra Pipeline 畫面的螢幕擷取畫面。

    注意

    無法將現有的存放庫移至必要的位置,警告可能會忽略。

範例訓練和部署情節

解決方案加速器包含範例端對端機器學習管道的程式碼和資料,其會執行線性回歸來預測 NYC 的計程車車資。 管道是由元件組成,每個元件都提供不同的函式,這些函式可以向工作區註冊、版本設定,並重複使用各種輸入和輸出。 電腦視覺和 NLP 案例的範例管道和工作流程將會有不同的步驟和部署步驟。

此訓練管道包含下列步驟:

準備資料

  • 此元件會採用多個計程車資料集 (黃色和綠色),並合併/篩選資料,並準備訓練/val 和評估資料集。
  • 輸入:./data/ 下的本機資料 (多個 .csv檔案)
  • 輸出:單一準備好的資料集 (.csv) 和訓練/val/測試資料集。

訓練模型

  • 此元件會使用資料集來訓練線性回歸輸入器。
  • 輸入:訓練資料集
  • 輸出:訓練模型 (pickle 格式)

評估模型

  • 此元件會使用訓練的模型來預測測試集上的計程車車資。
  • 輸入:ML 模型和測試資料集
  • 輸出:模型效能和是否要部署旗標。
  • 此元件會比較模型與新測試資料集上,所有先前部署的模型效能,並決定是否要將模型升階至生產環境。 藉由在 AML 工作區中註冊模型,將模型升階至生產環境。

註冊模型

  • 此元件會根據預測在測試集中的精確度來評分模型。
  • 輸入:已訓練的模型和部署旗標。
  • 輸出:Azure Machine Learning 中已註冊的模型。

部署模型定型管線

  1. 移至 ADO 管線

    ADO 管線的螢幕擷取畫面。

  2. 選取 [新增管線]

    [ADO 新增管線] 按鈕的螢幕擷取畫面。

  3. 選取 [Azure Repos Git]

    ADO Where's your code 的螢幕擷取畫面。

  4. 從上一節選取您複製的存放庫 mlopsv2

  5. 選取 [現有的 Azure Pipelines YAML 檔案]

    設定步驟上 ADO 管線頁面的螢幕擷取畫面。

  6. 選取 [main] 作為分支,並且選擇 [/mlops/devops-pipelines/deploy-model-training-pipeline.yml],然後選取 [繼續]

  7. 儲存並執行管線

注意

此時,會設定基礎結構,並部署 MLOps 架構的原型設計迴圈。 您已準備好移至我們的定型模型至生產環境。

部署已訓練的模型

此案例包含預先組建的工作流程,適用於部署定型模型、批次評分或將模型部署至端點以進行即時評分的兩種方法。 您可以執行這兩個工作流程,以在 Azure ML 工作區中測試模型的效能。 在此範例中,我們將使用即時評分。

部署 ML 模型端點

  1. 移至 ADO 管線

    ADO 管線的螢幕擷取畫面。

  2. 選取 [新增管線]

    端點的 [ADO 新增管線] 按鈕螢幕擷取畫面。

  3. 選取 [Azure Repos Git]

    ADO Where's your code 的螢幕擷取畫面。

  4. 從上一節選取您複製的存放庫 mlopsv2

  5. 選取 [現有的 Azure Pipelines YAML 檔案]

    設定步驟上 Azure DevOps Pipeline 頁面的螢幕擷取畫面。

  6. 選取 [main] 作為分支,然後選擇 [受控線上端點] /mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml,然後選取 [繼續]

  7. 線上端點名稱必須是唯一的,因此請將 taxi-online-$(namespace)$(postfix)$(environment) 變更為另一個唯一名稱,然後選取 [執行]。 如果沒有失敗,就不需要變更預設值。

    Azure DevOps 批次部署指令碼的螢幕擷取畫面。

    重要

    如果執行因為現有的線上端點名稱而失敗,請如先前所述重新建立管線,並將 [您的端點名稱] 變更為 [您的端點名稱(隨機數字)]

  8. 執行完成時,您會看到類似下圖的輸出:

    ADO 管線批次執行結果頁面的螢幕擷取畫面。

  9. 若要測試此部署,請前往 AzureML 工作區中的 [端點] 索引標籤,選取端點,然後按一下 [測試] 索引標籤。您可以使用位於 /data/taxi-request.json 複製存放庫中的範例輸入資料來測試端點。

清除資源

  1. 如果您不打算繼續使用管線,請刪除 Azure DevOps 專案。
  2. 在 Azure 入口網站,刪除資源群組和 Azure Machine Learning 執行個體。

下一步