在多环境设置中使用 Amazon SageMaker 模型注册、HashiCorp Terrafor

在多环境设置中推广管道的最佳实践

主要要点

构建机器学习运营 (MLOps) 平台以便实现数据科学与部署之间的无缝对接。设计 MLOps 框架需遵循监控模型性能、自动重训及数据漂移检测等关键要求。我们的解决方案利用 AWS、Terraform、GitHub 和 Jenkins CI/CD 等工具来实现自动化模型重训和监控。

在快速发展的人工智能 (AI) 和机器学习 (ML) 领域,为组织构建机器学习运营 (MLOps) 平台是非常重要的,旨在在数据科学实验与部署之间架起桥梁,并满足模型性能、安全性和合规性等需求。

设计这样的平台时,满足监管和合规要求的关键要素包括: 处理数据漂移 监控模型性能 促进自动模型重训 提供模型审批流程 将模型保存在安全的环境中

在这篇文章中,我们将展示如何使用 AWS 服务和第三方工具组合来创建一个 MLOps 框架,以满足这些需求。该解决方案包含多环境设置、自动化模型重训、批处理推断,以及使用 Amazon SageMaker Model Monitor、SageMaker Model Registry 进行模型版本控制,以及利用 GitHub 和 Jenkins 的 CI/CD 管道来促进 ML 代码及管道在不同环境间的推广。我们建立了一个模型来预测乳腺X光质量病变的恶性程度,并使用 XGBoost 算法 训练模型,资料来源于 UCI Mammography Mass 数据集,并通过 MLOps 框架进行部署。完整的代码指令可在 GitHub 储存库 中获得。

解决方案概述

以下架构图显示了 MLOps 框架的概览,包括以下关键组件:

组件描述多帐号策略在不同的 AWS 帐号中设置两个环境开发和生产,并设置一个中央模型注册帐号以跟踪模型版本。CI/CD 和源控通过 Jenkins 配置 CI/CD 来处理模型管道的部署,以及通过 GitHub 进行版本控制。批量预测使用 Amazon SageMaker Pipelines 进行推断,并通过 SageMaker Model Monitor 监控数据漂移。自动重训机制当检测到数据漂移时,训练管道会被触发,并将更新的模型版本注册到中央模型注册。基于代码的基础设施使用 HashiCorp Terraform 支持推断管道的排程与 EventBridge 的触发。

MLOps 的工作流程包含以下步骤:

访问开发帐号中的 SageMaker Studio 领域,克隆 GitHub 储存库,根据提供的样本模型进行模型开发,并生成训练与推断管道。在开发帐号中运行训练管道,生成训练模型版本的模型工件并将模型注册到中央模型注册帐号中的 SageMaker Model Registry。在中央模型注册帐号中的 SageMaker Model Registry 审批模型。推送代码训练和推断管道以及 Terraform IaC 代码到 GitHub 储存库的特性分支,创建拉取请求以合并代码到主分支。触发与 GitHub 储存库设置的 Jenkins CI/CD 管道。CI/CD 管道将代码部署到生产帐号中以创建训练和推断管道,同时使用 Terraform 代码来配置 EventBridge 排程。推断管道按日程执行,训练管道设置为在检测到数据漂移时运行。当训练或推断管道出现故障时,通过 SNS 主题发送通知。

先决条件

要执行此解决方案,您需要具备以下先决条件:

三个 AWS 帐户开发、生产及中央模型注册帐户每个帐户中设置的 SageMaker Studio 领域参见 Onboard to Amazon SageMaker Studio 或观看视频 Onboard Quickly to Amazon SageMaker Studio。 在 AWS 上安装具备管理员权限的 Jenkins 我们使用 Jenkins 24011在 Jenkins 伺服器上安装 Terraform 155 或更高版本

对于这篇文章,我们在 useast1 区域中进行解决方案的部署。

在开发和生产帐户中配置 KMS 密钥

第一步是在开发和生产帐户中创建 AWS Key Management Service (AWS KMS) 密钥。

在开发帐户中创建 KMS 密钥并授予生产帐户访问权限

完成以下步骤以在开发帐户中创建 KMS 密钥:

在 AWS KMS 控制台中,选择导航面板中的 客户管理的密钥。选择 创建密钥。将 密钥类型 设置为 对称。将 密钥用法 设置为 加密和解密。按 下一步。

输入生产帐户号以授予生产帐户访问开发帐户中提供的 KMS 密钥的权限。此步骤是必要的,因为首次在开发帐户中训练模型时,模型工件会使用该 KMS 密钥进行加密,然后写入中央模型注册帐户的 S3 存储桶。生产帐户需要访问 KMS 密钥以解密模型工件并运行推断管道。按 下一步 完成创建密钥。

创建的密钥应显示在 AWS KMS 控制台上。

在生产帐户中创建 KMS 密钥

按照上一节中相同的步骤在生产帐户中创建一个客户管理的 KMS 密钥。您可以跳过与另一个帐户共享 KMS 密钥的步骤。

在多环境设置中使用 Amazon SageMaker 模型注册、HashiCorp Terrafor

在中央模型注册帐户中设置模型工件 S3 存储桶

在中央模型注册帐户创建一个 S3 存储桶,其名称中包含 sagemaker 字串,并更新该 S3 存储桶的策略,以授权开发和生产帐户读取和写入模型工件。

以下代码是 S3 存储桶的策略:

