此参考体系结构演示如何使用 Azure DevOps 和 Azure 机器学习为 AI 应用程序实现持续集成 (CI)、持续交付 (CD) 和重新训练管道。 该解决方案基于 Scikit-learn 糖尿病数据集构建,但也可以轻松适应任何 AI 场景和其他常用的生成系统,例如 Jenkins 或 Travis。
GitHub 中提供了本体系结构的参考实现。
体系结构
下载此体系结构的 Visio 文件。
工作流
该体系结构包括以下服务:
Azure Pipelines。 此生成和测试系统基于Azure DevOps,用于生成和发布管道。 Azure Pipelines 将这些管道分解为逻辑步骤(称为任务)。 例如,Azure CLI 任务使得使用 Azure 资源更加容易。
Azure 机器学习是用于大规模训练、评分、部署和管理机器学习模型的云服务。 此体系结构使用 Azure 机器学习 Python SDK 创建工作区、计算资源、机器学习管道和评分映像。 Azure 机器学习工作区提供试验、训练和部署机器学习模型的空间。
Azure 机器学习计算是随需应变的虚拟机群集,具有自动缩放和 GPU 和 CPU 节点选项。 训练作业在此群集上执行。
Azure 机器学习管道提供可重用的机器学习工作流,可跨场景重用。 对于此用例,训练、模型评估、模型注册和映像创建在这些管道中的不同步骤中发生。 管道在生成阶段结束时发布或更新,并在新数据到达时触发。
Azure Blob 存储。 Blob 容器用于存储评分服务中的日志。 在这种情况下,将同时收集输入数据和模型预测。 经过一些转换之后,这些日志可用于模型重新训练。
Azure 容器注册表。 评分 Python 脚本打包为 Docker 映像,并在注册表中进行版本控制。
Azure 容器实例。 作为发布管道的一部分,QA 和过渡环境通过将评分 Web 服务映像部署到容器实例来模拟,从而提供一种简单且无服务器的方式来运行容器。
Azure Kubernetes 服务。 在 QA 环境中全面测试评分 Web 服务映像后,将其部署到托管 Kubernetes 群集上的生产环境。
Azure Application Insights。 此监视服务用于检测性能异常。
MLOps 管道
此解决方案演示使用软件工程师熟悉的工具来实现 AI 项目各个阶段的端到端自动化。 机器学习的问题很简单,只需关注 DevOps 管道。 该解决方案使用 Scikit-learn 糖尿病数据集,并建立岭线性回归模型来预测糖尿病的可能性。
此解决方案基于以下三个管道:
- 生成管道。 生成代码并运行一组测试。
- 重新训练管道。 按照计划或当新数据可用时重新训练模型。
- 发布管道。 使评分映像可操作,并在不同的环境中安全地改进它。
后续部分将介绍这些管道。
生成管道
每次签入代码时都会触发 CI 管道。 生成代码并运行一组测试后,它将发布更新的 Azure 机器学习管道。 生成管道包含以下任务:
代码质量。 这些测试确保代码符合团队的标准。
单元测试。 这些测试确保代码正常工作,具有足够的代码覆盖率,并且是稳定的。
数据测试。 这些测试验证数据样本是否符合预期的架构和分发。 根据其他用例自定义此测试,并将其作为单独的数据健全管道运行,当新数据到达时触发该管道。 例如,将数据测试任务移动到数据引入管道,以便可以更早地对其进行测试。
注意
应考虑为用于训练机器学习模型的数据实现 DevOps 做法,但本文未介绍此做法。 有关数据引入管道 CI/CD 的体系结构和最佳做法的详细信息,请参阅数据引入管道的 DevOps。
为 Azure 机器学习和 Python SDK 设置基础结构时,会产生以下一次性任务:
- 创建托管所有Azure 机器学习相关资源的工作区。
- 创建运行训练作业的计算资源。
- 使用更新的训练脚本创建机器学习管道。
- 将机器学习管道发布为 REST 终结点,以协调训练工作流。 下一部分将介绍此步骤。
重新训练管道
机器学习管道以异步方式协调重新训练模型的过程。 可以按计划触发重新训练,也可以通过调用上一步的已发布管道 REST 终结点,在新数据可用时触发重新训练。
此管道包括以下步骤:
训练模型。 训练 Python 脚本在 Azure 机器学习计算资源上执行,以获取存储在运行历史记录中的新模型文件。 由于训练是 AI 项目中计算密集程度最高的任务,因此该解决方案使用 Azure 机器学习计算。
评估模型。 简单的评估测试将新模型与现有模型进行比较。 仅当新模型更好时,它才会得到改进。 否则,模型不会进行注册,并且管道将被取消。
注册模型。 将重新训练的模型注册到 Azure 机器学习模型注册表。 此服务为模型和元数据标记提供版本控制,因此可以轻松地重新生成它们。
发布管道
此管道演示如何使评分映像可操作,并在不同的环境中安全地改进它。 此管道细分为两个环境,即 QA 和生产:
QA 环境
模型项目触发器。 每当有新项目可用时,就会触发发布管道。 注册到 Azure 机器学习模型管理的新模型被视为发布项目。 在这种情况下,为注册的每个新模型触发一个管道。
创建评分映像。 已注册的模型与评分脚本和 Python 依赖项(Conda YAML 文件)一起打包到操作化 Docker 映像中。 此映像通过 Azure 容器注册表自动进行版本控制。
在容器实例上部署。 此服务用于创建非生产环境。 评分映像也部署在这里,主要用于测试。 容器实例提供了一种简单快速的方法来测试 Docker 映像。
测试 Web 服务。 简单的 API 测试可确保映像已成功部署。
生产环境
在 Azure Kubernetes 服务上部署。 此服务用于将评分映像作为 Web 服务在生产环境中大规模部署。
测试 Web 服务。 简单的 API 测试可确保映像已成功部署。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
可伸缩性
可以为任何大小的应用程序缩放 Azure DevOps 上的生成管道。 生成管道的最大超时时间因运行它们的代理而异。 生成管道可以在自托管代理(专用代理)上永远运行。 对于公共项目的 Microsoft 托管代理,生成管道可以运行 6 小时。 对于专用项目,限制为 30 分钟。
若要使用最大超时时间,请在 Azure Pipelines YAML 文件中设置以下属性:
jobs:
- job: <job_name>
timeoutInMinutes: 0
理想情况下,让生成管道快速完成并仅执行单元测试和部分其他测试。 这使你可以快速验证更改,并在出现问题时进行修复。 在非工作时间运行长时间运行的测试。
发布管道发布一个实时评分 Web 服务。 为了方便起见,QA 环境的发布使用容器实例完成,但你可以使用另一个在 QA/过渡环境中运行的 Kubernetes 群集。
根据 Azure Kubernetes 服务群集的大小来缩放生产环境。 群集的大小取决于已部署的评分 Web 服务所需的负载。 对于实时评分体系结构,吞吐量是一个关键的优化指标。 对于非深度学习场景,CPU 应足以处理负载;但对于深度学习工作负载,当速度成为瓶颈时,GPU 通常比 CPU 提供更好的性能。 Azure Kubernetes 服务同时支持 CPU 和 GPU 节点类型,这是此解决方案使用它来部署映像的原因。 有关详细信息,请参阅部署深度学习模型时 GPU 与 CPU 对比。
根据 Azure 机器学习计算资源中的节点数来纵向扩展和缩减重新训练管道,并使用自动缩放选项来管理群集。 此体系结构使用 CPU。 对于深度学习工作负载,GPU 是更好的选择,并且由 Azure 机器学习计算支持。
管理
监视重新训练作业。 机器学习管道协调跨计算机群集的重新训练,并提供监视它们的简便方法。 使用 Azure 机器学习 UI,在管道部分下查看日志。 另外,这些日志也会写入 Blob,并且可以使用 Azure 存储资源管理器等工具从 Blob 中读取。
日志记录。 Azure 机器学习提供了一种简单的方法来记录机器学习生命周期的每一步。 日志存储在 Blob 容器中。 有关详细信息,请参阅在 Azure 机器学习上启用日志记录。 如果需要更丰富的监视功能,请将 Application Insights 配置为使用日志。
安全性。 所有机密和凭据都存储在 Azure Key Vault 中,并在 Azure Pipelines 中使用变量组访问。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述。
Azure DevOps 对于开放源代码项目和最多 5 个用户的小型项目是免费的。 对于较大的团队,需要根据用户数量制定购买计划。
计算是此体系结构中最大的成本驱动因素,其成本因用例而异。 此体系结构使用 Azure 机器学习计算,但也有其他选项。 Azure 机器学习不会在支持计算群集的虚拟机成本的基础上添加任何附加费。 将计算群集配置为至少有 0 个节点,以便在不使用时,它可以缩减到 0 个节点,并且不会产生任何费用。 计算成本取决于节点类型、节点数量和预配模式(低优先级或专用)。 可以使用 Azure 定价计算器来估算机器学习和其他服务的成本。
部署此方案
若要部署此参考体系结构,请遵循 GitHub 存储库中的入门指南中所述的步骤。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Praneet Singh Solanki | 高级软件工程师
后续步骤
- 想了解详细信息吗? 查看相关的学习路径使用 MLOps 启动机器学习生命周期。