使用 Amazon SageMaker PlatoBlockchain 数据智能通过 Terraform 部署和管理机器学习管道。垂直搜索。人工智能。

使用 Amazon SageMaker 使用 Terraform 部署和管理机器学习管道

AWS 客户依靠基础设施即代码 (IaC) 来设计、开发和管理他们的云基础设施。 IaC 确保客户基础设施和服务是一致的、可扩展的和可重现的,同时能够遵循开发运营 (DevOps) 领域的最佳实践。

使用 IaC 管理 AWS 基础设施和服务的一种可能方法是 Terraform,它允许开发人员在可重用的代码模块中组织他们的基础设施。 这方面在机器学习(ML)领域越来越重要。 开发和管理 ML 管道,包括使用 Terraform 作为 IaC 进行训练和推理,让您可以轻松扩展多个 ML 用例或区域,而无需从头开始开发基础设施。 此外,它为跨 ML 管道的不同实现进行训练和推理的基础设施(例如,实例类型和大小)提供了一致性。 这使您可以将请求和传入流量路由到不同的 亚马逊SageMaker 端点。

在本文中,我们将向您展示如何使用 Terraform 和 Amazon SageMaker 部署和管理 ML 管道。

解决方案概述

这篇博文提供了代码,并指导您完成部署 AWS 基础设施以使用 Terraform 的 ML 管道所需的步骤,以便使用 Amazon SageMaker 进行模型训练和推理。 ML 管道通过以下方式管理 AWS步骤功能 编排在 ML 管道中实现的不同步骤,如下图所示。

步骤功能步骤

Step Functions 启动一个 AWS Lambda 函数,生成唯一的作业 ID,然后在启动 SageMaker 训练作业时使用。 Step Functions 还会创建模型、端点配置和用于推理的端点。 其他资源包括以下内容:

使用 Docker 镜像进行训练和推理的 ML 相关代码主要依赖于以下现有工作 GitHub存储库.

下图说明了解决方案架构:

架构图

我们将引导您完成以下高级步骤:

  1. 使用 Terraform 部署您的 AWS 基础设施。
  2. 将您的 Docker 映像推送到 Amazon ECR。
  3. 运行 ML 管道。
  4. 调用您的端点。

存储库结构

您可以在下面找到包含本文所用代码和数据的存储库 GitHub存储库.

存储库包括以下目录:

  • /terraform – 包含以下子文件夹:
    • ./infrastructure – 包含调用 ML 管道模块的 main.tf 文件,以及我们用于部署基础设施的变量声明
    • ./ml-pipeline-module – 包含 Terraform ML 管道模块,我们可以重用它
  • /src – 包含以下子文件夹:
    • ./container – 包含用于训练和推理的示例代码以及 Docker 映像的定义
    • ./lambda_function – 包含 Lambda 函数生成配置的 Python 代码,例如 SageMaker 训练作业的唯一作业 ID
  • /data – 包含以下文件:
    • ./iris.csv – 包含用于训练 ML 模型的数据

先决条件

对于本演练,您应该具有以下先决条件:

使用 Terraform 部署您的 AWS 基础设施

要部署 ML 管道,您需要根据需要调整一些变量和名称。 这一步的代码在 /terraform 目录。

第一次初始化时,打开文件 terraform/infrastructure/terraform.tfvars 并调整变量 项目名 到你的项目的名称,除了变量 地区 如果您想在另一个区域部署。 您还可以更改其他变量,例如用于训练和推理的实例类型。

然后使用以下命令使用 Terraform 部署基础架构:

export AWS_PROFILE=<your_aws_cli_profile_name>
cd terraform/infrastructure
terraform init
terraform plan
terraform apply

检查输出并确保计划的资源正确显示,如果一切正确,请在应用阶段用 yes 确认。 然后转到 Amazon ECR 控制台(或在终端中检查 Terraform 的输出)并获取您通过 Terraform 创建的 ECR 存储库的 URL。

输出应类似于以下显示的输出,包括 ECR 存储库 URL:

Apply complete! Resources: 19 added, 0 changed, 0 destroyed. Outputs: ecr_repository_url = <account_number>.dkr.ecr.eu-west-1.amazonaws.com/ml-pipeline-terraform-demo

将您的 Docker 映像推送到 Amazon ECR

