使用 SageMaker 提供的项目模板 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 SageMaker 提供的项目模板

Amazon SageMaker 提供的项目模板可创建所需的基础设施,用于创建 MLOps 解决方案,实现机器学习模型的持续集成和持续部署 (CI/CD)。使用这些模板来处理数据,提取特征,训练和测试模型,在 SageMaker 模型注册表中注册模型,以及部署模型进行推理。您可以根据自己的要求自定义种子代码和配置文件。

重要

自 2022 年 7 月 25 日起,我们需要其他角色才能使用项目模板。有关所需角色的完整列表以及如何创建这些角色的说明,请参阅使用项目时所需的 SageMaker Studio 权限。如果没有新角色,当尝试创建新项目时,会收到错误消息 CodePipeline is not authorized to perform AssumeRole on role arn:aws:iam::xxx:role/service-role/AmazonSageMakerServiceCatalogProductsCodePipelineRole,无法继续操作。

SageMaker 项目模板提供以下代码存储库、工作流自动化工具和管道阶段供您选择:

  • 代码存储库:Amazon CodeCommit 或第三方 Git 存储库,例如 GitHub 和 Bitbucket

  • CI/CD 工作流自动化:Amazon CodePipeline 或 Jenkins

  • 管道阶段:模型构建与训练和/或模型部署

以下讨论概述了您在创建 SageMaker 项目时可以选择的每个模板。您也可以按照项目演练中的步骤 1:创建项目来查看 Studio 中的可用模板。

有关如何创建真实项目的分步说明,请参阅其中一个项目演练:

用于模型构建、训练和部署的 MLOps 模板

此模板是以下两个模板的组合,每个模板都可以独立使用,并且包含这些模板中提供的所有资源。

  • 代码存储库:Amazon CodeCommit

  • CI/CD 工作流自动化:Amazon CodePipeline

用于模型构建和训练的 MLOps 模板

如果您希望使用 MLOps 解决方案来处理数据、提取特征、训练和测试模型,以及在 SageMaker 模型注册表中注册模型,请使用此模板。

此模板提供以下资源:

  • Amazon CodeCommit 存储库,其中包含使用 Python 代码创建 Amazon SageMaker 管道的示例代码,并演示如何创建和更新 SageMaker 管道。此存储库还有一个可在 Studio 中打开和运行的示例 Python 笔记本。

  • Amazon CodePipeline 管道,其中包含源步骤和构建步骤。源步骤指向 CodeCommit 存储库。构建步骤从该存储库获取代码,创建和更新 SageMaker 管道,启动管道执行,然后等待管道执行完成。

  • Amazon S3 存储桶,用于存储构件,包括 CodePipeline 和 CodeBuild 构件以及从 SageMaker 管道运行中生成的任何构件。

下图说明了此模板用来帮助您构建和训练模型的工作流和 Amazon 资源。

用于模型部署的 MLOps 模板

使用此模板自动将 SageMaker 模型注册表中的模型部署到 SageMaker 端点以进行实时推理。此模板可识别模型注册表中的更改。注册并批准新模型版本后,它会自动启动部署。

此模板预置了一个 CodeCommit 存储库,其中包含用于指定模型部署步骤的配置文件、用于将端点定义为基础设施的 Amazon CloudFormation 模板,以及用于测试端点的种子代码。

此模板提供以下资源:

  • Amazon CodeCommit 存储库,其中包含将模型部署到暂存和生产环境中的端点的示例代码。

  • Amazon CodePipeline 管道,其中包含源步骤、构建步骤、部署到暂存步骤和部署到生产步骤。源步骤指向 CodeCommit 存储库,构建步骤从该存储库获取代码并生成要部署的 CloudFormation 堆栈。部署到暂存步骤和部署到生产步骤将 CloudFormation 堆栈部署到各自的环境中。在暂存和生产构建步骤之间有一个手动批准步骤,因此,在将模型部署到生产环境之前,必须由 MLOps 工程师批准该模型。

    在 CodeCommit 存储库的示例代码中,还有一个包含占位符测试的编程批准步骤。您可以添加其他测试来替换占位符测试。

  • Amazon S3 存储桶,用于存储构件,包括 CodePipeline 和 CodeBuild 构件以及从 SageMaker 管道运行中生成的任何构件。

  • CloudWatch 事件,用于在模型包版本获得批准或被拒绝时启动管道。

