将 GitHub Actions 与 Azure 机器学习配合使用

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

开始使用 GitHub Actions 以便在 Azure 机器学习上训练模型。

本文介绍如何创建生成机器学习模型并将其部署到 Azure 机器学习的 GitHub Actions工作流。 你将基于纽约出租车数据集训练 scikit-learn 线性回归模型。

GitHub Actions 使用存储库中 /.github/workflows/ 路径下的工作流 YAML (.yml) 文件。 此定义包含组成工作流的各种步骤和参数。

先决条件

在按照本文中的步骤操作之前,请确保满足以下先决条件:

  • 一个 GitHub 帐户。 如果你没有帐户,可免费注册一个。

步骤 1:获取代码

在 GitHub 创建以下存储库分支:

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

步骤 2:使用 Azure 进行身份验证

首先需要定义如何使用 Azure 进行身份验证。 可以使用服务主体OpenID Connect

生成部署凭据

Azure CLI 中使用 az ad sp create-for-rbac 命令创建服务主体

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --sdk-auth

在上面的示例中,请将占位符替换为你的订阅 ID、资源组名称和应用名称。 输出是一个 JSON 对象,包含的角色分配凭据可提供对应用服务应用的访问权限,如下所示。 复制此 JSON 对象供以后使用。

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

创建机密

  1. GitHub 中浏览存储库,选择“设置”>“机密”>“操作”。 选择“新建存储库机密”。

  2. 将 Azure CLI 命令的整个 JSON 输出粘贴到机密的值字段中。 为机密指定名称 AZ_CREDS

步骤 3:更新 setup.sh 以连接到 Azure 机器学习工作区

需要更新 CLI 安装文件变量以匹配工作区。

  1. 在克隆的存储库中,转到 azureml-examples/cli/

  2. 编辑 setup.sh 并更新文件中的这些变量。

    变量 说明
    GROUP 资源组的名称
    LOCATION 工作区的位置(例如 chinanorth2
    工作区 Azure 机器学习工作区的名称

步骤 4:使用计算群集名称更新 pipeline.yml

你将使用 pipeline.yml 文件来部署 Azure 机器学习管道。 这是机器学习管道,而不是 DevOps 管道。 仅当要为自己的计算机群集名称使用 cpu-cluster 之外的名称时,才需要进行此更新。

  1. 在克隆的存储库中,转到 azureml-examples/cli/jobs/pipelines/nyc-taxi/pipeline.yml
  2. 每次看到 compute: azureml:cpu-cluster 时,都使用计算群集名称更新 cpu-cluster 的值。 例如,如果群集名称为 my-cluster,则新的值为 azureml:my-cluster。 有五个更新。

步骤 5:运行 GitHub Actions 工作流

工作流使用 Azure 进行身份验证、设置 Azure 机器学习 CLI 并使用 CLI 在 Azure 机器学习中训练模型。

工作流文件由触发器部分和作业组成:

  • 触发器在 on 部分中启动工作流。 工作流默认按 cron 计划运行,也在匹配的分支和路径发出拉取请求时运行。 详细了解触发工作流的事件
  • 在工作流的作业部分中,签出代码并使用服务主体机密登录到 Azure。
  • 作业部分还包括设置操作,用于安装和设置机器学习 CLI (v2)。 安装 CLI 后,运行作业操作将运行 Azure 机器学习 pipeline.yml 文件,以使用纽约出租车数据训练模型。

启用工作流

  1. 在克隆的存储库中,打开 .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml 并验证工作流是否如下所示。

    name: cli-jobs-pipelines-nyc-taxi-pipeline
    on:
      workflow_dispatch:
      schedule:
        - cron: "0 0/4 * * *"
      pull_request:
        branches:
          - main
          - sdk-preview
        paths:
          - cli/jobs/pipelines/nyc-taxi/**
          - .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml
          - cli/run-pipeline-jobs.sh
          - cli/setup.sh
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: check out repo
          uses: actions/checkout@v2
        - name: azure login
          uses: azure/login@v1
          with:
            creds: ${{secrets.AZURE_CREDENTIALS}}
        - name: setup
          run: bash setup.sh
          working-directory: cli
          continue-on-error: true
        - name: run job
          run: bash -x ../../../run-job.sh pipeline.yml
          working-directory: cli/jobs/pipelines/nyc-taxi
    
  2. 选择“查看运行”。

  3. 选择“我了解我的工作流,继续并启用”以启用工作流。

  4. 选择 cli-jobs-pipelines-nyc-taxi-pipeline 工作流并选择“启用工作流”。 Screenshot of enable GitHub Actions workflow.

  5. 选择“运行工作流”,并选择立即运行工作流。 Screenshot of run GitHub Actions workflow.

步骤 6:验证工作流运行

  1. 打开已完成的工作流运行并验证生成作业是否成功运行。 作业旁边会显示绿色复选标记。

  2. 打开Azure 机器学习工作室并导航到 nyc-taxi-pipeline-example。 验证作业的每个部分(准备、转换、训练、预测、评分)是否完成,以及是否看到绿色复选标记。

    Screenshot of successful Machine Learning Studio run.

清理资源

不再需要资源组和存储库时,请通过删除资源组和 GitHub 存储库来清理部署的资源。

后续步骤