Press "Enter" to skip to content

在边缘构建端到端的MLOps管道用于视觉质量检查 – 第3部分

这是我们设计和实施边缘视觉质量检测的MLOps管道的第3部分。在本文中,我们将重点介绍如何自动化MLOps管道的边缘部署环节。我们将向您展示如何使用AWS IoT Greengrass来管理边缘端的模型推理,并使用AWS Step Functions和其他AWS服务来自动化该过程。

解决方案概述

在本系列的第1部分中,我们提出了一个用于自动化整个机器学习(ML)过程(从数据标注到模型训练和边缘部署)的MLOps管道的架构。在第2部分中,我们展示了如何自动化管道的标注和模型训练部分。

本系列中使用的样例用例是一种可在制造过程中部署的可视质量检测解决方案,用于检测金属标签上的缺陷。以下图表显示了我们在本系列开始时定义的MLOps管道的高级架构。如果您尚未阅读过,请务必查看第1部分

架构图

自动化ML模型的边缘部署

在完成ML模型的训练和评估之后,需要将其部署到生产系统中,通过对传入数据进行预测来产生商业价值。在边缘环境中,这个过程往往变得复杂,因为模型需要部署和运行在离云环境远的设备上。以下是边缘机器学习面临的一些特殊挑战:

  • 由于边缘设备资源限制,ML模型通常需要进行优化
  • 边缘设备不能像云中的服务器那样重新部署或替换,因此需要一个强大的模型部署和设备管理过程
  • 设备与云之间的通信需要高效和安全,因为通常需要经过不受信任的低带宽网络

让我们看看如何使用AWS服务来解决这些挑战,同时将模型导出为ONNX格式,这样我们可以对其进行一些优化(如量化)以减小约束设备的模型大小。ONNX还提供了针对最常用边缘硬件平台的优化运行时。

将边缘部署过程拆分开来,我们需要两个组件:

  • 用于模型交付的部署机制,包括模型本身和一些用于管理和与模型交互的业务逻辑
  • 可以编排整个过程以使其稳健和可重复的工作流引擎

在这个例子中,我们使用不同的AWS服务构建我们的自动化边缘部署机制,将我们讨论的所有必需组件集成在一起。

首先,我们模拟一个边缘设备。为了使您能够顺利完成端到端工作流,我们使用一个Amazon Elastic Compute Cloud(Amazon EC2)实例在其中安装AWS IoT Greengrass Core软件来模拟边缘设备。您还可以在将组件部署到实际边缘生产设备之前,使用EC2实例验证不同组件。AWS IoT Greengrass是一个开源的物联网(IoT)边缘运行时和云服务,可帮助您构建、部署和管理边缘设备软件。AWS IoT Greengrass以安全可扩展的方式降低了构建、部署和管理边缘设备软件的工作量。在设备上安装AWS IoT Greengrass Core软件后,您可以添加或删除功能和组件,并使用AWS IoT Greengrass管理您的物联网设备应用程序。它提供了许多内置组件,使您的生活更加便捷,例如StreamManager和MQTT代理组件,您可以使用它们安全地与云进行通信,支持端到端加密。您可以利用这些功能高效地上传推理结果和图像。

在生产环境中,通常会有一台工业相机提供图像,ML模型应该生成预测结果。对于我们的设置,我们通过将一组图像预设上传到边缘设备上的特定目录来模拟这个图像输入。然后,我们使用这些图像作为模型的推断输入。

我们将整个部署和推理过程分为三个连续的步骤来将云端训练的ML模型部署到边缘环境并用于预测:

  1. 准备 – 打包训练模型以进行边缘部署。
  2. 部署 – 将模型和推理组件从云端传输到边缘设备。
  3. 推理 – 加载模型并运行图像预测的推理代码。

以下架构图显示了这个三步骤过程的详细信息以及我们如何使用AWS服务实现它。

推理过程

在接下来的章节中,我们将讨论每个步骤的细节,并展示如何将这个过程嵌入到一个自动化和可重复的编排和CI/CD工作流中,用于ML模型和对应的推理代码。

准备

与在强大的CPU和GPU上可以轻松运行ML模型的云端环境相比,边缘设备通常具有有限的计算和内存。不同的模型优化技术允许您调整模型以适应特定的软件或硬件平台,以提高预测速度而不损失准确性。

在这个示例中,我们在训练流程中将训练好的模型导出到ONNX格式,以实现可移植性、可能的优化以及经过优化的边缘运行时,并在Amazon SageMaker Model Registry中注册该模型。在这一步中,我们创建一个包含最新注册模型的新的Greengrass模型组件,用于后续的部署。

部署

