VMware 如何使用 GitLab、Amazon MWAA 和 Amazon SageMaker 从头开始​​构建 MLOps 管道

VMware 如何使用 GitLab、Amazon MWAA 和 Amazon SageMaker 从头开始​​构建 MLOps 管道

源节点: 2009167

这篇文章是与 VMware Carbon Black 的机器学习工程师 Mahima Agarwal 和高级工程经理 Deepak Mettem 共同撰写的

VMware炭黑 是一种著名的安全解决方案,可提供针对各种现代网络攻击的保护。 凭借该产品生成的数 TB 数据,安全分析团队专注于构建机器学习 (ML) 解决方案,以发现关键攻击并突出来自噪音的新兴威胁。

对于 VMware Carbon Black 团队而言,设计和构建自定义端到端 MLOps 管道至关重要,该管道可在 ML 生命周期中编排和自动化工作流,并支持模型训练、评估和部署。

构建此管道有两个主要目的:支持数据科学家进行后期模型开发,以及通过在大量和实时生产流量中提供模型来在产品中进行表面模型预测。 因此,VMware Carbon Black 和 AWS 选择使用 亚马逊SageMaker 因为其易用性、多功能性和完全托管的基础设施。 我们使用以下方法编排 ML 训练和部署管道 适用于 Apache Airflow 的 Amazon 托管工作流 (Amazon MWAA),这使我们能够更多地专注于以编程方式创作工作流和管道,而不必担心自动扩展或基础设施维护。

有了这个管道,曾经由 Jupyter notebook 驱动的 ML 研究现在变成了一个将模型部署到生产中的自动化过程,几乎不需要数据科学家的人工干预。 早些时候,训练、评估和部署模型的过程可能需要一天的时间; 有了这个实施,一切都只是一个触发器,并将总时间减少到几分钟。

在这篇博文中,VMware Carbon Black 和 AWS 架构师讨论了我们如何使用 Gitlab、亚马逊 MWAA 和 SageMaker。 我们讨论了迄今为止取得的成就、管道的进一步增强以及在此过程中吸取的经验教训。

解决方案概述

下图说明了 ML 平台架构。

高级解决方案设计

高级解决方案设计

这个 ML 平台被设想和设计为跨各种代码存储库的不同模型使用。 我们的团队使用 GitLab 作为源代码管理工具来维护所有代码存储库。 模型存储库源代码中的任何更改都使用 亚特实验室持续集成,它调用管道中的后续工作流(模型训练、评估和部署)。

下面的架构图说明了端到端的工作流和我们的 MLOps 管道中涉及的组件。

端到端工作流程

端到端工作流程

ML 模型训练、评估和部署管道是使用 Amazon MWAA 编排的,称为 有向无环图 (DAG)。 DAG 是任务的集合,按照依赖关系和关系进行组织,说明它们应该如何运行。

在高层次上,解决方案架构包括三个主要组件:

  • 机器学习流水线代码库
  • 机器学习模型训练和评估流水线
  • 机器学习模型部署流水线

让我们讨论如何管理这些不同的组件以及它们如何相互交互。

机器学习流水线代码库

在模型 repo 将 MLOps repo 集成为其下游管道,并且数据科学家在其模型 repo 中提交代码后,GitLab runner 会执行该 repo 中定义的标准代码验证和测试,并根据代码更改触发 MLOps 管道。 我们使用 Gitlab 的多项目管道在不同的存储库中启用此触发器。

MLOps GitLab 管道运行一组特定的阶段。 它使用pylint进行基本代码验证,将模型的训练和推理代码打包在Docker镜像中,并将容器镜像发布到 Amazon Elastic Container注册 (亚马逊 ECR)。 Amazon ECR 是一个完全托管的容器注册表,提供高性能托管,因此您可以在任何地方可靠地部署应用程序映像和构件。

机器学习模型训练和评估流水线

图片发布后,触发训练和评估 阿帕奇气流 管道通过 AWS Lambda 功能。 Lambda 是一种无服务器、事件驱动的计算服务,可让您为几乎任何类型的应用程序或后端服务运行代码,而无需预置或管理服务器。

成功触发管道后,它会运行训练和评估 DAG,这又会在 SageMaker 中启动模型训练。 在此培训管道结束时,已识别的用户组会通过电子邮件收到包含培训和模型评估结果的通知 亚马逊简单通知服务 (亚马逊 SNS)和 Slack。 Amazon SNS 是用于 A2A 和 A2P 消息传递的完全托管的发布/订阅服务。

在对评估结果进行细致的分析后,如果新训练的模型的性能比以前的版本更好,则数据科学家或 ML 工程师可以部署新模型。 模型的性能是根据特定于模型的指标(例如 F1 分数、MSE 或混淆矩阵)进行评估的。

