設定開發環境和生產環境

已完成

在 DevOps 內,環境是指資源的集合。 這些資源會用來部署應用程式,或使用機器學習專案來部署模型。

使用環境進行持續傳遞

您使用的環境數目取決於您的組織。 一般而言,至少有兩個環境:「開發環境」或「開發」以及「生產環境」或「生產」。此外,您還可以在中間新增「預備」或「進入生產階段前」 (「生產前」) 環境。

具有持續傳遞的一般方法是:

  1. 在「開發」環境中試驗模型定型。
  2. 將最佳模型移至「預備」或「生產前」環境,部署及測試模型。
  3. 最後,將模型「發行」到「生產」環境,部署模型以供終端使用者使用。

注意

在此課程模組中,我們會參考 DevOps 對環境的解譯。 請注意,Azure Machine Learning 也會使用環境一詞來描述執行指令碼所需的 Python 套件集合。 這兩種環境概念互不相關。 深入了解 Azure Machine Learning 環境

組織 Azure Machine Learning 環境

當您實作 MLOps 並大規模使用機器學習模型時,最佳做法是在不同的階段使用不同的環境。

想像小組使用開發、生產前和生產環境。 並非小組每個人都該存取所有環境。 資料科學家可能只在開發環境中使用非生產資料,而機器學習工程師則使用生產資料,在生產前和生產環境中部署模型。

擁有不同的環境會更容易控制資源存取。 然後,每個環境均可與個別的 Azure Machine Learning 工作區建立關聯。

Diagram of multiple environments set-up.

在 Azure 中,您將使用角色型存取控制 (RBAC) 賦與同事正確的等級,以存取其需要使用的部分資源。

或者,您也可以只使用一個 Azure Machine Learning 工作區。 當開發和生產只使用一個工作區時,Azure 磁碟使用量和管理額外負荷都比較小。 不過,RBAC 可同時套用至開發與生產環境,而這表示您授與人員太少或太多的資源存取權。

若要在模型開發的不同階段使用不同的環境,您可以在執行 Azure Pipeline 或以 GitHub Actions 使用的工作流程時,以環境為目標。

Azure DevOps 環境

若要使用各種 Azure DevOps 環境,首先必須建立各種環境。 然後,您就可以指定要在 Azure Pipeline 內部署的環境。

  1. 展開 Azure DevOps 的 [Pipelines] 功能表。
  2. 選取環境
  3. 建立 [新增環境]
  4. 為環境命名。
  5. 資源選擇 [無]。 以管線本身的特定 Azure Machine Learning 工作區為目標。
  6. 選取 建立

Screenshot of creating new environment in Azure DevOps.

在 Azure DevOps 中建立環境,並建立不同 Azure Machine Learning 工作區和每個環境的關聯後,您就可以指定要在 Azure Pipelines YAML 檔案中部署的環境:

trigger: 
- main

stages:
- stage: deployDev
  displayName: 'Deploy to development environment'
  jobs:
    - deployment: publishPipeline
      displayName: 'Model Training'
      pool:
        vmImage: 'Ubuntu-18.04'
      environment: dev
      strategy:
       runOnce:
         deploy:
          steps:
          - template: aml-steps.yml
            parameters:
              serviceconnectionname: 'spn-aml-workspace-dev'

YAML 檔案中的 environment 值是 dev,表示模型是在開發環境中定型。 您可以透過服務連線,指定用於模型定型的 Azure Machine Learning 工作區。

GitHub 環境

若要以 GitHub Actions 使用環境,首先必須先建立環境。 然後就可以在工作流程中使用環境。

在 GitHub 存放庫 (存放庫) 內建立環境:

  1. 前往存放庫中的 [設定] 索引標籤。
  2. 選取環境
  3. 建立 [新增環境]
  4. 輸入名稱。
  5. 選取 [設定環境]

Screenshot of creating new environment in GitHub.

若要將環境與特定 Azure Machine Learning 工作區建立關聯,您可以建立環境祕密,將此環境的存取權只授與給某個 Azure Machine Learning 工作區。

若要在工作流程中使用環境,您可以在 YAML 檔案中包含環境,藉此新增要部署的環境:

name: Train model

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    environment:
        name: dev 
    steps:
    - name: check out repo
      uses: actions/checkout@v2
    - name: install az ml extension
      run: az extension add -n ml -y
    - name: azure login
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}
    - name: set current directory
      run: cd src
    - name: run pipeline
      run: az ml job create --file src/aml_service/pipeline-job.yml --resource-group dev-ml-rg --workspace-name dev-ml-ws

在此範例中,AZURE_CREDENTIALS 祕密包含了此環境所用 Azure Machine Learning 工作區的連線資訊。