你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 Azure Pipelines 与 Azure 机器学习配合使用

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

可以使用 Azure DevOps Pipelines 自动执行机器学习生命周期。 可以自动执行的操作包括:

  • 数据准备(提取、转换、加载作)。
  • 使用按需横向扩展和纵向扩展训练机器学习模型。
  • 将机器学习模型部署为公共或专用 Web 服务。
  • 监视部署的机器学习模型(例如性能或数据偏移分析)。

本文介绍如何创建一个 Azure 管道,用于生成机器学习模型并将其部署到 Azure 机器学习

本教程使用 Azure 机器学习 Python SDK v2Azure CLI ML 扩展 v2

先决条件

步骤 1:获取代码

从 GitHub 分叉以下存储库:

https://github.com/azure/azureml-examples

步骤 2:创建项目

登录到 Azure。 搜索并选择 Azure DevOps 组织。 选择“ 查看我的组织”。 选择要使用的组织。

在所选组织中,创建项目。 如果组织中没有任何项目,则会显示创建项目并开始使用屏幕。 或者选择仪表板右上角的新建项目按钮。

步骤 3:创建服务连接

可使用现有的服务连接。

需要 Azure 资源管理器连接才能通过 Azure 门户进行身份验证。

  1. 在 Azure DevOps 中,选择 “项目设置”,然后选择“ 服务连接”。

  2. 选择“ 创建服务连接”,选择 “Azure 资源管理器”,然后选择“ 下一步”。

  3. 使用标识类型和凭据的默认值。

  4. 创建服务连接。 设置首选范围级别、订阅、资源组和连接名称。

    ARM 服务连接的屏幕截图。

步骤 4:创建管道

  1. 转到 管道,然后选择“ 创建管道”。

  2. 选择 GitHub 作为源代码位置。

  3. 可能会重定向到 GitHub 进行登录。 如果是,请输入 GitHub 凭据。

  4. 看到存储库列表时,请选择你的存储库。

  5. 你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是,请选择“ 批准并安装”。

  6. 选择“初学者管道”。 你将更新初学者管道模板。

步骤 5:创建 YAML 管道以提交 Azure 机器学习作业

删除初学者管道,并将其替换为以下 YAML 代码。 在此管道中,你将:

  • 使用 Python 版本任务设置 Python 3.8 并安装 SDK 要求。
  • 使用 Bash 任务为 Azure 机器学习 SDK 和 CLI 运行 bash 脚本。
  • 使用 Azure CLI 任务提交 Azure 机器学习作业。

选择以下选项卡之一,具体取决于是使用 Azure 资源管理器服务连接还是通用服务连接。 在管道 YAML 中,将变量的值替换为与资源对应的值。

name: submit-azure-machine-learning-job

trigger:
- none

variables:
  service-connection: 'machine-learning-connection' # replace with your service connection name
  resource-group: 'machinelearning-rg' # replace with your resource group name
  workspace: 'docs-ws' # replace with your workspace name

jobs:
- job: SubmitAzureMLJob
  displayName: Submit AzureML Job
  timeoutInMinutes: 300
  pool:
    vmImage: ubuntu-latest
  steps:
  - task: UsePythonVersion@0
    displayName: Use Python >=3.8
    inputs:
      versionSpec: '>=3.8'

  - bash: |
      set -ex

      az version
      az extension add -n ml
    displayName: 'Add AzureML Extension'

  - task: AzureCLI@2
    name: submit_azureml_job_task
    displayName: Submit AzureML Job Task
    inputs:
      azureSubscription: $(service-connection)
      workingDirectory: 'cli/jobs/pipelines-with-components/nyc_taxi_data_regression'
      scriptLocation: inlineScript
      scriptType: bash
      inlineScript: |
      
        # submit component job and get the run name
        job_name=$(az ml job create --file single-job-pipeline.yml -g $(resource-group) -w $(workspace) --query name --output tsv)

        # set output variable for next task
        echo "##vso[task.setvariable variable=JOB_NAME;isOutput=true;]$job_name"

步骤 6:等待 Azure 机器学习作业完成

在步骤 5 中,你添加了一个提交 Azure 机器学习作业的作业。 在此步骤中,另外添加一个等待 Azure 机器学习作业完成的作业。

如果使用资源管理器服务连接,可以使用机器学习扩展。 可以在 Azure DevOps 扩展市场中 搜索此扩展,也可以直接转到 扩展页。 安装机器学习扩展。

重要说明

不要安装 机器学习(经典) 扩展。 它是一个不提供相同功能的较旧扩展。

在“管道评审”窗口中,添加服务器作业。 在作业的步骤部分中,选择“ 显示助手”,然后搜索 AzureML。 选择AzureML Job Wait任务,然后输入作业相关的信息。

该任务有四个输入:Service ConnectionAzure Resource Group NameAzureML Workspace NameAzureML Job Name。 提供这些输入。 这些步骤生成的 YAML 类似于以下示例:

注意

  • Azure 机器学习作业等待任务在服务器作业上运行,该作业不使用昂贵的代理池资源,无需额外付费。 服务器作业(由 pool: server 指示)在管道所在的计算机上运行。 有关详细信息,请参阅服务器作业
  • 一个 Azure 机器学习作业等待任务只能等待一个作业。 你需要为每个要等待的作业设置单独的任务。
  • Azure 机器学习作业等待任务最多可以等待两天。 此限制是由 Azure DevOps 管道设置的硬性限制。
- job: WaitForAzureMLJobCompletion
  displayName: Wait for AzureML Job Completion
  pool: server
  timeoutInMinutes: 0
  dependsOn: SubmitAzureMLJob
  variables: 
    # Save the name of the azureMl job submitted in the previous step to a variable. It will be used as an input to the AzureML Job Wait task.
    azureml_job_name_from_submit_job: $[ dependencies.SubmitAzureMLJob.outputs['submit_azureml_job_task.JOB_NAME'] ] 
  steps:
  - task: AzureMLJobWaitTask@1
    inputs:
      serviceConnection: $(service-connection)
      resourceGroupName: $(resource-group)
      azureMLWorkspaceName: $(workspace)
      azureMLJobName: $(azureml_job_name_from_submit_job)

步骤 7:提交管道并验证管道的运行

选择“保存并运行”。 该管道将等待 Azure 机器学习作业完成,并以与 Azure 机器学习作业相同的状态结束 WaitForJobCompletion 下的任务。 例如:

Azure 机器学习作业 Succeeded == WaitForJobCompletion 作业下的 Azure DevOps 任务 Succeeded

Azure 机器学习作业 Failed == WaitForJobCompletion 作业下的 Azure DevOps 任务 Failed

Azure 机器学习作业 Cancelled == WaitForJobCompletion 作业下的 Azure DevOps 任务 Cancelled

提示

可以在 Azure 机器学习工作室中查看完整的 Azure 机器学习作业。

清理资源

如果你不打算继续使用管道,请删除 Azure DevOps 项目。 在 Azure 门户中,删除资源组和 Azure 机器学习实例。