使用自定义SageMaker项目将SageMaker Autopilot整合到您的MLOps流程中

每个组织都有自己的标准和实践,为其AWS环境提供安全性和治理。Amazon SageMaker是一个全管理服务,可为任何用例准备数据、构建、训练和部署机器学习(ML)模型,拥有完全管理的基础设施、工具和工作流。SageMaker为想要快速开始使用ML工作流和DevOps持续集成和持续交付(CI/CD)流程的组织提供一组模板。

大多数企业客户已经拥有了一个成熟的MLOps实践,具有标准化的环境,例如标准化的存储库、基础设施和安全性防护措施,并希望将其MLOps流程扩展到无代码和低代码AutoML工具。他们还有很多需要遵守的流程,才能将模型推向生产。他们正在寻找一种快速简便的方式,从初始阶段毕业,进入可重复、可靠、最终可扩展的操作阶段,如下图所示。有关更多信息,请参阅基于Amazon SageMaker的企业MLOps基础路线图。

尽管这些公司拥有强大的数据科学和MLOps团队来帮助他们构建可靠和可扩展的流水线,但他们希望低代码AutoML工具用户以符合标准的方式生成代码和模型构件,遵循其代码存储库结构以及适当的验证、测试、步骤和批准。

他们正在寻找一种机制,使低代码工具能够为AutoML任务的每个步骤(预处理、训练和后处理)生成所有源代码,以标准化的存储库结构提供给其专家数据科学家,以便根据其需求查看、验证和修改工作流,然后生成一个自定义流水线模板,可集成到标准化环境中(在其中定义了他们的代码存储库、代码构建工具和流程)。

本文展示了如何使用低代码工具(如Amazon SageMaker Autopilot)实现可重复的流程,以便将其无缝集成到您的环境中,因此您不必自己编排端到端工作流程。我们演示了如何使用CI/CD低代码/无代码工具代码将其集成到您的MLOps环境中,同时遵循MLOps最佳实践。

解决方案概述

为展示编排的工作流程,我们使用公开可用的UCI Adult 1994 Census Income数据集,以预测一个人的年收入是否超过每年5万美元。这是一个二分类问题;收入目标变量的选项要么是超过5万美元,要么是低于5万美元。

以下表格总结了数据集的关键组成部分。

数据集特征 多元 实例数 48842 领域 社交
属性特征: 分类,整数 属性数: 14 捐赠日期 1996-05-01
关联任务: 分类 是否缺失值? Yes Web点击数 2749715

以下表格总结了属性信息。

列名 描述
年龄 连续
工作类别 私人,自雇不包含,自雇包括,联邦政府,地方政府,州政府,无薪工作,从未工作过
fnlwgt 连续的
教育 学士学位,一些大学,11年级,高中,专业学校,学术学位,职业学位,9年级,7-8年级,12年级,硕士学位,1-4年级,10年级,博士学位,5-6年级,学前教育。
教育数字 连续的
婚姻状况 已婚-civ-spouse、离婚、从未结婚、分居、丧偶、已婚配偶缺席、已婚-AF-spouse。
职业 技术支持、工艺维修、其他服务、销售、行政管理、专业特长、处理器清洁剂、机器操作、行政助理、农业-渔业、运输-移动、私人住宅服务、保护服务、武装部队
关系 妻子、自己的孩子、丈夫、不在家庭中、其他亲属、未婚。
人种 白人、亚裔太平洋岛民、美洲印第安人-爱斯基摩人、其他、黑人
性别 女性、男性
资本收益 连续的
资本损失 连续的
每周工作小时数 连续的
原籍国 美国、柬埔寨、英格兰、波多黎各、加拿大、德国、美国外围地区(关岛-美国维尔京群岛-等)、印度、日本、希腊、南部、中国、古巴、伊朗、洪都拉斯、菲律宾、意大利、波兰、牙买加、越南、墨西哥、

在本文中,我们展示如何使用Amazon SageMaker Projects,这是一个帮助组织设置和标准化MLOps环境的工具,其中包括低代码自动ML工具Autopilot和Amazon SageMaker Data Wrangler。

Autopilot消除了构建ML模型的重负。您只需提供一个表格数据集并选择要预测的目标列,Autopilot将自动探索不同的解决方案以找到最佳模型。然后,您可以直接单击一个按钮将模型部署到生产环境,或者迭代推荐的解决方案以进一步提高模型质量。