要让 ML 管道和 SageMaker 训练和预置 SageMaker 终端节点以进行推理,您需要提供 Docker 映像并将其存储在 Amazon ECR 中。 您可以在目录中找到示例 src/container. 如果您已经应用了前面步骤中的 AWS 基础设施,则可以按所述推送 Docker 映像。 在您的 Docker 镜像开发完成后,您可以执行以下操作并将其推送到 Amazon ECR(根据您的需要调整 Amazon ECR URL):

cd src/container
export AWS_PROFILE=<your_aws_cli_profile_name>
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin <account_number>.dkr.ecr.eu-west-1.amazonaws.com
docker build -t ml-training .
docker tag ml-training:latest <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>:latest
docker push <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>

如果您已经使用 Terraform 应用了 AWS 基础设施,则可以将代码和 Docker 映像的更改直接推送到 Amazon ECR,而无需再次通过 Terraform 进行部署。

运行 ML 管道

要训​​练和运行 ML 管道,请转到 Step Functions 控制台并开始实施。 您可以在状态机的可视化中检查每个步骤的进度。 您还可以检查 SageMaker 训练作业进度和 SageMaker 终端节点的状态。

启动阶跃函数

在 Step Functions 中成功运行状态机后,您可以看到 SageMaker 终端节点已创建。 在 SageMaker 控制台上,选择 推理 在导航窗格中,然后 端点. 确保等待状态更改为 InService。

SageMaker 端点状态

调用您的端点

要调用您的端点(在此示例中,针对 iris 数据集),您可以使用以下 Python 脚本和 适用于Python的AWS开发工具包(Boto3). 您可以从 SageMaker 笔记本执行此操作,或将以下代码片段嵌入 Lambda 函数中:

import boto3
from io import StringIO
import pandas as pd client = boto3.client('sagemaker-runtime') endpoint_name = 'Your endpoint name' # Your endpoint name.
content_type = "text/csv"   # The MIME type of the input data in the request body. payload = pd.DataFrame([[1.5,0.2,4.4,2.6]])
csv_file = StringIO()
payload.to_csv(csv_file, sep=",", header=False, index=False)
payload_as_csv = csv_file.getvalue() response = client.invoke_endpoint(
EndpointName=endpoint_name,
ContentType=content_type,
Body=payload_as_csv
) label = response['Body'].read().decode('utf-8')
print(label)

清理

您可以使用命令 terraform destroy 销毁 Terraform 创建的基础设施,但您需要先删除 S3 存储桶中的数据和文件。 此外,SageMaker 端点(或多个 SageMaker 端点,如果多次运行)是通过 Step Functions 创建的,而不是通过 Terraform 管理的。 这意味着在使用 Step Functions 运行 ML 管道时会发生部署。 因此,请确保您删除通过 Step Functions ML 管道创建的一个或多个 SageMaker 端点,以避免不必要的成本。 完成以下步骤:

  1. 在 Amazon S3 控制台上,删除 S3 训练存储桶中的数据集。
  2. 通过 Amazon S3 控制台或 AWS CLI 删除您通过 S3 模型存储桶中的 ML 管道训练的所有模型。
  3. 销毁通过 Terraform 创建的基础设施:
    cd terraform/infrastructure
    terraform destroy

  4. 在 SageMaker 控制台或通过 AWS CLI 删除通过 Step Functions 创建的 SageMaker 终端节点、终端节点配置和模型。

结论

恭喜! 您已使用 SageMaker 和 Terraform 部署了 ML 管道。 此示例解决方案展示了如何以可重用的方式轻松为 ML 管道部署 AWS 基础设施和服务。 这允许您针对多个用例或区域进行扩展,并支持以一致的方式一键训练和部署 ML 模型。 此外,您可以多次运行 ML 管道,例如,当新数据可用或您想要更改算法代码时。 您还可以选择将请求或流量路由到不同的 SageMaker 端点。

我鼓励您根据自己的需求和潜在的公司标准探索添加安全功能并采用安全最佳实践。 此外,将此解决方案嵌入您的 CI/CD 管道将使您能够根据您的要求采用和建立 DevOps 最佳实践和标准。


关于作者

使用 Amazon SageMaker PlatoBlockchain 数据智能通过 Terraform 部署和管理机器学习管道。垂直搜索。人工智能。奥利弗·佐利科弗 是 Amazon Web Services 的数据科学家。 他使全球企业客户能够构建、训练和部署机器学习模型,以及使用 MLOps 管理 ML 模型生命周期。 此外,他还构建和架构了相关的云解决方案。

时间戳记:

更多来自 AWS机器学习