使用 SageMaker AI 和 Hydra 简化从本地开发到可扩展实验的机器学习工作流程 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 SageMaker AI 和 Hydra 简化从本地开发到可扩展实验的机器学习工作流程

由 David Sauerwein (AWS)、Julian Ferdinand Grueber (AWS) 和 Marco Geiger (AWS) 创作

摘要

这种模式为在 Amazon A SageMaker I 上配置和运行从本地测试到生产的机器学习 (ML) 算法提供了一种统一的方法。机器学习算法是这种模式的焦点,但其方法延伸到特征工程、推理和整个 ML 管道。此模式通过示例用例演示了从本地脚本开发到 SageMaker AI 训练作业的过渡。

典型的机器学习工作流程是在本地计算机上开发和测试解决方案,在云端运行大规模实验(例如,使用不同的参数),然后在云端部署经批准的解决方案。然后,必须对部署的解决方案进行监控和维护。如果没有统一的工作流程方法,开发人员通常需要在每个阶段重构代码。如果解决方案依赖于大量参数,而这些参数在此工作流程的任何阶段都可能发生变化,那么保持井井有条和一致性就会变得越来越困难。

这种模式解决了这些挑战。首先,它提供了一个统一的工作流程,无论是在本地计算机、容器中还是在人工智能上运行,都能保持一致,从而无需在环境之间进行 SageMaker 代码重构。其次,它通过Hydra的配置系统简化了参数管理,在该系统中,参数是在单独的配置文件中定义的,可以轻松修改和组合,并自动记录每次运行的配置。有关此模式如何解决这些挑战的更多详细信息,请参阅其他信息

先决条件和限制

先决条件

  • 活跃的 AWS 账户

  • 用于部署和启动 A SageMaker I 训练作业的 AWS Identity and Access Management (IAM) 用户角色

  • AWS Command Line Interface (AWS CLI) 已安装配置 2.0 或更高版本

  • 已安装@@ 诗歌版本 1.8 或更高版本,但低于 2.0

  • 已@@ 安装 Docker

  • Python 版本 3.10.x

限制

  • 该代码目前仅针对 A SageMaker I 训练作业。将其扩展到处理任务和整个 SageMaker AI 管道非常简单。

  • 对于完全生产化的 SageMaker AI 设置,需要准备其他细节。示例可以是用于计算和存储的自定义 AWS Key Management Service (AWS KMS) 密钥,也可以是网络配置。您还可以通过在文件夹的专用子文件夹中使用 Hydra 来配置这些其他选项。config

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按地区划分的AWS 服务。有关特定终端节点,请参阅服务终端节点和配额,然后选择服务的链接。

架构

下图描述了解决方案的架构。

创建和运行 SageMaker AI 训练或 HPO 作业的工作流程。

图表显示了以下工作流:

  1. 数据科学家无需使用 Docker 或 SageMaker AI 即可在本地环境中对算法进行小规模迭代,调整参数并快速测试训练脚本。(有关更多详细信息,请参阅 Epics 中的 “在本地运行以进行快速测试” 任务。)

  2. 一旦对算法感到满意,数据科学家就会构建 Docker 镜像并将其推送到名为的亚马逊弹性容器注册表 (Amazon ECR) Container Registry 存储库。hydra-sm-artifact(有关更多详细信息,请参阅 Epics 中的 “在 SageMaker AI 上运行工作流程”。)

  3. 数据科学家使用 Python 脚本启动 SageMaker AI 训练作业或超参数优化 (HPO) 作业。对于常规训练作业,调整后的配置将写入名为的亚马逊简单存储服务 (Amazon S3) 存储桶。hydra-sample-config对于 HPO 作业,将应用位于config文件夹中的默认配置集。

  4. SageMaker AI 训练作业提取 Docker 镜像,从 Amazon S3 存储桶读取输入数据hydra-sample-data,然后从 Amazon S3 存储桶获取配置hydra-sample-config或使用默认配置。训练结束后,该任务会将输出数据保存到 Amazon S3 存储桶hydra-sample-data

