本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 SageMaker AI 和 Hydra 简化从本地开发到可扩展实验的机器学习工作流程
由 David Sauerwein (AWS)、Julian Ferdinand Grueber (AWS) 和 Marco Geiger (AWS) 创作
摘要
这种模式为在 Amazon A SageMaker I 上配置和运行从本地测试到生产的机器学习 (ML) 算法提供了一种统一的方法。机器学习算法是这种模式的焦点,但其方法延伸到特征工程、推理和整个 ML 管道。此模式通过示例用例演示了从本地脚本开发到 SageMaker AI 训练作业的过渡。
典型的机器学习工作流程是在本地计算机上开发和测试解决方案,在云端运行大规模实验(例如,使用不同的参数),然后在云端部署经批准的解决方案。然后,必须对部署的解决方案进行监控和维护。如果没有统一的工作流程方法,开发人员通常需要在每个阶段重构代码。如果解决方案依赖于大量参数,而这些参数在此工作流程的任何阶段都可能发生变化,那么保持井井有条和一致性就会变得越来越困难。
这种模式解决了这些挑战。首先,它提供了一个统一的工作流程,无论是在本地计算机、容器中还是在人工智能上运行,都能保持一致,从而无需在环境之间进行 SageMaker 代码重构。其次,它通过Hydra的配置系统简化了参数管理,在该系统中,参数是在单独的配置文件中定义的,可以轻松修改和组合,并自动记录每次运行的配置。有关此模式如何解决这些挑战的更多详细信息,请参阅其他信息。
先决条件和限制
先决条件
限制
该代码目前仅针对 A SageMaker I 训练作业。将其扩展到处理任务和整个 SageMaker AI 管道非常简单。
对于完全生产化的 SageMaker AI 设置,需要准备其他细节。示例可以是用于计算和存储的自定义 AWS Key Management Service (AWS KMS) 密钥,也可以是网络配置。您还可以通过在文件夹的专用子文件夹中使用 Hydra 来配置这些其他选项。
config
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按地区划分的AWS 服务
。有关特定终端节点,请参阅服务终端节点和配额,然后选择服务的链接。
架构
下图描述了解决方案的架构。

图表显示了以下工作流:
数据科学家无需使用 Docker 或 SageMaker AI 即可在本地环境中对算法进行小规模迭代,调整参数并快速测试训练脚本。(有关更多详细信息,请参阅 Epics 中的 “在本地运行以进行快速测试” 任务。)
一旦对算法感到满意,数据科学家就会构建 Docker 镜像并将其推送到名为的亚马逊弹性容器注册表 (Amazon ECR) Container Registry 存储库。
hydra-sm-artifact
(有关更多详细信息,请参阅 Epics 中的 “在 SageMaker AI 上运行工作流程”。)数据科学家使用 Python 脚本启动 SageMaker AI 训练作业或超参数优化 (HPO) 作业。对于常规训练作业,调整后的配置将写入名为的亚马逊简单存储服务 (Amazon S3) 存储桶。
hydra-sample-config
对于 HPO 作业,将应用位于config
文件夹中的默认配置集。SageMaker AI 训练作业提取 Docker 镜像,从 Amazon S3 存储桶读取输入数据
hydra-sample-data
,然后从 Amazon S3 存储桶获取配置hydra-sample-config
或使用默认配置。训练结束后,该任务会将输出数据保存到 Amazon S3 存储桶hydra-sample-data
。
自动化和扩缩
对于自动训练、再训练或推理,您可以将 AWS CLI 代码与、或 Amazon 等AWS Lambda服务集成。AWS CodePipeline EventBridge
可以通过更改实例大小的配置或为分布式训练添加配置来实现扩展。
工具
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
最佳实践
操作说明
Task | 描述 | 所需技能 |
---|---|---|
创建并激活虚拟环境。 | 要创建和激活虚拟环境,请在存储库的根目录中运行以下命令:
| 常规 AWS |
部署基础设施。 | 要使用部署基础架构 CloudFormation,请运行以下命令:
| 通用 AWS, DevOps 工程师 |
下载示例数据。 | 要将输入数据从 openml
| 常规 AWS |
在本地运行以进行快速测试。 | 要在本地运行训练代码进行测试,请运行以下命令:
所有执行的日志按执行时间存储在名为的文件夹中 通过使用该 | 数据科学家 |
Task | 描述 | 所需技能 |
---|---|---|
设置环境变量。 | 要在 SageMaker AI 上运行作业,请设置以下环境变量,并提供您 AWS 区域 和您的 AWS 账户 ID:
| 常规 AWS |
创建并推送 Docker 镜像。 | 要创建 Docker 镜像并将其推送到 Amazon ECR 存储库,请运行以下命令:
此任务假设您在自己的环境中拥有有效的证书。Docker 映像被推送到上一个任务中环境变量中指定的 Amazon ECR 存储库,用于激活将在其中运行训练作业的 SageMaker AI 容器。 | 机器学习工程师,通用 AWS |
将输入数据复制到 Amazon S3。 | A SageMaker I 训练作业需要获取输入数据。要将输入数据复制到 Amazon S3 存储桶以获取数据,请运行以下命令:
| 数据工程师,通用 AWS |
提交 SageMaker AI 训练作业。 | 要简化脚本的执行,请在
| AWS 常规、机器学习工程师、数据科学家 |
运行 SageMaker AI 超参数调整。 | 运行 SageMaker AI 超参数调整与提交 SageMaker AII 训练作业类似。但是,正如你在 start_sagemaker_hpo_job.py 要启动超参数优化 (HPO) 作业,请运行以下命令:
| 数据科学家 |
故障排除
事务 | 解决方案 |
---|---|
令牌已过期 | 导出新的 AWS 凭证。 |
缺乏 IAM 权限 | 请务必导出具有部署 CloudFormation 模板和启动 A SageMaker I 训练任务所需的所有 IAM 权限的 IAM 角色的证书。 |
相关资源
其他信息
这种模式解决了以下挑战:
从本地开发到大规模部署的一致性 — 通过这种模式,开发人员可以使用相同的工作流程,无论他们是在使用本地 Python 脚本、运行本地 Docker 容器、在 SageMaker AI 上进行大型实验,还是在生产中在 AI 上 SageMaker 部署。这种一致性很重要,原因如下:
更快的迭代 — 它允许快速进行局部实验,而无需在扩大规模时进行重大调整。
无需重构 — 可以无缝过渡到更大规模的 SageMaker AI 实验,无需对现有设置进行全面改革。
持续改进 — 开发新功能和不断改进算法非常简单,因为代码在不同环境中保持不变。
配置管理-此模式利用配置管理工具 Hydra
参数在配置文件中定义,与代码分开。
不同的参数集可以轻松交换或组合。
由于每次运行的配置都会自动记录,因此简化了实验跟踪。
云实验可以使用与本地运行相同的配置结构,从而确保一致性。
使用 Hydra,您可以有效地管理配置,启用以下功能:
划分配置 — 将您的项目配置分成更小、易于管理的部分,可以独立修改。这种方法可以更轻松地处理复杂的项目。
轻松调整默认值 — 快速更改基准配置,让测试新想法变得更加简单。
对齐 CLI 输入和配置文件 — 将命令行输入与配置文件顺畅地组合在一起。这种方法可以减少混乱和混乱,使您的项目随着时间的推移更易于管理。