下图说明了此模板用来帮助您部署模型的工作流和 Amazon 资源。

如前所述,有关使用此模板创建真实项目的演示,请参阅项目演练

用于模型构建、训练、部署和 Amazon SageMaker 模型监控器的 MLOps 模板

此模板是 MLOps 模板的扩展,用于模型构建、训练和部署。它包括模板的模型构建、训练和部署组件,以及一个额外的 Amazon SageMaker 模型监控器模板,该模板提供以下类型的监控:

  • 代码存储库:Amazon CodeCommit

  • CI/CD 工作流自动化:Amazon CodePipeline

用于 Amazon SageMaker 模型监控器的 MLOps 模板

您可以将此模板用于 MLOps 解决方案,部署一个或多个 Amazon SageMaker 数据质量、模型质量、模型偏差和模型可解释性监控器,以监控在 SageMaker 推理端点上部署的模型。

此模板提供以下资源:

  • Amazon CodeCommit 存储库,其中包含示例 Python 代码,该代码从 SageMaker 模型注册表中获取监控器使用的基准,并更新暂存和生产环境的模板参数。它还包含一个用于创建 Amazon SageMaker 模型监控器的 Amazon CloudFormation 模板。

  • Amazon CodePipeline 管道,其中包含源步骤、构建步骤和部署步骤。源步骤指向 CodePipeline 存储库。构建步骤从该存储库获取代码,从模型注册表中获取基准,并更新暂存和生产环境的模板参数。部署步骤将配置的监控器部署到暂存和生产环境中。DeployStaging 阶段内的手动批准步骤要求您在批准并进入 DeployProd 阶段之前,验证生产 SageMaker 端点是否为 InService

  • 该模板使用 S3 存储桶来存储监控器的输出,此存储桶与 MLOps 模板为模型构建、训练和部署而创建的存储桶相同。

  • 每次更新暂存 SageMaker 端点或将代码更改提交到 CodePipeline 存储库时,两个 Amazon EventBridge 事件规则都会启动 Amazon SageMaker 模型监控器 Amazon CodePipeline。

用于映像构建、模型构建和模型部署的 MLOps 模板

此模板是 用于模型构建、训练和部署的 MLOps 模板 的扩展。它包括该模板的模型构建、训练和部署组件以及以下选项:

  • 包括处理映像 - 构建管道

  • 包括训练映像 - 构建管道

  • 包括推理映像 - 构建管道

对于在项目创建期间选择的每个组件,使用模板创建以下组件:

  • Amazon ECR 存储库

  • SageMaker 映像

  • CodeCommit 存储库,包含可自定义的 Dockerfile

  • 通过更改 CodePipeline 存储库启动的 CodePipeline

  • CodeBuild 项目,用于构建 Docker 映像并将其注册到 Amazon ECR 存储库

  • EventBridge 规则,可按计划启动 CodePipeline

当 CodePipeline 启动时,它会构建一个新的 Docker 容器并将其注册到 Amazon ECR 存储库。在 Amazon ECR 存储库中注册新容器时,将向 SageMaker 映像添加一个新 ImageVersion 容器。这将启动建模管线,进而启动部署管道。

新创建的映像将酌情用于工作流的模型构建、训练和部署部分。

用于使用 CodePipeline 通过第三方 Git 存储库进行模型构建、训练和部署的 MLOps 模板

  • 代码存储库:第三方 Git。建立从您的 Amazon 账户到 GitHub 用户或组织的 AWS CodeStar 连接。向此 AWS CodeStar 连接添加一个键为 sagemaker 且值为 true 的标签。

  • CI/CD 工作流自动化:Amazon CodePipeline