机器学习模型部署流水线

要开始部署,用户通过相同的 Lambda 函数启动触发部署 DAG 的 GitLab 作业。 管道成功运行后,它会使用新模型创建或更新 SageMaker 端点。 这还会使用 Amazon SNS 和 Slack 通过电子邮件发送包含端点详细信息的通知。

如果任一管道发生故障,用户将通过相同的通信渠道收到通知。

SageMaker 提供实时推理,非常适合具有低延迟和高吞吐量要求的推理工作负载。 这些端点是完全托管的、负载平衡的和自动扩展的,并且可以跨多个可用区部署以实现高可用性。 我们的管道在成功运行后为模型创建这样一个端点。

在以下部分中,我们将扩展不同的组件并深入细节。

GitLab:打包模型和触发管道

我们使用 GitLab 作为我们的代码存储库和用于打包模型代码并触发下游 Airflow DAG 的管道。

多项目流水线

在父管道(上游)是模型存储库而子管道(下游)是 MLOps 存储库的情况下,使用了多项目 GitLab 管道功能。 每个 repo 维护一个 .gitlab-ci.yml,上游管道中启用的以下代码块触发下游 MLOps 管道。

trigger: project: path/to/ml-ops branch: main strategy: depend

上游管道将模型代码发送到触发打包和发布 CI 作业的下游管道。 用于容器化模型代码并将其发布到 Amazon ECR 的代码由 MLOps 管道维护和管理。 它发送像 ACCESS_TOKEN 这样的变量(可以在下面创建 个人设置, 访问)、JOB_ID(访问上游工件)和 $CI_PROJECT_ID(模型回购的项目 ID)变量,以便 MLOps 管道可以访问模型代码文件。 随着 工作工件 来自 Gitlab 的功能,下游 repo 使用以下命令访问远程工件:

curl --output artifacts.zip --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"

模型回购可以通过使用 扩展 来自 GitLab 的关键字,它允许您在不同阶段重用相同的配置。

将模型图像发布到 Amazon ECR 后,MLOps 管道使用 Lambda 触发 Amazon MWAA 训练管道。 用户批准后,它会使用相同的 Lambda 函数触发模型部署 Amazon MWAA 管道。

语义版本控制和向下游传递版本

我们开发了自定义代码来对 ECR 图像和 SageMaker 模型进行版本控制。 MLOps 管道管理图像和模型的语义版本控制逻辑,作为模型代码容器化阶段的一部分,并将版本作为工件传递到后续阶段。

再培训

因为再训练是 ML 生命周期的一个重要方面,我们已经将再训练功能作为我们管道的一部分来实现。 我们使用 SageMaker list-models API 来根据模型重新训练版本号和时间戳来识别它是否正在重新训练。

我们使用以下方法管理再培训管道的每日时间表 GitLab 的调度管道.

Terraform:基础设施设置

除了 Amazon MWAA 集群、ECR 存储库、Lambda 函数和 SNS 主题之外,该解决方案还使用 AWS身份和访问管理 (IAM) 角色、用户和策略; 亚马逊简单存储服务 (Amazon S3) 桶和一个 亚马逊CloudWatch 日志转发器。

为了简化整个管道中涉及的服务的基础设施设置和维护,我们使用 Terraform 将基础架构实现为代码。 每当需要进行基础设施更新时,代码更改都会触发我们设置的 GitLab CI 管道,该管道会验证更改并将更改部署到各种环境中(例如,在开发、阶段和生产帐户中添加对 IAM 策略的权限)。

Amazon ECR、Amazon S3 和 Lambda:管道便利化

我们使用以下关键服务来促进我们的管道:

  • 亚马逊ECR – 为了维护和方便地检索模型容器图像,我们用语义版本标记它们并将它们上传到每个设置的 ECR 存储库 ${project_name}/${model_name} 通过地形。 这在不同模型之间实现了良好的隔离层,并允许我们使用自定义算法并格式化推理请求和响应以包含所需的模型清单信息(模型名称、版本、训练数据路径等)。
  • Amazon S3 – 我们使用 S3 存储桶来保存模型训练数据、每个模型的训练模型工件、Airflow DAG 以及管道所需的其他附加信息。
  • LAMBDA – 由于我们的Airflow集群出于安全考虑部署在单独的VPC中,DAG无法直接访问。 因此,我们使用同样由 Terraform 维护的 Lambda 函数来触发由 DAG 名称指定的任何 DAG。 通过适当的 IAM 设置,GitLab CI 作业会触发 Lambda 函数,该函数通过配置向下传递到请求的训练或部署 DAG。

Amazon MWAA:培训和部署管道

