设置开发和生产环境

已完成

在 DevOps 中,环境是指资源的集合。 这些资源用于部署应用程序,或与机器学习项目一起用来部署模型。

使用环境进行持续交付

你使用的环境数取决于你的组织。 通常,至少有两个环境:开发和生产。此外,还可以在过渡或预生产环境之间添加环境。

通过持续交付,典型的方法是:

  1. 试用开发环境中的模型训练。
  2. 将最佳模型移动到过渡或预生产环境以部署和测试模型。
  3. 最后,将模型发布到生产环境以部署模型,以便最终用户能够使用它。

注意

在本模块中,我们将引用环境的 DevOps 解释。 请注意,Azure 机器学习还使用术语环境来描述运行脚本所需的 Python 包集合。 这两个环境概念彼此独立。 详细了解 Azure 机器学习环境

组织 Azure 机器学习环境

实现 MLOps 并大规模使用机器学习模型时,最好在不同的阶段使用单独的环境。

假设你的团队使用开发、预生产和生产环境。 并非你的所有团队成员都应获取对所有环境的访问权限。 数据科学家只能在具有非生产数据的开发环境中工作,而机器学习工程师在具有生产数据的预生产和生产环境中部署模型。

使用单独的环境可以更轻松地控制对资源的访问。 然后,每个环境都可以与单独的 Azure 机器学习工作区相关联。

Diagram of multiple environments set-up.

在 Azure 中,你将使用基于角色的访问控制 (RBAC) 为同事提供对他们需要处理的资源子集的适当访问权限级别。

或者,只能使用一个 Azure 机器学习工作区。 使用一个工作区进行开发和生产时,Azure 占用空间更小,管理开销更少。 但是,RBAC 将同时应用于开发环境和专业环境,这可能意味着你为用户提供对资源的访问权限太少或太多。

若要为模型开发的不同阶段使用环境,可以在使用 GitHub Actions 运行 Azure Pipeline 或工作流时确定环境。

Azure DevOps 环境

若要在 Azure DevOps 中使用环境,首先需要创建环境。 然后,可以指定要在 Azure Pipeline 中部署到的环境。

  1. 在 Azure DevOps 中,展开“管道”菜单。
  2. 选择“环境”。
  3. 创建新环境。
  4. 为环境命名。
  5. 为资源选择“无”。 在管道本身中确定特定的 Azure 机器学习工作区。
  6. 选择创建

Screenshot of creating new environment in Azure DevOps.

在 Azure DevOps 中创建环境并将不同的 Azure 机器学习工作区与每个环境关联后,可以指定要在 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 机器学习工作区。

GitHub 环境

若要将环境与 GitHub Actions 一起使用,首先需要创建环境。 然后,可以在工作流中使用环境。

若要在 GitHub 存储库中创建环境,请执行以下操作:

  1. 转到存储库中的“设置”选项卡。
  2. 选择“环境”。
  3. 创建新环境。
  4. 输入名称。
  5. 选择“配置环境”。

Screenshot of creating new environment in GitHub.

若要将环境与特定的 Azure 机器学习工作区相关联,可以创建一个环境机密,以仅授予该环境对 Azure 机器学习工作区的访问权限。

若要在工作流中使用环境,可以通过将其包含在 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 机器学习工作区的连接信息。