此模板提供以下资源:

  • 与一个或多个客户指定的 Git 存储库的关联。

  • Amazon CodePipeline 管道,其中包含源步骤、构建步骤、部署到暂存步骤和部署到生产步骤。源步骤指向第三方 Git 存储库,构建步骤从该存储库获取代码并生成要部署的 CloudFormation 堆栈。部署到暂存步骤和部署到生产步骤将 CloudFormation 堆栈部署到各自的环境中。在暂存和生产构建步骤之间有一个手动批准步骤,因此,在将模型部署到生产环境之前,必须由 MLOps 工程师批准该模型。

  • Amazon CodeBuild 项目,用种子代码信息填充 Git 存储库。这需要在您的 Amazon 账户与您在 Git 存储库主机上的账户之间建立 AWS CodeStar 连接。

  • Amazon S3 存储桶,用于存储构件,包括 CodePipeline 和 CodeBuild 构件以及从 SageMaker 管道运行中生成的任何构件。

如前所述,有关使用此模板创建真实项目的演示,请参阅使用第三方 Git 存储库进行项目演练

用于使用 Jenkins 通过第三方 Git 存储库进行模型构建、训练和部署的 MLOps 模板

  • 代码存储库:第三方 Git。建立从您的 Amazon 账户到 GitHub 用户或组织的 AWS CodeStar 连接。向此 AWS CodeStar 连接添加一个键为 sagemaker 且值为 true 的标签。

  • CI/CD 工作流自动化:Jenkins

此模板提供以下资源:

  • 与一个或多个客户指定的 Git 存储库的关联。

  • 种子代码,可生成包含源步骤、构建步骤、部署到暂存步骤和部署到生产步骤的 Jenkins 管道。源步骤指向客户指定的 Git 存储库。构建步骤从该存储库获取代码并生成两个 CloudFormation 堆栈。部署步骤将 CloudFormation 堆栈部署到各自的环境中。暂存步骤和生产步骤之间有一个批准步骤。

  • Amazon CodeBuild 项目,用种子代码信息填充 Git 存储库。这需要在您的 Amazon 账户与您在 Git 存储库主机上的账户之间建立 AWS CodeStar 连接。

  • Amazon S3 存储桶,用于存储 SageMaker 项目和 SageMaker 管道的构件。

该模板在您的项目和源代码控制存储库之间创建关联,但您需要执行其他手动步骤才能在您的 Amazon 账户与 Jenkins 之间建立通信。有关详细步骤,请参阅使用第三方源代码控制和 Jenkins 创建 Amazon SageMaker 项目

这些说明可帮助您构建下图所示的架构,在本示例中使用 GitHub 作为源代码控制存储库。如图所示,您正在将 Git 存储库附加到项目中,以签入和管理代码版本。当 Jenkins 检测到 Git 存储库中模型构建代码发生更改时,就会启动建模管线。您还将项目连接到 Jenkins 以编排模型部署步骤,当您批准在模型注册表中注册的模型或当 Jenkins 检测到模型部署代码发生更改时,这些步骤就会开始。

总之,这些步骤将引导您完成以下任务:

  1. 在您的 Amazon 账户和 GitHub 账户之间建立连接。

  2. 创建 Jenkins 账户并导入所需的插件。

  3. 创建 Jenkins IAM 用户和权限策略。

  4. 在 Jenkins 服务器上为 Jenkins IAM 用户设置 Amazon 凭证。

  5. 创建用于与 Jenkins 服务器通信的 API 令牌。

  6. 使用 CloudFormation 模板设置 EventBridge 规则,以监控模型注册表中是否有新批准的模型。

  7. 创建 SageMaker 项目,为 GitHub 存储库添加模型构建和部署代码。

  8. 使用模型构建种子代码创建 Jenkins 建模管线。

  9. 使用模型部署种子代码创建 Jenkins 模型部署管道。

Salesforce 的模型部署

  • 代码存储库:Amazon CodeCommit

  • CI/CD 工作流自动化:Amazon CodePipeline

