适用范围: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 v2 的 Azure 机器学习 SDK。 若要安装 SDK,请使用以下命令:
pip install azure-ai-ml azure-identity
要将 SDK 的现有安装更新到最新版本,请使用以下命令:
pip install --upgrade azure-ai-ml azure-identity
有关详细信息,请参阅 适用于 Python 的 Azure 机器学习包客户端库。
- 一个 GitHub 帐户。 如果你没有帐户,可免费注册一个。
步骤 1:获取代码
在 GitHub 创建以下存储库分支:
https://github.com/azure/azureml-examples
在本地克隆分支存储库。
git clone https://github.com/YOUR-USERNAME/azureml-examples
步骤 2:使用 Azure 进行身份验证
首先需要定义如何使用 Azure 进行身份验证。 建议的更安全的选项是使用 Microsoft Entra 应用程序或用户分配的托管标识登录 OpenID Connect。 如有必要,还可以使用服务主体和机密登录。 此方法不太安全,不建议这样做。
生成部署凭据
若要凭借 OIDC 使用 Azure 登录操作,需要在 Microsoft Entra 应用程序或用户分配的托管标识上配置联合标识凭据。
选项 1:Microsoft Entra 应用程序
- 通过 Azure 门户、Azure CLI 或 Azure PowerShell 创建具有服务主体的 Microsoft Entra 应用程序。
- 复制客户端 ID、订阅 ID 和目录(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
- 由 Azure 门户、Azure CLI 或 azure PowerShell 为服务主体分配适当的角色。
- 在 Microsoft Entra 应用程序上配置联合标识凭据,以信任 GitHub Actions 颁发的令牌到 GitHub 存储库。
选项 2:用户分配的托管标识
- 创建用户分配的托管标识。
- 复制客户端 ID、订阅 ID 和目录(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
- 为用户分配的托管标识分配适当的角色。
- 在用户分配的托管标识上配置联合标识凭据,以信任 GitHub Actions 颁发给 GitHub 存储库的令牌。
创建机密
需要向登录操作提供应用程序的“客户端 ID”、“目录(租户) ID”和“订阅 ID”。 这些值可直接在工作流中提供,或可存储在 GitHub 机密中并在工作流中引用。 将这些值保存为 GitHub 机密是更安全的选择。
在 GitHub 中,转到存储库。
选择“安全性”>“机密和变量”>“操作”。
选择“新建存储库机密”。
注意
若要增强公共存储库中的工作流安全性,请使用环境机密而不是存储库机密。 如果环境需要批准,作业在所需的审查者批准之前不能访问环境机密。
为
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
创建机密。 从 GitHub 机密的 Microsoft Entra 应用程序或用户分配的托管标识复制这些值:GitHub 机密 Microsoft Entra 应用程序或用户分配的托管标识 AZURE_CLIENT_ID 客户端 ID AZURE_SUBSCRIPTION_ID 订阅 ID AZURE_TENANT_ID (Azure租户ID) 目录(租户)ID 注意
出于安全原因,我们建议使用 GitHub 机密,而不是将值直接传递到工作流。
步骤 3:更新 setup.sh
以连接到 Azure 机器学习工作区
需要更新 CLI 安装文件变量以匹配工作区。
在分支存储库中,转到
azureml-examples/cli/
。编辑
setup.sh
并更新文件中的这些变量。变量 说明 GROUP 资源组的名称 位置 工作区的位置(例如 eastus2
)工作区 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 计划运行,也在匹配的分支和路径发出拉取请求时运行。 详细了解触发工作流的事件。 - 在工作流的作业部分中,签出代码并使用 OpenID Connect 通过 Azure 登录操作登录到 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@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - 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 存储库来清理部署的资源。