在将模型从云端部署到边缘设备时,安全可靠的部署机制是关键。因为AWS IoT Greengrass已经集成了一个强大而安全的边缘部署系统,所以我们在这里使用它来进行部署。在详细了解我们的部署过程之前,让我们简要回顾一下AWS IoT Greengrass部署的工作方式。在AWS IoT Greengrass部署系统的核心是组件,它们定义了部署到运行AWS IoT Greengrass核心的边缘设备的软件模块。这些组件可以是您构建的私有组件,也可以是由AWS或更广泛的Greengrass社区提供的公共组件。多个组件可以作为一个部署的一部分捆绑在一起。部署配置定义了部署中包含的组件和部署的目标设备。它可以通过部署配置文件(JSON)或通过AWS IoT Greengrass控制台在创建新部署时定义。

我们创建了以下两个Greengrass组件,然后通过部署过程将它们部署到边缘设备:

  • 打包的模型(私有组件) – 这个组件包含了训练好的ML模型的ONNX格式。
  • 推理代码(私有组件) – 除了ML模型本身,我们还需要实现一些应用逻辑来处理诸如数据准备、与模型进行推理的通信以及推理结果的后处理等任务。在我们的示例中,我们开发了一个基于Python的私有组件来处理以下任务:
    • 安装所需的运行时组件,如Ultralytics YOLOv8 Python包。
    • 我们通过从特定目录加载准备好的图像,并根据模型的输入要求准备图像数据来模拟摄像机实时流的方式。
    • 使用准备好的图像数据对加载的模型进行推理调用。
    • 检查预测结果并将推理结果上传回云端。

如果您想更深入地了解我们构建的推理代码,请参考GitHub仓库

推断

在上述组件部署完成后,边缘设备上的模型推断过程会自动开始。定制推断组件会定期使用本地目录中的图像运行ML模型。模型返回的每个图像的推断结果是一个包含以下内容的张量:

  • 置信度分数 – 模型对于检测的置信度有多高
  • 物体坐标 – 模型在图像中检测到的划痕物体的坐标(x、y、宽度、高度)

在我们的案例中,推断组件负责将推断结果发送到AWS IoT上的特定MQTT主题中,以便进行进一步的处理。可以通过AWS IoT控制台上的MQTT测试客户端查看这些消息以进行调试。在生产环境中,您可以决定自动通知另一个系统来处理生产线上的故障金属标签。

编排

如前面的部分所示,需要多个步骤来准备和部署一个ML模型,相应的推断代码以及边缘设备上所需的运行时或代理。Step Functions是一个完全托管的服务,允许您编排这些专用步骤并以状态机的形式设计工作流程。这项服务的无服务器性质以及AWS服务API集成等原生Step Functions功能使您能够快速设置这个工作流程。内置的重试或日志记录等功能是构建健壮编排的重要因素。有关状态机定义本身的更多详细信息,请参阅GitHub存储库或在您的账户中部署此示例后在Step Functions控制台上查看状态机图。

基础设施部署和与CI/CD集成

用于集成和构建所有所需基础设施组件的CI/CD流水线遵循本系列的第1部分中所示的相同模式。我们使用AWS Cloud Development Kit (AWS CDK)从AWS CodePipeline部署所需的流水线。

Deployment CDK

经验教训

有多种方式可以构建用于自动化、健壮和安全的ML模型边缘部署系统的架构,这往往非常依赖于使用情况和其他要求。然而,以下是我们想与您分享的一些经验教训:

  • 提前评估额外的AWS IoT Greengrass计算资源需求是否适合您的情况,特别是对于受限的边缘设备。
  • 建立部署机制,在运行边缘设备上的部署工件之前进行验证步骤,以确保在传输过程中没有篡改发生。
  • 将部署组件保持在AWS IoT Greengrass上模块化和自包含,以便能够独立部署它们。例如,如果您有一个相对较小的推断代码模块但是ML模型的大小很大,当仅推断代码发生变化时,您不总是想要同时部署它们。这在带宽有限或边缘设备连接成本高的情况下尤其重要。

结论

这就结束了我们关于在边缘构建端到端MLOps流水线进行视觉质量检查的三部曲。我们研究了将ML模型部署到边缘的附加挑战,如模型打包或复杂的部署编排。我们以完全自动化的方式实现了流水线,以便我们可以以健壮、安全、可重复和可追溯的方式将模型投入生产。请随意使用本系列中开发的架构和实现作为您下一个ML项目的起点。如果您对如何为您的环境构建和构建此类系统有任何问题,请联系我们。有关其他主题和用例,请参阅我们的机器学习物联网博客。

Leave a Reply

Your email address will not be published. Required fields are marked *