此模板提供以下资源:

  • Amazon CodeCommit 存储库,其中包含使用 Python 代码创建 Amazon SageMaker 管道的示例代码,并演示如何创建和更新管道。此存储库还有一个可在 Studio 中打开和运行的 Python Jupyter 笔记本。

  • Amazon CodePipeline 管道,其中包含源步骤和构建步骤。源步骤指向 CodeCommit 存储库。构建步骤从该存储库获取代码,创建和更新 SageMaker 管道,启动管道运行,然后等待管道运行完成。

  • Amazon S3 存储桶,用于存储构件,包括 CodePipeline 和 CodeBuild 构件以及从 SageMaker 管道运行中生成的任何构件。

您的管理员可能需要执行其他设置才能启用从 Salesforce Data Cloud 到 SageMaker Studio 的数据访问,从而构建 AI/ML 模型。有关详细信息和说明,请参阅博客文章使用 Amazon SageMaker 和 Salesforce Data Cloud 集成通过 AI/ML 为您的 Salesforce 应用程序提供支持中的解决方案概述。

下图说明了此模板用于帮助您构建和训练模型的高级工作流。在 Salesforce Data Cloud 与 Data Wrangler 之间建立连接并预处理数据后,使用 Salesforce 的模型部署项目模板自动进行模型训练和部署。该模板提供可自定义的模型部署代码和来自 Amazon CodePipeline 的示例笔记本,用于训练模型并将其注册到 SageMaker 模型注册表中。一旦您批准了模型,端点便会通过 API Gateway 作为 API 向 Salesforce 公开,客户就可以开始在 Salesforce 中使用部署的模型进行预测。

注意

此模板允许在 API Gateway 设置中使用 1.0 和 1.1 版本的传输层安全性协议 (TLS) 策略。您可以使用自定义域名使此配置更加安全。有关详细信息,请参阅为 REST API 设置自定义域名


            Salesforce 项目模板所用步骤的简化示意图。

博客文章使用 Amazon SageMaker 和 Salesforce Data Cloud 集成通过 AI/ML 为您的 Salesforce 应用程序提供支持提供了详细说明,指导您完成以下步骤:

  1. 选择项目模板 Salesforce 的模型部署,并提供密钥管理器名称。

  2. 克隆存储库以使用 SageMaker 提供的可自定义示例笔记本和模型部署代码。

  3. 使用 Data Wrangler 预处理数据。

    1. 创建与 Salesforce Data Cloud 的连接并将数据导入 Data Wrangler。

    2. 使用 Data Wrangler 通过一些示例转换来准备数据。

    3. 使用您的 Data Wrangler 配置,启动处理作业来处理数据。

  4. 训练模型。

  5. 在模型注册表中注册模型。

  6. 在模型注册表中批准模型。

  7. 在 SageMaker 控制台中查看端点。

  8. 从 Salesforce Einstein Studio 调用 API URL,以在 Einstein Studio 中注册和使用模型推理。

下图更详细地显示了集成了 Salesforce Data Cloud 的 SageMaker 项目模板所使用的工作流和 Amazon 资源。


            Salesforce 项目模板使用的步骤和资源的示意图。

更新 SageMaker 项目以使用第三方 Git 存储库

附加到 AmazonSageMakerServiceCatalogProductsUseRole 角色的托管策略已于 2021 年 7 月 27 日更新,可与第三方 Git 模板一起使用。在此日期之后注册 Amazon SageMaker Studio 并启用项目模板的用户将使用新策略。在此日期之前注册的用户必须更新策略才能使用这些模板。您可以使用以下选项之一来更新策略:

  • 删除角色并切换 Studio 设置

    1. 在 IAM 控制台中,删除 AmazonSageMakerServiceCatalogProductsUseRole

    2. 在 Studio 控制面板中,选择编辑设置

    3. 切换两个设置,然后选择提交

  • 在 IAM 控制台中,向 AmazonSageMakerServiceCatalogProductsUseRole 添加以下权限:

    { "Effect": "Allow", "Action": [ "codestar-connections:UseConnection" ], "Resource": "arn:aws:codestar-connections:*:*:connection/*", "Condition": { "StringEqualsIgnoreCase": { "aws:ResourceTag/sagemaker": "true" } } }, { "Effect": "Allow", "Action": [ "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::sagemaker-*" ] }