json{ Version 20121017 Statement [ { Sid AddPerm Effect Allow Principal { AWS arnawsiamltdevaccountidgtroot } Action [ s3PutObject s3PutObjectAcl s3GetObject s3GetObjectVersion ] Resource arnawss3lts3bucketincentralmodelregistryaccountgt/ } { Sid AddPerm1 Effect Allow Principal { AWS arnawsiamltdevaccountidgtroot } Action s3ListBucket Resource [ arnawss3lts3bucketincentralmodelregistryaccountgt arnawss3lts3bucketincentralmodelregistryaccountgt/ ] } { Sid AddPerm2 Effect Allow Principal { AWS arnawsiamltprodaccountidgtroot } Action [ s3PutObject s3PutObjectAcl s3GetObject s3GetObjectVersion ] Resource arnawss3lts3bucketincentralmodelregistryaccountgt/ } { Sid AddPerm3 Effect Allow Principal { AWS arnawsiamltprodaccountidgtroot } Action s3ListBucket Resource [ arnawss3lts3bucketincentralmodelregistryaccountgt arnawss3lts3bucketincentralmodelregistryaccountgt/ ] } ]}

在您的 AWS 帐户中设置 IAM 角色

下一步是在您的 AWS 帐户中设置 AWS Identity and Access Management (IAM) 角色,并授予 AWS Lambda、SageMaker 和 Jenkins 的权限。

Lambda 执行角色

在开发和生产帐户中设置 Lambda 执行角色,该角色将用于作为 [SageMaker 管道 Lambda 步骤](https//docsawsamazoncom/sagemaker/latest/dg/buildandmanagestepshtml#steptypelambda的 Lambda 函数。本步骤将从推断管道中运行以获取最新的批准模型,并以此生成推断。为开发和生产帐户创建 IAM 角色,命名约定为 arnawsiamltaccountidgtrole/lambdasagemakerrole,并附加以下 IAM 策略:

策略 1 创建名为 crossaccountmodelregistryaccess 的内联策略,以授予对中央帐户中模型注册的模型包的访问权限:json{ Version 20121017 Statement [ { Sid VisualEditor0 Effect Allow Action sagemakerListModelPackages Resource arnawssagemakeruseast1ltcentralmodelregistryaccountidgtmodelpackage/mammoseveritymodelpackage/ } { Sid VisualEditor1 Effect Allow Action sagemakerDescribeModelPackageGroup Resource arnawssagemakeruseast1ltcentralmodelregistryaccountidgtmodelpackagegroup/mammoseveritymodelpackage } ]}

策略 2 附加 AmazonSageMakerFullAccess ,该为 AWS 管理的策略,授予对 SageMaker 的完全访问权限。提供对相关服务的选定访问权限,如 AWS Application Auto Scaling、Amazon S3、Amazon Elastic Container Registry (Amazon ECR) 和 Amazon CloudWatch Logs。

策略 3 附加 AWSLambdaFullAccess,这是一个 AWS 管理的策略,授予对 Lambda 及其控制台功能的完全访问权限,并对其他 AWS 服务的访问权限。

策略 4 使用以下的 IAM 信任策略为 IAM 角色:json{ Version 20121017 Statement [ { Effect Allow Principal { Service [ lambdaamazonawscom sagemakeramazonawscom ] } Action stsAssumeRole } ]}

SageMaker 执行角色

开发和生产帐户中设置的 SageMaker Studio 领域必须各自有一个执行角色,该角色可以在域详细资讯页的 域设置 标签中找到。此角色用于在 SageMaker Studio 域内运行训练作业、处理作业等。

支持泰国ip的加速器

对于两个帐户中的 SageMaker 执行角色,附加以下策略:

策略 1 创建名为 crossaccountmodelartifactss3bucketaccess 的内联策略,授予对中央模型注册帐户 S3 存储桶的访问权限,其中存储模型工件:json{ Version 20121017 Statement [ { Sid VisualEditor0 Effect Allow Action [ s3PutObject s3GetObject s3GetObjectVersion ] Resource arnawss3lts3bucketincentralmodelregistryaccountgt/ } { Sid VisualEditor1 Effect Allow Action [ s3ListBucket ] Resource [ arnawss3lts3bucketincentralmodelregistryaccountgt arnawss3lts3bucketincentralmodelregistryaccountgt/ ] } ]}

策略 2 创建名为 crossaccountmodelregistryaccess 的内联策略,授予对中央模型注册帐户中模型包的访问权限:json{ Version 20121017 Statement [ { Sid VisualEditor0 Effect Allow Action sagemakerCreateModelPackageGroup Resource arnawssagemakeruseast1ltcentralmodelregistryaccountidgtmodelpackagegroup/mammoseveritymodelpackage } ]}

策略 3 创建名为 kmskeyaccesspolicy 的内联策略,授予对先前步骤中创建的 KMS 密钥的访问权限。提供创建该策略的帐号 ID 和该帐户中创建的 KMS 密钥 ID:json{ Version 20121017 Statement [ { Sid AllowUseOfKeyInThisAccount Effect

在 Amazon EventBridge 中推出对只读管理事件的支持 计算博客

在 Amazon EventBridge 中推出对只读管理事件的支持 计算博客

AWS EventBridge 支持只读管理事件by Eric Johnson 于 2023年11月17日 发表于 Amazon EventBridge 和 Serverless永久连结 分享 本文由...

如何通过 AWS Firewall Manager 在组织内强制实施 AWS WAF ACL 的安全

如何通过 AWS Firewall Manager 在组织内强制实施 AWS WAF ACL 的安全

在组织中使用 AWS Firewall Manager 强制执行 AWS WAF ACL 安全基准重要要点确保安全基准:使用 AWS WAF 和 AWS Firewall Manager 可以制定和实...

订阅