如前所述,我们使用 Amazon MWAA 来编排训练和部署管道。 我们使用在 Airflow 的亚马逊提供商包 与 SageMaker 集成(避免使用 jinja 模板)。

我们在此训练流水线中使用以下运算符(如以下工作流程图所示):

MWAA 培训渠道

MWAA 培训渠道

我们在部署管道中使用以下运算符(如以下工作流程图所示):

模型部署管道

模型部署管道

我们使用 Slack 和 Amazon SNS 在两个管道中发布错误/成功消息和评估结果。 Slack 提供了广泛的选项来自定义消息,包括以下内容:

CloudWatch 和 VMware Wavefront:监控和日志记录

我们使用 CloudWatch 仪表板来配置端点监控和日志记录。 它有助于可视化和跟踪特定于每个项目的各种操作和模型性能指标。 除了为跟踪其中一些设置的自动扩展策略之外,我们还持续监控 CPU 和内存使用率、每秒请求数、响应延迟和模型指标的变化。

CloudWatch 甚至与 VMware Tanzu Wavefront 仪表板集成,因此它可以可视化模型端点的指标以及项目级别的其他服务。

商业利益和下一步是什么

ML 管道对于 ML 服务和功能非常重要。 在本文中,我们讨论了使用 AWS 功能的端到端机器学习用例。 我们使用 SageMaker 和 Amazon MWAA 构建了一个自定义管道,我们可以跨项目和模型重复使用它,并自动化 ML 生命周期,从而将从模型训练到生产部署的时间缩短至短短 10 分钟。

随着 ML 生命周期负担转移到 SageMaker,它为模型训练和部署提供了优化和可扩展的基础设施。 使用 SageMaker 提供的模型帮助我们以毫秒级延迟和监控功能进行实时预测。 我们使用 Terraform 来简化设置和管理基础设施。

该流水线的下一步将是通过再训练功能增强模型训练流水线,无论是计划的还是基于模型漂移检测,支持影子部署或 A/B 测试以实现更快和合格的模型部署,以及 ML 沿袭跟踪。 我们还计划评估 Amazon SageMaker管道 因为现在支持 GitLab 集成。

吸取的经验教训

作为构建此解决方案的一部分,我们了解到您应该尽早进行概括,但不要过度概括。 当我们第一次完成架构设计时,我们尝试为模型代码创建和实施代码模板作为最佳实践。 然而,在开发过程的早期阶段,模板要么过于笼统,要么过于详细,无法在未来的模型中重复使用。

通过管道交付第一个模型后,根据我们之前工作的见解,模板自然而然地出现了。 管道不能从第一天起就做所有事情。

模型实验和生产化通常有非常不同(有时甚至相互冲突)的要求。 作为一个团队从一开始就平衡这些需求并相应地确定优先级是至关重要的。

此外,您可能不需要服务的所有功能。 使用服务的基本功能和模块化设计是更高效开发和灵活管道的关键。

结论

在本文中,我们展示了我们如何使用 SageMaker 和 Amazon MWAA 构建 MLOps 解决方案,该解决方案将模型部署到生产的过程自动化,几乎不需要数据科学家的人工干预。 我们鼓励您评估各种 AWS 服务,例如 SageMaker、Amazon MWAA、Amazon S3 和 Amazon ECR,以构建完整的 MLOps 解决方案。

*Apache、Apache Airflow 和 Airflow 是注册商标或商标 Apache软件基金会 在美国和/或其他国家。


作者简介

 迪帕克·梅特姆 是 VMware 炭黑部门的高级工程经理。 他和他的团队致力于构建基于流的应用程序和服务,这些应用程序和服务具有高可用性、可扩展性和弹性,可以实时为客户提供基于机器学习的解决方案。 他和他的团队还负责创建数据科学家在生产中构建、训练、部署和验证其 ML 模型所必需的工具。

马希玛·阿加瓦尔 是 VMware 炭黑部门的机器学习工程师。
她致力于为 VMware CB SBU 设计、构建和开发机器学习平台的核心组件和架构。

瓦姆什·克里希纳·埃纳博塔拉 是 AWS 的高级应用人工智能专家架构师。 他与来自不同行业的客户合作,以​​加速具有高影响力的数据、分析和机器学习计划。 他对 AI 和 ML 中的推荐系统、NLP 和计算机视觉领域充满热情。 工作之余,Vamshi 是一名遥控爱好者,建造遥控设备(飞机、汽车和无人机),还喜欢园艺。

萨希尔·塔帕尔 是一名企业解决方案架构师。 他与客户合作,帮助他们在 AWS 云上构建高度可用、可扩展且有弹性的应用程序。 他目前专注于容器和机器学习解决方案。

时间戳记:

更多来自 AWS机器学习