自动化和扩缩

工具

AWS 服务

  • AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。

  • AWS Command Line Interface (AWS CLI) 是一个开源工具,可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。对于这种模式, AWS CLI 对于初始资源配置和测试都很有用。

  • Amazon Elastic Container Registry (Amazon ECR) 是一项安全、可扩展且可靠的托管容器映像注册表服务。

  • Amazon SageMaker AI 是一项托管机器学习 (ML) 服务,可帮助您构建和训练机器学习模型,然后将其部署到生产就绪的托管环境中。 SageMaker AI Training 是 SageMaker AI 中一项完全托管的机器学习服务,支持大规模训练机器学习模型。该工具利用内置的可扩展性以及与其他 AWS 服务模型的集成,可以有效地处理训练模型的计算需求。 SageMaker AI Training 还支持自定义算法和容器,使其灵活适用于各种机器学习工作流程。

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

其他工具

  • Docker 是一组平台即服务(PaaS)产品,它们使用操作系统级别的虚拟化技术在容器中交付软件。在这种模式中,它用于确保从开发到部署的各个阶段的环境保持一致,并可靠地打包依赖关系和代码。Docker 的容器化允许在整个工作流程中轻松扩展和版本控制。

  • Hydra 是一款配置管理工具,它为处理多种配置和动态资源管理提供了灵活性。它在管理环境配置方面发挥了重要作用,允许在不同的环境中进行无缝部署。有关 Hydra 的更多详细信息,请参阅其他信息

  • Python 是通用的计算机编程语言。Python 用于编写机器学习代码和部署工作流程。

  • P@@ o etry 是一款在 Python 中进行依赖管理和打包的工具。

代码存储库

此模式的代码可在-w GitHub configuring-sagemaker-training-jobsith-h ydra 存储库中找到。

最佳实践

  • 选择一个 IAM 角色来部署和启动 SageMaker AI 训练作业,该角色遵循最低权限原则,并授予执行任务所需的最低权限。有关更多信息,请参阅 IAM 文档中的授予最低权限安全最佳实践

  • 使用临时证书访问终端中的 IAM 角色。

操作说明

Task描述所需技能

创建并激活虚拟环境。

要创建和激活虚拟环境,请在存储库的根目录中运行以下命令:

poetry install poetry shell
常规 AWS

部署基础设施。

要使用部署基础架构 CloudFormation,请运行以下命令:

aws cloudformation deploy --template-file infra/hydra-sagemaker-setup.yaml --stack-name hydra-sagemaker-setup --capabilities CAPABILITY_NAMED_IAM
通用 AWS, DevOps 工程师

下载示例数据。

要将输入数据从 openml 下载到本地计算机,请运行以下命令:

python scripts/download_data.py
常规 AWS

在本地运行以进行快速测试。

要在本地运行训练代码进行测试,请运行以下命令:

python mypackage/train.py data.train_data_path=data/train.csv evaluation.base_dir_path=data

所有执行的日志按执行时间存储在名为的文件夹中outputs。有关更多信息,请参阅GitHub 存储库中的 “输出” 部分。

通过使用该--multirun功能,您还可以使用不同的参数并行执行多项训练。有关更多详细信息,请参阅 Hydra 文档。

数据科学家
Task描述所需技能

设置环境变量。

要在 SageMaker AI 上运行作业,请设置以下环境变量,并提供您 AWS 区域 和您的 AWS 账户 ID:

export ECR_REPO_NAME=hydra-sm-artifact export image_tag=latest export AWS_REGION="<your_aws_region>" # for instance, us-east-1 export ACCOUNT_ID="<your_account_id>" export BUCKET_NAME_DATA=hydra-sample-data-$ACCOUNT_ID export BUCKET_NAME_CONFIG=hydra-sample-config-$ACCOUNT_ID export AWS_DEFAULT_REGION=$AWS_REGION export ROLE_ARN=arn:aws:iam::${ACCOUNT_ID}:role/hydra-sample-sagemaker export INPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/input/ export OUTPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/output/
常规 AWS

创建并推送 Docker 镜像。

要创建 Docker 镜像并将其推送到 Amazon ECR 存储库,请运行以下命令:

chmod +x scripts/create_and_push_image.sh scripts/create_and_push_image.sh $ECR_REPO_NAME $image_tag $AWS_REGION $ACCOUNT_ID

此任务假设您在自己的环境中拥有有效的证书。Docker 映像被推送到上一个任务中环境变量中指定的 Amazon ECR 存储库,用于激活将在其中运行训练作业的 SageMaker AI 容器。

机器学习工程师,通用 AWS

将输入数据复制到 Amazon S3。

A SageMaker I 训练作业需要获取输入数据。要将输入数据复制到 Amazon S3 存储桶以获取数据,请运行以下命令:

aws s3 cp data/train.csv "${INPUT_DATA_S3_PATH}train.csv"
数据工程师,通用 AWS

提交 SageMaker AI 训练作业。

要简化脚本的执行,请在default.yaml文件中指定默认配置参数。除了确保运行间的一致性外,这种方法还提供了根据需要轻松覆盖默认设置的灵活性。请参见以下示例:

python scripts/start_sagemaker_training_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH
AWS 常规、机器学习工程师、数据科学家

运行 SageMaker AI 超参数调整。

运行 SageMaker AI 超参数调整与提交 SageMaker AII 训练作业类似。但是,正如你在 start_sagemaker_hpo_job.py 文件中看到的那样,执行脚本在一些重要方面有所不同。要调整的超参数必须通过 boto3 有效载荷传递,而不是传递到训练作业的通道。

要启动超参数优化 (HPO) 作业,请运行以下命令:

python scripts/start_sagemaker_hpo_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH
数据科学家

故障排除

事务解决方案

令牌已过期

导出新的 AWS 凭证。

缺乏 IAM 权限

请务必导出具有部署 CloudFormation 模板和启动 A SageMaker I 训练任务所需的所有 IAM 权限的 IAM 角色的证书。

相关资源

其他信息

这种模式解决了以下挑战:

从本地开发到大规模部署的一致性 — 通过这种模式,开发人员可以使用相同的工作流程,无论他们是在使用本地 Python 脚本、运行本地 Docker 容器、在 SageMaker AI 上进行大型实验,还是在生产中在 AI 上 SageMaker 部署。这种一致性很重要,原因如下:

  • 更快的迭代 — 它允许快速进行局部实验,而无需在扩大规模时进行重大调整。

  • 无需重构 — 可以无缝过渡到更大规模的 SageMaker AI 实验,无需对现有设置进行全面改革。

  • 持续改进 — 开发新功能和不断改进算法非常简单,因为代码在不同环境中保持不变。

配置管理-此模式利用配置管理工具 Hydra 来提供以下好处:

  • 参数在配置文件中定义,与代码分开。

  • 不同的参数集可以轻松交换或组合。

  • 由于每次运行的配置都会自动记录,因此简化了实验跟踪。

  • 云实验可以使用与本地运行相同的配置结构,从而确保一致性。

使用 Hydra,您可以有效地管理配置,启用以下功能:

  • 划分配置 — 将您的项目配置分成更小、易于管理的部分,可以独立修改。这种方法可以更轻松地处理复杂的项目。

  • 轻松调整默认值 — 快速更改基准配置,让测试新想法变得更加简单。

  • 对齐 CLI 输入和配置文件 — 将命令行输入与配置文件顺畅地组合在一起。这种方法可以减少混乱和混乱,使您的项目随着时间的推移更易于管理。