Data Wrangler提供了一个端到端的解决方案,用于导入、准备、转换、特征化和分析数据。您可以将Data Wrangler数据准备流集成到您的ML工作流中,以简化和优化数据预处理和特征工程,使用很少或没有编码。您还可以添加自己的Python脚本和转换来自定义工作流程。我们使用Data Wrangler在提交数据到Autopilot之前对数据集进行预处理。

SageMaker Projects帮助组织设置和标准化环境,以自动化ML生命周期中涉及的不同步骤。虽然笔记本对于模型构建和实验很有帮助,但是一组共享代码的数据科学家和ML工程师需要一种更可扩展的方式来维护代码一致性和严格的版本控制。

为帮助您开始常见的模型构建和部署范例,SageMaker Projects提供了一组一方模板(1P模板)。1P模板通常侧重于创建用于模型构建和模型训练的资源。这些模板包括使用AWS本机服务进行CI/CD的项目,例如AWS CodeBuild和AWS CodePipeline。SageMaker Projects可以支持自定义模板提供,其中组织使用AWS CloudFormation模板运行Terraform堆栈并创建所需的ML工作流程资源。

组织可能希望扩展1P模板以支持超出简单培训和部署模型的用例。自定义项目模板是为您创建ML项目的标准工作流程。您可以创建多个模板,并使用AWS身份和访问管理(IAM)策略在Amazon SageMaker Studio上管理对这些模板的访问,以确保每个用户都访问专用于其用例的项目。

要了解有关SageMaker Projects和创建符合最佳实践的自定义项目模板的更多信息,请参阅构建自定义SageMaker项目模板-最佳实践。

这些自定义模板作为AWS服务目录产品创建,并作为组织模板在Studio UI上提供。这是数据科学家可以选择模板并引导和预配置其ML工作流程的地方。项目使用AWS服务目录产品提供。项目模板由组织用于为其各个团队提供项目。

在本文中,我们展示了如何构建自定义项目模板,以使用SageMaker项目、AWS服务目录和Amazon SageMaker Pipelines集成Data Wrangler和Autopilot,使人类介入以便于模型训练和部署的步骤。介入的人类是涉及ML操作实践的不同角色,共同合作实现成功的ML构建和部署工作流程。

以下图表说明了端到端的低代码/无代码自动化工作流程。

工作流包括以下步骤:

  1. Ops团队或平台团队启动CloudFormation模板,以设置所需的前提条件以提供定制的SageMaker模板。
  2. 当模板在SageMaker中可用时,数据科学负责人使用模板创建SageMaker项目。
  3. SageMaker项目创建将启动一个AWS服务目录产品,该产品将向AWS CodeCommit存储库添加两个种子代码:
    • 用于模型构建流水线的种子代码包括使用Data Wrangler预处理UCI Machine Learning Adult数据集的管道,使用Autopilot自动创建具有全面可见性的ML模型,使用处理步骤评估模型的性能,并基于模型性能将模型注册到模型注册表中。
    • 用于模型部署的种子代码包括一个CodeBuild步骤,用于查找已在模型注册表中获得批准的最新模型,并创建配置文件以使用CodePipeline将CloudFormation模板部署为CI/CD流水线的一部分。 CloudFormation模板将模型部署到暂存和生产环境。
  4. 第一个种子代码提交启动使用CodePipeline的CI/CD流水线,该流水线触发SageMaker流水线,这是使用有向无环图(DAG)编码的一系列相互连接的步骤。在这种情况下,涉及的步骤是使用Data Wrangler流进行数据处理、使用Autopilot训练模型、创建模型、评估模型,如果评估通过,则注册模型。

有关使用Autopilot创建SageMaker管道的更多详细信息,请参阅从Amazon SageMaker Pipelines直接启动Amazon SageMaker Autopilot实验以轻松自动化MLOps工作流程。

  1. 模型注册后,模型审批者可以在Studio中批准或拒绝模型。
  2. 当模型获得批准时,将触发与第二个种子代码集成的CodePipeline部署管道。
  3. 此管道为分段环境创建SageMaker无服务器可扩展端点。
  4. 部署管道中有一个自动化测试步骤,将在分段端点上进行测试。
  5. 测试结果存储在Amazon Simple Storage Service(Amazon S3)中。管道将停止生产部署审批者,审批者可以在批准之前审查所有工件。
  6. 一旦获得批准,模型将以可扩展的无服务器端点的形式部署到生产中。生产应用程序现在可以使用该端点进行推理。

