category
该参考体系结构展示了如何使用Azure DevOps和Azure机器学习为人工智能应用程序实现持续集成(CI)、持续交付(CD)和再培训管道。该解决方案建立在scikit学习糖尿病数据集的基础上,但可以很容易地适应任何人工智能场景和其他流行的构建系统,如Jenkins或Travis。
GitHub上提供了该体系结构的参考实现。
架构
机器学习DevOps架构图。
下载此体系结构的Visio文件。
工作流
此体系结构由以下服务组成:
- Azure管道。此构建和测试系统基于Azure DevOps,用于构建和发布管道。Azure管道将这些管道分解为称为任务的逻辑步骤。例如,Azure CLI任务使使用Azure资源变得更容易。
- Azure机器学习是一项用于大规模培训、评分、部署和管理机器学习模型的云服务。该体系结构使用Azure机器学习Python SDK创建工作空间、计算资源、机器学习管道和评分图像。Azure机器学习工作区提供了实验、训练和部署机器学习模型的空间。
- Azure机器学习计算是一个按需的虚拟机集群,具有自动缩放和GPU和CPU节点选项。培训作业在此集群上执行。
- Azure机器学习管道提供了可重复使用的机器学习工作流,这些工作流可以跨场景重复使用。对于这个用例,训练、模型评估、模型注册和图像创建在这些管道中以不同的步骤进行。管道在构建阶段结束时发布或更新,并在新数据到达时触发。
- Azure Blob存储。Blob容器用于存储来自评分服务的日志。在这种情况下,收集输入数据和模型预测。经过一些转换后,这些日志可以用于模型再训练。
- Azure容器注册表。评分Python脚本被打包为Docker映像,并在注册表中进行版本控制。
- Azure容器实例。作为发布管道的一部分,通过将评分Web服务映像部署到容器实例来模拟QA和暂存环境,这提供了一种简单、无服务器的方式来运行容器。
- Azure Kubernetes服务。一旦在QA环境中彻底测试了评分Web服务映像,它就会部署到托管Kubernetes集群上的生产环境中。
- Azure应用程序见解。此监控服务用于检测性能异常。
MLOps管道
该解决方案使用软件工程师已经熟悉的工具演示了人工智能项目各个阶段的端到端自动化。机器学习问题很简单,可以将注意力集中在DevOps管道上。该解决方案使用scikit学习糖尿病数据集,并建立岭线性回归模型来预测糖尿病的可能性。
此解决方案基于以下三条管线:
- 构建管道。构建代码并运行一套测试。
- 重新培训管道。在明细表中或新数据可用时重新搜索模型。
- 释放管道。操作评分图像,并在不同环境中安全地推广。
下一节将介绍这些管道中的每一条。
构建管道
- 每次签入代码时,CI管道都会被触发。它在构建代码并运行一套测试后发布更新的Azure机器学习管道。生成管道由以下任务组成:
- 代码质量。这些测试确保代码符合团队的标准。
- 单元测试。这些测试确保代码能够工作,具有足够的代码覆盖率,并且是稳定的。
- 数据测试。这些测试验证数据样本是否符合预期的模式和分布。为其他用例自定义此测试,并将其作为一个单独的数据健全性管道运行,该管道在新数据到达时被触发。例如,将数据测试任务移动到数据接收管道,以便可以更早地进行测试。
笔记
您应该考虑为用于训练机器学习模型的数据启用DevOps实践,但本文没有涉及这一点。有关数据摄取管道的CI/CD架构和最佳实践的更多信息,请参阅数据摄取管道中的DevOps。
在设置Azure机器学习和Python SDK的基础设施时,会发生以下一次性任务:
- 创建承载所有Azure机器学习相关资源的工作区。
- 创建运行培训作业的计算资源。
- 使用更新的训练脚本创建机器学习管道。
- 将机器学习管道发布为REST端点,以协调培训工作流程。下一节将介绍此步骤。
再培训管道
机器学习流水线以异步方式协调重新训练模型的过程。可以通过调用上一步中发布的管道REST端点,在计划中或新数据可用时触发重新训练。
该管道包括以下步骤:
- 模型型号。训练Python脚本在Azure机器学习计算资源上执行,以获得存储在运行历史中的新模型文件。由于培训是人工智能项目中计算密集度最高的任务,因此该解决方案使用Azure机器学习计算。
- 评估模型。一个简单的评估测试将新模型与现有模型进行比较。只有当新型号更好时,它才会得到推广。否则,将不注册模型,并取消管道。
- 寄存器模型。重新培训的模型已在Azure机器学习模型注册表中注册。该服务提供了模型的版本控制以及元数据标签,因此可以轻松地对其进行复制。
发布管道
这个管道展示了如何在不同的环境中操作评分形象并安全地推广它。该管道分为两个环境,QA和生产环境:
QA环境
- 模型工件触发器。每当有新工件可用时,就会触发发布管道。注册到Azure机器学习模型管理的新模型被视为发布工件。在这种情况下,每个注册的新模型都会触发一个管道。
- 创建一个记分图像。注册的模型与评分脚本和Python依赖项(Conda YAML文件)一起打包到操作Docker映像中。该映像会自动通过Azure容器注册表进行版本控制。
- 在容器实例上部署。此服务用于创建非生产环境。评分图像也部署在这里,这主要用于测试。Container Instances提供了一种简单快捷的方法来测试Docker映像。
- 测试web服务。一个简单的API测试可以确保成功部署映像。
生产环境
在Azure Kubernetes服务上部署。此服务用于在生产环境中将评分映像部署为大规模的web服务。- 测试web服务。一个简单的API测试可以确保成功部署映像。
注意事项
这些注意事项实现了Azure架构良好的框架的支柱,这是一套可用于提高工作负载质量的指导原则。有关详细信息,请参阅Microsoft Azure架构良好的框架。
可扩展性
Azure DevOps上的构建管道可以针对任何规模的应用程序进行扩展。生成管道的最大超时时间因其运行的代理而异。生成可以永远在自托管代理(专用代理)上运行。对于公共项目的Microsoft托管代理,生成可以运行六个小时。对于私人项目,限制为30分钟。
要使用最大超时,请在Azure Pipelines YAML文件中设置以下属性:
YAML
jobs:
- job: <job_name>
timeoutInMinutes: 0
理想情况下,让构建管道快速完成,只执行单元测试和其他测试的子集。这使您能够快速验证更改,并在出现问题时进行修复。在非工作时间运行长时间运行的测试。
发布管道发布实时评分web服务。为了方便起见,QA环境的发布是使用Container Instances完成的,但您可以使用在QA/QC staging环境中运行的另一个Kubernetes集群。
根据Azure Kubernetes服务集群的大小扩展生产环境。集群的大小取决于所部署的评分web服务的预期负载。对于实时评分体系结构,吞吐量是一个关键的优化指标。对于非深度学习场景,CPU应该足以处理负载;然而,对于深度学习工作负载,当速度成为瓶颈时,GPU通常比CPU提供更好的性能。Azure Kubernetes服务同时支持CPU和GPU节点类型,这就是该解决方案将其用于映像部署的原因。有关更多信息,请参阅深度学习模型部署的GPU与CPU。
根据Azure机器学习计算资源中的节点数量上下扩展再培训管道,并使用自动扩展选项来管理集群。此体系结构使用CPU。对于深度学习工作负载,GPU是更好的选择,并且由Azure机器学习计算支持。
管理
监督再培训工作。机器学习管道协调跨机器集群的再培训,并提供一种简单的方法来监控它们。使用Azure机器学习UI并在管道部分下查看日志。或者,这些日志也被写入blob,也可以使用Azure Storage Explorer等工具从那里读取。
登录中。Azure机器学习提供了一种简单的方式来记录机器学习生命周期的每一步。日志存储在blob容器中。有关详细信息,请参阅在Azure机器学习中启用日志记录。要进行更丰富的监视,请将Application Insights配置为使用日志。
安全所有机密和凭据都存储在Azure密钥库中,并使用变量组在Azure管道中访问。
成本优化
成本优化是指寻找减少不必要费用和提高运营效率的方法。有关更多信息,请参阅成本优化支柱概述。
Azure DevOps对开源项目和最多有五个用户的小型项目是免费的。对于较大的团队,根据用户数量购买计划。
计算是该体系结构中最大的成本驱动因素,其成本因用例而异。此体系结构使用Azure机器学习计算,但也提供其他选项。Azure机器学习不会在支持计算集群的虚拟机成本之外添加任何附加费。将计算集群配置为至少有0个节点,这样在不使用时,它可以缩减到0个节点而不会产生任何成本。计算成本取决于节点类型、节点数量和供应模式(低优先级或专用)。您可以使用Azure定价计算器估计机器学习和其他服务的成本。
部署此场景
要部署此参考体系结构,请按照GitHub repo中《入门》指南中描述的步骤进行操作。
This article is maintained by Microsoft. It was originally written by the following contributors. Principal author:
Contributors
Next steps
- 登录 发表评论
- 6 次浏览
最新内容
- 1 day 22 hours ago
- 1 day 22 hours ago
- 1 day 22 hours ago
- 1 day 22 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago
- 2 days 23 hours ago