本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 的配置系统简化参数管理,在该系统中,参数是在单独的配置文件中定义的,可轻松修改和组合,并自动记录每次运行的配置。有关此模式如何应对这些挑战的更多详细信息,请参阅其他信息。
先决条件和限制
先决条件
限制
该代码目前仅针对 A SageMaker I 训练作业。将其扩展到处理任务和整个 SageMaker AI 管道非常简单。
对于完全生产化的 SageMaker AI 设置,需要准备其他细节。示例可以是用于计算和存储的自定义 AWS Key Management Service (AWS KMS) 密钥,也可以是网络配置。您也可通过在
config文件夹的专用子文件夹中使用 Hydra,来配置这些额外选项。有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按区域划分的AWS 服务
。有关特定端点,请参阅服务端点和配额,然后选择相应服务的链接。
架构
下图展示了该解决方案的架构。

下图显示了如下工作流:
数据科学家无需使用 Docker 或 SageMaker AI 即可在本地环境中对算法进行小规模迭代,调整参数并快速测试训练脚本。(有关更多详细信息,请参阅操作说明中的“在本地运行以快速测试”任务。)
对算法感到满意后,数据科学家会构建 Docker 映像,并将其推送到名为
hydra-sm-artifact的 Amazon Elastic Container Registry(Amazon ECR)存储库。(有关更多详细信息,请参阅 Epics 中的 “在 SageMaker AI 上运行工作流程”。)数据科学家使用 Python 脚本启动 SageMaker AI 训练作业或超参数优化 (HPO) 作业。对于常规训练作业,调整后的配置会写入名为
hydra-sample-config的 Amazon Simple Storage Service(Amazon S3)存储桶。对于 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 用于确保从开发到部署的各个阶段的环境保持一致,同时可靠地打包依赖项和代码。借助 Docker 的容器化技术,工作流可轻松实现扩展与版本控制。 Hydra
是一款配置管理工具,为处理多种配置和动态资源管理提供了灵活性。它在管理环境配置方面发挥了重要作用,支持在不同的环境间无缝部署。有关 Hydra 的更多详细信息,请参阅其他信息。 Python
是一种通用的计算机编程语言。Python 用于编写机器学习代码和部署工作流。 Poetry
是 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 容器。 | ML 工程师,常规 AWS |
将输入数据复制到 Amazon S3。 | A SageMaker I 训练作业需要获取输入数据。要将输入数据复制到 Amazon S3 存储桶以获取数据,请运行以下命令:
| 数据工程师、常规 AWS |
提交 SageMaker AI 训练作业。 | 为简化脚本的执行流程,请在
| 常规 AWS、ML 工程师、数据科学家 |
运行 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 输入和配置文件 – 顺畅组合命令行输入和配置文件。这种方法可以减少混乱和混淆,使您的项目随着时间的推移更易于管理。