部署步骤包括以下内容:

  1. 使用AWS CloudFormation创建Autopilot的自定义SageMaker项目模板和其他资源。这是一项一次性设置任务。
  2. 使用自定义模板创建SageMaker项目。

在以下各节中,我们将详细介绍每个步骤并探讨项目详细信息页面。

先决条件

本步骤包括以下先决条件:

  • 一个AWS帐户。
  • 将Studio域管理策略附加到IAM执行角色。有关向角色分配权限的说明,请参阅Amazon SageMaker API权限:操作、权限和资源参考。有关更多信息,请参阅Amazon SageMaker基于身份的策略示例。
  • 对于本文,您将使用CloudFormation模板。有关更多信息,请参阅AWS CloudFormation入门。

使用AWS CloudFormation创建解决方案资源

您可以通过AWS CloudFormation控制台、AWS命令行界面(AWS CLI)、SDK或仅选择启动堆栈来下载和启动CloudFormation模板:

CloudFormation模板也可在AWS样本GitHub代码库中获得。该存储库包含以下内容:

  • 用于设置Autopilot的自定义SageMaker项目模板的CloudFormation模板
  • 具有设置SageMaker管道以自动化数据处理和培训步骤的ML代码的种子代码
  • 用于由AWS服务目录映射到将创建的自定义SageMaker项目模板的CloudFormation模板的项目文件夹

CloudFormation模板将多个参数作为输入。

以下是AWS服务目录产品信息参数:

  • 产品名称 – SageMaker项目自定义MLOps模板将与之关联的AWS服务目录产品的名称
  • 产品描述 – AWS服务目录产品的描述
  • 产品所有者 – Service Catalog产品的所有者
  • 产品分销商 – Service Catalog产品的分销商

以下是AWS服务目录产品支持信息参数:

  • 产品支持描述 – 此产品的支持描述
  • 产品支持电子邮件 – 支持AWS服务目录产品的团队的电子邮件地址
  • 产品支持URL – AWS服务目录产品的支持URL

以下是源代码存储库配置参数:

  • 指向GitHub存储库的压缩版本的URL – 如果您不分叉AWS Samples存储库,则使用默认值。
  • 您的GitHub存储库的名称和分支 – 这些应与zip的根文件夹匹配。如果您不分叉AWS Samples存储库,则使用默认值。
  • StudioUserExecutionRole – 提供Studio用户执行IAM角色的ARN。

从此模板启动CloudFormation堆栈后,您可以在AWS CloudFormation控制台上监视其状态。

当堆栈完成时,在 CloudFormation 堆栈的 Outputs 标签页上复制 CodeStagingBucketName 键的值,并将其保存到文本编辑器中以供稍后使用。

使用新的自定义模板创建 SageMaker 项目

完成以下步骤创建 SageMaker 项目:

  1. 登录 Studio。有关更多信息,请参阅入门 Amazon SageMaker Domain。
  2. 在 Studio 侧边栏中,选择主页图标。
  3. 从菜单中选择 部署,然后选择 项目
  4. 选择 创建项目
  5. 选择 组织模板,以查看新的自定义 MLOps 模板。
  6. 选择 选择项目模板

  1. 对于 项目详细信息,输入项目的名称和描述。
  2. 对于 MLOpsS3Bucket,输入您之前保存的 S3 存储桶的名称。

  1. 选择 创建项目

一个消息将出现,指示 SageMaker 正在配置资源。

项目完成后,您将收到一个成功消息,并且您的项目现在会列在 项目 列表中。

浏览项目详情

在项目详情页面上,您可以查看与该项目相关的各种选项卡。让我们深入了解每个选项卡的详细信息。

仓库

此选项卡列出与该项目关联的代码仓库。您可以在 SageMaker 项目中选择 clone repo,以克隆由 SageMaker 项目在 CodeCommit 中创建的两个种子代码仓库。此选项为您提供从 SageMaker 项目本身访问代码仓库的 Git 访问权限。

克隆仓库完成后,本地路径将出现在 本地路径 列中。您可以选择该路径,以在 Studio 中打开包含仓库代码的本地文件夹。

该文件夹将在导航窗格中可用。您可以使用文件浏览器图标来隐藏或显示文件夹列表。您可以在此处进行代码更改,或选择 Git 图标来进行暂存、提交和推送更改。

管道

此选项卡列出了SageMaker ML管道,定义了准备数据、训练模型和部署模型的步骤。有关SageMaker ML管道的信息,请参见创建和管理SageMaker管道。

