在边缘构建一个完整的MLOps管道,用于视觉质量检查-第2部分
构建完整视觉质量检查的边缘MLOps管道-第2部分
在这个系列的第一部分中,我们为边缘视觉质量检查用例绘制了一个端到端MLOps流水线的架构。它被设计成自动化整个机器学习(ML)过程,从数据标注到模型训练和边缘部署。专注于托管和无服务器服务降低了您对流水线基础架构的操作需求,并使您能够快速入门。
在本文中,我们将深入探讨标注、模型构建和训练部分的流水线实现方式。如果您特别关注架构的边缘部署方面,可以直接跳转到第三部分。我们还提供了一个配套的GitHub存储库,如果您想自行部署和尝试。
解决方案概述
本系列中使用的示例用例是一个视觉质量检查解决方案,可以检测金属标签上的瑕疵,可以作为制造过程的一部分进行部署。下图显示了我们在本系列开始时定义的MLOps流水线的高级架构。如果您还没有阅读过它,我们建议您查看第一部分。
自动化数据标注
数据标注是一项劳动密集型的任务,涉及人类(标注员)对数据进行标注。对于我们的用例,标注意味着检查图像并为可见的每个瑕疵绘制边界框。这听起来可能很简单,但我们需要注意一些事项以实现自动化:
- 为标注员提供绘制边界框的工具
- 管理标注员团队
- 确保良好的标注质量
- 管理和版本化我们的数据和标注
- 协调整个过程
- 将其集成到CI/CD系统中
我们可以使用AWS服务完成所有这些工作。为了简化标注并管理我们的工作团队,我们使用Amazon SageMaker Ground Truth,这是一个数据标注服务,可以让您构建和管理自己的数据标注工作流程和工作人员。您可以管理自己的私人标注员团队,或者通过Amazon Mechanical Turk或第三方提供商利用外部标注员的能力。
此外,整个流程可以通过AWS SDK进行配置和管理,这是我们用来编排标注工作流程的CI/CD流水线的一部分。
标注工作用于管理标注工作流程。SageMaker Ground Truth为许多不同的标注任务类型提供开箱即用的模板,包括绘制边界框。有关如何为边界框任务设置标注工作的详细信息,可以查看在Amazon SageMaker Ground Truth中简化YOLO目标检测的数据标注。对于我们的用例,我们调整了用于边界框任务的任务模板,并使用由Mechanical Turk提供的人工标注者默认标注我们的图像。以下截图显示了标注员在处理图像时所看到的界面。
下面让我们来谈谈标签质量。我们的标签质量将影响我们的机器学习模型的质量。当使用像 Mechanical Turk 这样的外部人力资源自动标记图像时,由于缺乏领域专业知识,确保良好和一致的标签质量是具有挑战性的。有时需要一个专家团队。然而,在我们的示例解决方案中,我们使用 Mechanical Turk 来实现图像的自动标注。
有很多方法可以确保良好的标签质量。有关最佳实践的更多信息,请参考 AWS re:Invent 2019 的演讲,使用 Amazon SageMaker Ground Truth 构建准确的训练数据集。作为这个示例解决方案的一部分,我们决定重点关注以下几点:
最后,我们需要考虑如何存储我们的标签,以便以后重复使用进行训练,并实现使用的模型训练数据的可追溯性。SageMaker Ground Truth 标签任务的输出是一个以 JSON-lines 格式存储的文件,其中包含标签和其他元数据。我们决定使用离线存储的Amazon SageMaker 特征商店来存储我们的标签。与简单地将标签存储在Amazon Simple Storage Service(Amazon S3)上相比,它给我们带来了一些独特的优势:
- 它存储了特征值的完整历史记录,并结合了时点查询。这使我们能够轻松对数据集进行版本控制,并确保可追溯性。
- 作为一个中央特征商店,它促进了数据的可重用性和可见性。
有关 SageMaker 特征商店的介绍,请参考入门 Amazon SageMaker 特征商店。SageMaker 特征商店支持以表格格式存储特征。在我们的示例中,我们为每个标记图像存储以下特征:
- 图像在 Amazon S3 上存储的位置
- 图像尺寸
- 边界框坐标和类别值
- 一个表示标签是否已被批准用于训练的状态标志
- 用于创建该标签的标注工作名称
下图显示了特征商店中典型条目的样式。
使用这种格式,我们可以轻松查询特征商店,并使用像 Pandas 这样的熟悉工具构建用于后续训练的数据集。
数据标注的编排
最后,现在是自动化和编排我们标注流程中的每个步骤的时候了!为此,我们使用AWS Step Functions,这是一项无服务器工作流服务,为我们提供了与 API 集成的能力,可以快速编排和可视化工作流程中的各个步骤。我们还使用一组AWS Lambda函数来处理一些更复杂的步骤,具体包括以下内容:
- 检查 Amazon S3 中是否有需要进行标注的新图像
- 准备所需输入格式的数据并开始标注任务
- 准备所需输入格式的数据并开始标签验证任务
- 将最终的标签集写入特征商店
下图展示了完整的步骤函数标记状态机的样子。
标记:基础架构部署和与CI/CD集成
最后一步是将步骤函数工作流集成到我们的CI/CD系统中,并确保我们部署所需的基础架构。为了完成这个任务,我们使用AWS Cloud Development Kit(AWS CDK)来创建所有所需的基础架构,例如Lambda函数和步骤函数工作流。使用AWS CDK的CDK Pipelines,我们在AWS CodePipeline中创建了一个流水线,用于部署对基础架构的更改,并触发另一个流水线来启动步骤函数工作流。CodePipeline中的步骤函数集成使得这个任务变得非常简单。我们使用Amazon EventBridge和CodePipeline Source操作来确保流水线在计划时间触发以及在git推送更改时触发。
下图详细展示了标记CI/CD架构的样子。
自动化数据标记回顾
现在我们有了一个能够自动从未标记的金属标签图像创建标签的工作流程,使用SageMaker Ground Truth。这些图像从Amazon S3获取,并输入到SageMaker Ground Truth的标记作业中。在图像被标记后,我们使用标记验证作业进行质量检查。最后,将标签存储在SageMaker Feature Store中的特征组中。如果您想自己尝试工作示例,请查看附带的GitHub存储库。接下来,让我们看一下如何自动化模型构建!
自动化模型构建
与标记类似,让我们深入了解我们的模型构建工作流程。至少,我们需要协调以下步骤:
- 从特征存储库中获取最新特征
- 准备数据进行模型训练
- 训练模型
- 评估模型性能
- 版本化和存储模型
- 如果性能可接受,则批准将模型部署
模型构建过程通常由数据科学家驱动,是使用笔记本电脑或Python代码进行一系列实验的结果。我们可以遵循一个简单的三步过程,将实验转化为完全自动化的MLOps工作流程:
- 将现有的预处理、训练和评估代码转换为命令行脚本。
- 创建SageMaker流水线定义,以协调模型构建。使用在第一步创建的脚本作为处理和训练步骤的一部分。
- 将流水线集成到您的CI/CD工作流程中。
这个三步过程是通用的,并可用于您选择的任何模型架构和ML框架。让我们按照这个过程开始,从第一步创建以下脚本:
- preprocess.py – 这个脚本从SageMaker Feature Store中获取标记图像,拆分数据集,并将其转换为我们模型训练所需的格式,在我们的例子中是YOLOv8的输入格式
- train.py – 这个脚本使用PyTorch训练一个Ultralytics YOLOv8目标检测模型,用于检测金属标签图像上的划痕
组织模型构建
在第二步中,我们将这些脚本捆绑到训练和处理作业中,并定义最终的SageMaker流水线,如下图所示。
它包括以下步骤:
- ProcessingStep:从SageMaker特征存储加载最新特征;将数据集拆分为训练、验证和测试集,并将数据集存储为tarball以供训练使用。
- TrainingStep:使用训练、验证和测试数据集训练模型,并导出平均准确率(mAP)指标。
- ConditionStep:评估训练模型的mAP指标值是否高于配置的阈值。如果是,则运行RegisterModel步骤,将训练模型注册到SageMaker模型注册表中。
如果您对详细的流水线代码感兴趣,请查看我们示例存储库中的流水线定义。
训练:基础设施部署和集成到CI/CD
现在,到了第三步:集成到CI/CD工作流程。我们的CI/CD流水线遵循之前在标注部分中所示的相同模式。我们使用AWS CDK从CodePipeline部署所需的流水线。唯一的区别是我们使用Amazon SageMaker Pipelines而不是Step Functions。SageMaker流水线定义是作为CodePipeline中的CodeBuild操作的一部分构建和触发的。
结论
我们现在已经拥有了一个完全自动化的SageMaker标注和模型训练工作流程。我们首先从实验代码创建了命令行脚本。然后我们使用SageMaker Pipelines来组织每个模型训练工作流程的步骤。命令行脚本被整合为训练和处理步骤的一部分。在流水线的最后,训练好的模型被版本化并注册到SageMaker模型注册表中。
请查看这个系列的第三部分,我们将更详细地介绍我们MLOps工作流程的最后一步。我们将创建一个流水线,使用AWS IoT Greengrass将模型编译并部署到边缘设备上!