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

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

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

David Sauerwein、Marco Geiger 和 Julian Ferdinand Grueber,Amazon Web Services

Summary

这种模式为在 Amazon A SageMaker I 上配置和运行从本地测试到生产的机器学习 (ML) 算法提供了一种统一的方法。尽管此模式以 ML 算法为核心,但该方法的适用范围可扩展至特征工程、推理以及整个 ML 管道。此模式通过示例用例演示了从本地脚本开发到 SageMaker AI 训练作业的过渡。

典型的 ML 工作流如下:在本地计算机上开发并测试解决方案,在云端运行大规模实验(例如使用不同参数的实验),然后在云端部署经批准的解决方案。然后,必须对已部署的解决方案进行监控和维护。如果该工作流缺乏统一方法,开发人员通常需要在每个阶段重构代码。如果解决方案依赖大量可能在工作流任一阶段发生变化的参数,那么保持流程的条理性和一致性就会变得愈发困难。

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

先决条件和限制

先决条件

  • 活跃的 AWS 账户

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

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

  • 已安装 Poetry 版本 1.8 或更高版本(但低于 2.0 版本)

  • Docker 已安装

  • Python 版本 3.10.x

限制

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

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

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

架构

下图展示了该解决方案的架构。

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

下图显示了如下工作流:

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

  2. 对算法感到满意后,数据科学家会构建 Docker 映像,并将其推送到名为 hydra-sm-artifact 的 Amazon Elastic Container Registry(Amazon ECR)存储库。(有关更多详细信息,请参阅 Epics 中的 “在 SageMaker AI 上运行工作流程”。)

  3. 数据科学家使用 Python 脚本启动 SageMaker AI 训练作业或超参数优化 (HPO) 作业。对于常规训练作业,调整后的配置会写入名为 hydra-sample-config 的 Amazon Simple Storage Service(Amazon S3)存储桶。对于 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 用于确保从开发到部署的各个阶段的环境保持一致,同时可靠地打包依赖项和代码。借助 Docker 的容器化技术,工作流可轻松实现扩展与版本控制。

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

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

  • Poetry 是 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 容器。

ML 工程师,常规 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、ML 工程师、数据科学家

运行 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 输入和配置文件 – 顺畅组合命令行输入和配置文件。这种方法可以减少混乱和混淆,使您的项目随着时间的推移更易于管理。