您可以选择当前正在运行的管道以查看其最新状态。在下面的示例中,DataProcessing步骤使用Data Wrangler数据流进行。

您可以从我们之前克隆的代码库的本地路径访问数据流。选择文件浏览器图标以显示路径,路径位于模型构建存储库的pipelines文件夹中。

在pipelines文件夹中,打开autopilot文件夹。

在autopilot文件夹中,打开preprocess.flow文件。

打开Data Wrangler流需要一段时间。

在此示例中,在源和目标之间执行了三个数据转换。您可以选择每个转换以查看更多详细信息。

有关如何在Data Wrangler中包含或删除转换的说明,请参见转换数据。

有关更多信息,请参见使用Amazon SageMaker Data Wrangler和Amazon SageMaker Autopilot统一准备数据和模型训练-第1部分。

完成审查后,选择电源图标并在Running AppsKernel Sessions下停止Data Wrangler资源。

实验

此选项卡列出了与项目相关的Autopilot实验。有关Autopilot的更多信息,请参见使用Amazon SageMaker Autopilot自动化模型开发。

模型组

此选项卡列出了由项目中的管道运行创建的模型版本组。当管道运行完成时,将在此处访问从管道的最后一步创建的模型。

您可以选择模型组以访问模型的最新版本。

以下示例中模型版本的状态为Pending。您可以选择模型版本并选择更新状态来更新状态。

选择Approved并选择更新状态以批准模型。

模型状态批准后,CodePipeline 中的模型部署 CI/CD 管道将启动。

您可以打开已部署的管道,查看存储库中的不同阶段。

如上图所示,此管道有四个阶段:

  • – 在此阶段,CodePipeline 将 CodeCommit 存储库代码检查到 S3 存储桶中。
  • 构建 – 在此阶段,准备 CloudFormation 模板以部署模型代码。
  • DeployStaging – 此阶段包含三个子阶段:
    • DeployResourcesStaging – 在第一个子阶段中,部署 CloudFormation 堆栈以在临时环境中创建无服务器 SageMaker 端点。
    • TestStaging – 在第二个子阶段中,使用 CodeBuild 进行自动化测试,以检查推理是否按预期进行。测试结果将在以下 S3 存储桶中的文件名中可用:sagemaker-project-<SageMaker 项目的项目 ID>

您可以在 SageMaker 项目的设置选项卡上获取 SageMaker 项目 ID。在 S3 存储桶中,选择项目名称文件夹(例如,sagemaker-MLOp-AutoP),然后在其中打开 TestArtifa/ 文件夹。选择此文件夹中的对象文件以查看测试结果。

您可以从先前克隆的代码存储库的本地路径中访问测试脚本。选择文件浏览器图标查看路径。请注意,这将是部署存储库。在该存储库中,打开 test 文件夹并选择 test.py Python 代码文件。

您可以根据您的用例更改此测试代码。

  • ApproveDeployment – 在最后一个部署阶段之前,有一个额外的批准过程。您可以选择审核并批准以继续。

  • DeployProd – 在这个阶段,CloudFormation栈被部署来创建一个用于生产环境的无服务器SageMaker终端节点。

终端节点

此选项卡列出了托管已部署模型以进行推理的SageMaker终端节点。当模型部署流程中的所有阶段都完成后,模型将部署到SageMaker终端节点并可以在SageMaker项目中访问。

设置

这是项目页面上的最后一个选项卡,列出了项目的设置。这包括项目的名称和描述,项目模板和SourceModelPackageGroupName的信息,以及有关项目的元数据。

清理

为避免本文示例带来的额外基础设施成本,请确保删除CloudFormation栈。另外,请确保删除SageMaker终端节点、运行中的笔记本和在设置期间创建的S3存储桶。

结论

本文介绍了一种易于使用的ML管道方法,可以使用SageMaker项目、数据整理器、自动飞行员、管道和工作室自动化和标准化ML模型的培训和部署。这个解决方案可以帮助你在一个标准化的仓库结构中执行AutoML任务(预处理、训练和后处理),该结构可以为您的专业数据科学家提供查看、验证和修改工作流的能力,然后生成一个可集成到SageMaker项目中的自定义管道模板。

您可以根据自己的用例修改管道,进行预处理和管道步骤,然后部署我们的端到端工作流。在评论中告诉我们自定义模板对您的用例的工作情况。