如果您在 amazon.com 上搜索过要购买的商品,则表明您使用过亚马逊搜索服务。 在 Amazon Search,我们负责为全球客户提供搜索和发现体验。 在后台,我们为我们的全球产品目录编制索引,部署高度可扩展的 AWS 队列,并使用先进的机器学习 (ML) 将相关且有趣的产品与每个客户的查询相匹配。
我们的科学家定期训练数千个 ML 模型以提高搜索结果的质量。 支持大规模实验提出了自己的挑战,尤其是在提高训练这些 ML 模型的科学家的生产力方面。
在这篇文章中,我们分享了我们如何围绕 亚马逊SageMaker 培训工作,让我们的科学家能够一劳永逸地进行数千次实验,并在需要时得到通知。 他们现在可以专注于高价值任务和解决算法错误,节省 60% 的时间。
挑战
在 Amazon Search,我们的科学家通过在 SageMaker 上试验和运行大量 ML 模型训练作业来解决信息检索问题。 为了跟上我们团队的创新步伐,我们模型的复杂性和训练工作的数量随着时间的推移而增加。 SageMaker 培训作业使我们能够减少大规模培训和调整这些模型的时间和成本,而无需管理基础设施。
与此类大型 ML 项目中的所有内容一样,培训工作可能会因多种因素而失败。 这篇文章的重点是算法错误导致的容量短缺和故障。
我们设计了一个带有作业管理系统的架构,以容忍并降低由于容量不可用或算法错误而导致作业失败的可能性。 它使科学家能够一劳永逸地完成数千个训练工作,在暂时失败时自动重试它们,并在需要时获得成功或失败的通知。
解决方案概述
在下面的解决方案图中,我们使用 SageMaker 训练作业作为我们解决方案的基本单元。 也就是说,作业代表 ML 模型的端到端训练。
该解决方案的高级工作流程如下:
- 科学家调用 API 向系统提交新工作。
- 该作业已注册到
New
元数据存储中的状态。 - 作业调度程序异步检索
New
元数据存储中的作业,解析其输入,并尝试为每个作业启动 SageMaker 训练作业。 他们的状态变为Launched
orFailed
取决于成功。 - 监视器定期检查作业进度,并报告其
Completed
,Failed
或InProgress
元数据存储中的状态。 - 触发通知器进行报告
Completed
和Failed
给科学家工作。
保留元数据存储中的作业历史记录还允许我们的团队进行趋势分析并监控项目进度。
该作业调度解决方案使用松散耦合的无服务器组件,基于 AWS Lambda, Amazon DynamoDB, 亚马逊简单通知服务 (亚马逊 SNS),以及 亚马逊EventBridge. 这确保了横向可扩展性,使我们的科学家能够以最少的操作工作量启动数千个工作。 下图说明了无服务器架构。
在以下部分中,我们将更详细地介绍每个服务及其组件。
DynamoDB 作为作业运行的元数据存储
DynamoDB 的易用性和可扩展性使其成为将作业元数据持久保存在 DynamoDB 表中的自然选择。 该解决方案存储了科学家提交的工作的多个属性,从而有助于进度跟踪和工作流程编排。 最重要的属性如下:
- 作业编号 – 唯一的作业 ID。 这可以由科学家自动生成或提供。
- 工作现状 – 作业的状态。
- 作业参数 – 创建训练作业所需的其他参数,例如 Amazon S3 中的输入路径、训练图像 URI 等。 有关创建训练作业所需参数的完整列表,请参阅 创建训练作业.
核心逻辑的 Lambda
我们用三个 基于容器 用于编排作业工作流程的 Lambda 函数:
- 提交作业 – 科学家在需要启动新工作时调用此功能。 为简单起见,它充当 API。 你也可以在它前面 Amazon API网关, 如果需要的话。 此函数在 DynamoDB 表中注册作业。
- 启动工作 – 此函数定期检索
New
DynamoDB 表中的作业并使用 SageMaker 启动它们 创建训练作业 命令。 它重试瞬态故障,例如ResourceLimitExceeded
和CapacityError
, 以测量系统的弹性。 然后它将作业状态更新为Launched
orFailed
取决于成功。 - 监控作业 – 此功能使用 描述培训工作 命令,并相应地更新 DynamoDB 表。 它民意调查
Failed
元数据中的作业,并评估它们是否应该重新提交或标记为最终失败。 当他们的工作达到最终状态时,它还会向科学家发布通知消息。
用于调度的 EventBridge
我们使用 EventBridge 按计划运行 Launch Jobs 和 Monitor Jobs Lambda 函数。 有关详细信息,请参阅 教程:使用 EventBridge 安排 AWS Lambda 函数.
或者,您可以使用 Amazon DynamoDB流 对于触发器。 有关详细信息,请参阅 DynamoDB流和AWS Lambda触发器.
使用 Amazon SNS 的通知
我们的科学家是 使用 Amazon SNS 通过电子邮件通知 当他们的工作达到最终状态时(Failed
在最大重试次数后), Completed
或 Stopped
.
结论
在这篇博文中,我们分享了 Amazon Search 如何通过调度 ML 模型训练工作负载并在容量不足或算法错误时重试它们来增加弹性。 我们将 Lambda 函数与 DynamoDB 表结合使用作为中央元数据存储来编排整个工作流程。
这样的调度系统允许科学家提交他们的工作而忘记它们。 这可以节省时间并让他们专注于编写更好的模型。
要进一步学习,您可以访问 真棒圣人制造者 并在一个地方找到使用 SageMaker 所需的所有相关和最新资源。
作者简介
王洛超 是亚马逊搜索的软件工程师。 他专注于云上的可扩展分布式系统和自动化工具,以加快机器学习应用程序的科学创新步伐。
伊山·巴特 是 Amazon Prime Video 团队的软件工程师。 他主要在 MLOps 领域工作,在过去 4 年中拥有使用 Amazon SageMaker 构建 MLOps 产品的经验。
阿比南丹·帕特尼 是亚马逊搜索的高级软件工程师。 他专注于为可扩展的分布式深度学习训练和实时推理构建系统和工具。
艾曼·埃尔纳拉维 是 Amazon Search 的首席软件工程师,负责机器学习加速、扩展和自动化方面的工作。 她的专长跨越多个领域,包括机器学习、分布式系统和个性化。
索非亚·哈米蒂(Sofian Hamiti) 是AWS的AI / ML专家解决方案架构师。 他通过帮助他们构建和运行端到端机器学习解决方案来帮助各行各业的客户加速其AI / ML之旅。
罗米·达塔(Romi Datta)博士 是 Amazon SageMaker 团队的产品管理高级经理,负责培训、处理和功能存储。 他在 AWS 工作了 4 年多,在 SageMaker、S3 和 IoT 担任多个产品管理领导职务。 在加入 AWS 之前,他曾在 IBM、德州仪器和英伟达担任各种产品管理、工程和运营领导职务。 他拥有硕士和博士学位。 拥有德克萨斯大学奥斯汀分校的电气和计算机工程博士学位,以及芝加哥大学布斯商学院的 MBA 学位。
RJ 是 Search M5 团队的一名工程师,负责构建用于训练和推理的大规模深度学习系统。 工作之余,他探索不同的美食佳肴并参加球拍运动。