将 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) 文件。 此定义包含组成工作流的各种步骤和参数。
先决条件
在按照本文中的步骤操作之前,请确保满足以下先决条件:
Azure 机器学习工作区。 如果没有,请使用快速入门:创建工作区资源一文中的步骤创建一个。
若要安装 Python SDK v2,请使用以下命令:
pip install azure-ai-ml azure-identity
要将 SDK 的现有安装更新到最新版本,请使用以下命令:
pip install --upgrade azure-ai-ml azure-identity
有关详细信息,请参阅安装适用于 Azure 机器学习的 Python SDK v2。
- 一个 GitHub 帐户。 如果你没有帐户,可免费注册一个。
步骤 1:获取代码
在 GitHub 创建以下存储库分支:
https://github.com/azure/azureml-examples
在本地克隆分支存储库。
git clone https://github.com/YOUR-USERNAME/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>",
(...)
}
创建机密
在 GitHub 中浏览存储库,选择“设置”>“机密”>“操作”。 选择“新建存储库机密”。
将 Azure CLI 命令的整个 JSON 输出粘贴到机密的值字段中。 为机密指定名称
AZ_CREDS
。
步骤 3:更新 setup.sh
以连接到 Azure 机器学习工作区
需要更新 CLI 安装文件变量以匹配工作区。
在分支存储库中,转到
azureml-examples/cli/
。编辑
setup.sh
并更新文件中的这些变量。变量 说明 GROUP 资源组的名称 LOCATION 工作区的位置(例如 chinanorth2
)工作区 Azure 机器学习工作区的名称
步骤 4:使用计算群集名称更新 pipeline.yml
你将使用 pipeline.yml
文件来部署 Azure 机器学习管道。 这是机器学习管道,而不是 DevOps 管道。 仅当要为自己的计算机群集名称使用 cpu-cluster
之外的名称时,才需要进行此更新。
- 在分支存储库中,转到
azureml-examples/cli/jobs/pipelines/nyc-taxi/pipeline.yml
。 - 每次看到
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
文件,以使用纽约出租车数据训练模型。
启用工作流
在分支存储库中,打开
.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
选择“查看运行”。
选择“我了解我的工作流,继续并启用”以启用工作流。
选择 cli-jobs-pipelines-nyc-taxi-pipeline 工作流并选择“启用工作流”。
选择“运行工作流”,并选择立即运行工作流。
步骤 6:验证工作流运行
打开已完成的工作流运行并验证生成作业是否成功运行。 作业旁边会显示绿色复选标记。
打开Azure 机器学习工作室并导航到 nyc-taxi-pipeline-example。 验证作业的每个部分(准备、转换、训练、预测、评分)是否完成,以及是否看到绿色复选标记。
清理资源
不再需要资源组和存储库时,请通过删除资源组和 GitHub 存储库来清理部署的资源。