构建一条端到端的边缘视觉质量检验的MLOps流水线 – 第一部分
打造一条全面边缘视觉质量检验的MLOps流水线 - 第一篇
在生产环境中成功部署机器学习(ML)模型,极大地依赖于端到端的ML流水线。尽管开发这样的流水线可能具有挑战性,但处理边缘ML用例时就变得更加复杂。边缘机器学习是一个概念,它将在边缘设备上本地运行ML模型的能力带到了。为了在边缘部署、监控和维护这些模型,需要一个强大的MLOps流水线。 MLOps流水线可以自动化从数据标记到模型训练和部署的全流程。
在边缘实施MLOps流水线会引入额外的复杂性,增加了操作开销,使自动化、集成和维护过程更加具有挑战性。然而,使用像Amazon SageMaker和AWS IoT Greengrass这样的专用服务可以显著减少这个工作量。在本系列文章中,我们将指导您通过使用SageMaker,AWS IoT Greengrass和AWS Cloud Development Kit(AWS CDK)为边缘计算视觉用例架构和构建集成的端到端MLOps流水线的过程。
本文重点介绍设计整体MLOps流水线架构的过程;这个系列的第2部分和第3部分专注于实施各个组件。我们在相关的GitHub存储库提供了一个样例实现,供您自己尝试。如果您在AWS上初次接触边缘MLOps,请参考“使用Amazon SageMaker Edge Manager和AWS IoT Greengrass进行边缘MLOps”以获得概述和参考架构。
案例:检查金属标牌的质量
作为一个机器学习工程师,了解您所从事的业务案例非常重要。因此,在我们深入研究MLOps流水线架构之前,让我们先看一下本文的示例用例。想象一下一个制造商的生产线,他们通过雕刻金属标牌来制作定制行李标签。质量保证流程是昂贵的,因为需要手动检查未经处理的金属标牌是否有瑕疵,如划痕。为了使这个过程更加高效,我们使用机器学习在流程的早期阶段就能检测到有问题的标牌。这有助于避免生产过程后期出现昂贵的瑕疵。该模型应该能够实时识别可能存在的瑕疵,如划痕,并标记它们。在制造车间环境中,通常要面临无连接性或受限带宽和增加的延迟。因此,我们希望在边缘实现一个基于视觉质量检查的ML解决方案,可以在车间内本地运行推理,并减少连接性要求。为了让我们的例子简单明了,我们训练了一个模型,将检测到的划痕用边界框标出。以下图像是我们数据集中一个标签的示例,有三个划痕被标记出来。
定义流水线架构
现在我们对使用案例和我们需要解决的具体ML问题有了清晰的认识,这都与边缘的目标检测有关。现在是为我们的MLOps流水线起草架构的时候了。在这个阶段,我们还没有涉及到具体的技术或特定的服务,而是关注流水线的高级组件。为了能够快速重新训练和部署,我们需要自动化整个端到端的过程:从数据标记、训练到推理。然而,有一些挑战使针对边缘用例建立流水线变得特别困难:
- 构建这个过程的不同部分需要不同的技能。例如,数据标记和训练需要有较强的数据科学专业背景,边缘部署需要物联网(IoT)专家,而整个自动化过程通常由具有DevOps技能的人来完成。
- 根据您的组织,这整个过程甚至可能由多个团队来实施。对于我们的用例,我们假设不同的团队负责标记、训练和部署。
- 更多的角色和技能意味着在工具和流程方面有不同的要求。例如,数据科学家可能想要监控和使用他们熟悉的笔记本环境。MLOps工程师希望使用基础设施即代码(IaC)工具进行工作,可能对AWS Management Console更熟悉。
这对我们的流水线架构意味着什么?
首先,清晰地定义允许不同团队独立工作的端到端系统的主要组件至关重要。其次,必须定义良好的团队之间的接口以增强协作效率。这些接口有助于最小化团队之间的中断,使他们能够根据需要修改其内部流程,只要他们遵守定义的接口即可。下图展示了我们的计算机视觉流水线可能的样子。
让我们详细审视MLOps流水线的总体架构:
- 流程始于在生产环境中使用边缘摄像设备捕获的一系列原始金属标签图像,以形成初始的训练数据集。
- 下一步涉及标记这些图像并使用边界框标记缺陷。对标记的数据集进行版本控制是必要的,以确保使用的训练数据可追溯和可靠。
- 在我们有了标记的数据集之后,我们可以进行模型的训练、微调、评估和版本控制。
- 当我们对模型的性能感到满意时,我们可以将模型部署到边缘设备并在边缘进行实时推理。
- 在模型在生产中运行时,边缘摄像设备会生成包含以前未见的缺陷和边界情况的宝贵图像数据。我们可以利用这些数据进一步增强模型的性能。为此,我们保存模型预测置信度较低或错误预测的图像。然后将这些图像重新添加到原始数据集中,重新启动整个流程。
需要注意的是,原始图像数据、标记的数据集和训练好的模型充当了明确定义的不同流水线之间的接口。MLOps工程师和数据科学家可以灵活选择流水线中的技术,只要他们始终产生这些产品。最重要的是,我们建立了一个闭环反馈机制。在生产中发生故障或置信度较低的预测可以用于定期扩充我们的数据集,并自动重新训练和增强模型。
目标架构
现在高层架构已经确定,是时候深入了解如何使用AWS服务构建架构了。请注意,本文中所示的架构假定您希望完全控制整个数据科学流程。然而,如果您刚开始在边缘进行质量检查,我们推荐使用Amazon Lookout for Vision。它提供了一种无需构建、维护或理解机器学习代码即可训练自己的质量检查模型的方法。有关更多信息,请参阅Amazon Lookout for Vision现在支持边缘产品缺陷视觉检查。
然而,如果您想自己完全控制,以下图示展示了一个可能的架构。
与前面类似,让我们逐步了解工作流并确定哪些AWS服务适合我们的需求:
- 使用Amazon Simple Storage Service(Amazon S3)存储原始图像数据,因为它为我们提供了一个低成本的存储解决方案。
- 使用AWS Step Functions编排标记工作流程,它是一个无服务器工作流引擎,可以轻松编排标记工作流程的各个步骤。作为该工作流程的一部分,我们使用Amazon SageMaker Ground Truth使用标注作业和受控人工劳动力全自动进行标注。使用AWS Lambda来准备数据、启动标注作业并将标签存储在Amazon SageMaker Feature Store中。
- SageMaker Feature Store用于存储标签。它允许我们集中管理和共享特征,并提供内置的数据版本控制功能,使我们的流水线更加健壮。
- 我们使用Amazon SageMaker Pipelines编排模型构建和训练流水线。它通过内置步骤与其他所需的SageMaker功能集成。使用SageMaker Training jobs自动进行模型训练,使用SageMaker Processing jobs准备数据和评估模型性能。在此示例中,我们使用Ultralytics YOLOv8 Python包和模型架构进行训练,并将对象检测模型导出为ONNX ML模型格式以实现可移植性。
- 如果性能可接受,训练好的模型将在Amazon SageMaker Model Registry中注册,并附有增量版本号。它充当我们模型训练和边缘部署步骤之间的接口。在此处,我们还管理模型的批准状态。与其他使用的服务类似,它是完全托管的,因此我们无需自行管理基础设施。
- 使用Step Functions自动化边缘部署工作流程,与标注工作流程类似。我们可以使用Step Functions的API集成轻松调用各种所需的AWS服务API,如AWS IoT Greengrass,创建新的模型组件,然后将这些组件部署到边缘设备。
- 使用AWS IoT Greengrass作为边缘设备的运行环境。它管理我们的模型和推理组件在边缘的部署生命周期。我们可以使用各种AWS和社区提供的AWS IoT Greengrass组件连接其他服务。
所述的架构类似于我们之前展示的高级架构。Amazon S3、SageMaker特征存储和SageMaker模型注册表充当不同管道之间的接口。为了尽量减少解决方案的运行和操作工作量,我们尽量使用托管和无服务器服务。
融入稳健的CI/CD系统
数据标注、模型训练和边缘部署步骤是我们解决方案的核心。因此,任何涉及这些部分的底层代码或数据的更改都应触发整个协调过程的新运行。为了实现这一点,我们需要将此流水线集成到允许我们将版本化代码存储库中的代码和基础设施更改自动部署到生产环境的CI/CD系统中。与前面的架构类似,团队自治在这里是一个重要的因素。下图显示了使用AWS服务实现的可能效果。
让我们详细了解CI/CD架构:
- AWS CodeCommit是我们的Git存储库。为了简单起见,在我们提供的示例中,我们通过子文件夹在单个git存储库中分离了不同的部分(标注、模型训练、边缘部署)。在实际情况下,每个团队可能会为每个部分使用不同的存储库。
- 使用AWS CDK自动化基础架构部署,每个部分(标注、训练和边缘)都有自己的AWS CDK应用程序,允许独立部署。
- AWS CDK管道功能使用AWS CodePipeline自动化基础架构和代码部署。
- AWS CDK为每个步骤部署了两个代码流水线:一个资产流水线和一个工作流程流水线。我们将工作流程与资产部署分开,以便在没有资产更改时单独启动工作流程(例如,当有新的图片可用于训练时)。
- 资产代码流水线部署了所有为工作流程成功运行所需的基础架构,例如AWS身份和访问管理(IAM)角色、Lambda函数和训练过程中使用的容器映像。
- 工作流程代码流水线运行实际的标注、训练或边缘部署工作流程。
- 资产流水线会在提交时自动触发,以及在先前的工作流程流水线完成时触发。
- 整个过程会根据计划表以及通过Amazon EventBridge规则定期重新训练来触发。
通过CI/CD集成,整个端到端链条现在完全自动化。流水线会在我们的git存储库中的代码更改以及按计划触发,以适应数据变化。
展望未来
所述的解决方案架构代表了在边缘构建端到端MLOps流水线的基本组件。然而,根据您的需求,您可能考虑添加其他功能。以下是一些示例:
- 引入多账户设置以提高安全性。有关更多详细信息,请参阅使用Amazon SageMaker Edge Manager和AWS IoT Greengrass在边缘进行MLOps。
- 将架构放入蓝图中,以便其他团队可以重用,例如使用SageMaker Projects。有关更多信息,请参阅构建自定义SageMaker项目模板-最佳实践。
结论
在本文中,我们概述了使用AWS服务构建端到端边缘视觉质量检查的MLOps流水线的架构。该架构简化了整个过程,包括数据标注、模型开发和边缘部署,使我们能够快速可靠地训练和实施新版本的模型。通过使用无服务器和托管服务,我们可以将注意力集中在提供业务价值上,而不是管理基础架构。
在这个系列的第2部分中,我们将深入研究并更详细地了解此架构的实现,特别是标注和模型构建。如果你想直接跳转到代码部分,你可以查看相关的GitHub存储库。