我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
Vericast 如何使用亚马逊 SageMaker Processing 优化功能工程
这篇文章由 Vericast 的 Jyoti Sharma 和 Sharmo Sarkar 共同撰写。
对于任何机器学习 (ML) 问题,数据科学家都从处理数据开始。这包括收集、探索和理解数据的业务和技术方面,以及评估模型构建过程可能需要的任何操作。这种数据准备的一个方面是特征工程。
特征工程 是 指识别、选择和操作相关变量以将原始数据转换为更有用和更实用的形式,与用于训练模型和对其进行推理的机器学习算法一起使用的过程。此过程的目标是提高算法和生成的预测模型的性能。特征工程过程包括多个阶段,包括特征创建、数据转换、特征提取和特征选择。
对于需要使用不同数据集生成许多 ML 模型的客户来说,构建通用特征工程平台是一项常见任务。此类平台包括创建以编程方式驱动的流程,以生成最终的、具有特征的工程数据,无需人工干预,即可进行模型训练。但是,概括特征工程具有挑战性。每个业务问题都不同,每个数据集都不同,不同客户的数据量差异很大,并且数据质量以及特定列(就结构化数据而言)的基数可能在特征工程过程的复杂性中起着重要作用。此外,客户数据的动态性质还可能导致以最佳方式完成特征工程所需的处理时间和资源存在很大差异。
亚马逊云科技 客户
在这篇文章中,我们将分享Vericast如何使用SageMaker Processing优化功能工程。
解决方案概述
Vericast 的机器学习平台有助于更快地部署基于现有工作流程的新业务模式,或更快地为新客户激活现有模型。例如,预测直邮倾向的模型与预测Vericast客户折扣券敏感度的模型有很大不同。它们解决了不同的业务问题,因此在营销活动设计中具有不同的使用场景。但是从机器学习的角度来看,两者都可以解释为二元分类模型,因此从机器学习工作流程的角度来看,可以共享许多常见步骤,包括模型调整和训练、评估、可解释性、部署和推理。
由于这些模型是二元分类问题(用机器学习术语来说),因此我们将公司的客户分为两类(二进制):一类是会对活动做出积极回应的客户,另一类不会。此外,这些示例被视为不平衡的分类,因为用于训练模型的数据不会包含相同数量的愿意和不会做出积极回应的客户。
诸如此类的模型的实际创建遵循下图所示的广义模式。
除特征工程步骤外,任何二元分类的大多数过程都是相同的。这可能是该过程中最复杂但有时被忽视的步骤。机器学习模型在很大程度上取决于用于创建机器学习的功能。
Vericast 的云原生机器学习平台旨在推广和自动化各种机器学习工作流程的功能工程步骤,并通过使用以下功能在成本与时间指标上优化其性能:
- 该平台的功能工程库 ——它由一组不断演变的转换组成,这些转换经过测试,可以根据特定的客户概念(例如客户人口统计、产品详情、交易详细信息等)生成高质量的可推广功能。
- 智能资源优化器 — 该平台使用 亚马逊云科技 的按需基础设施功能,根据步骤的预期复杂程度和需要流转的数据量,为特定功能工程任务启动最优类型的处理资源。
- 功能工程任务的动态扩展 — 为此使用了各种 亚马逊云科技 服务的组合,但最值得注意的是 SageMaker Processing。这确保了该平台以具有成本效益和及时的方式生成高质量的功能。
这篇文章重点介绍该列表中的第三点,展示了如何实现 SageMaker Processing 作业的动态扩展,从而为大量数据量实现更具管理性、性能更高且更具成本效益的数据处理框架。
SageMaker Processing 支持在 SageMaker 上运行数据预处理或后处理、特征工程、数据验证和模型评估步骤的工作负载。它还提供了托管环境,消除了设置和维护运行工作负载所需的基础设施所需的无差别繁重工作的复杂性。此外,SageMaker Processing 还提供了一个 API 接口,用于运行、监控和评估工作负载。
运行 SageMaker Processing 作业完全在托管的 SageMaker 集群中进行,单个作业在运行时放入实例容器中。托管集群、实例和容器向
这些功能有助于开发通用的预处理工作流程,并简化维护运行这些工作流程的生成环境的困难,从而为 Vericast 数据工程师和科学家带来好处。但是,鉴于数据的动态性质及其可以输入到这种一般解决方案中的各种特征,可能会出现技术问题。系统必须对集群的大小和组成集群的实例做出有根据的初步猜测。这种猜测需要评估数据的标准并推断出 CPU、内存和磁盘需求。这种猜测可能完全合适,可以充分胜任这项工作,但在其他情况下可能不是。对于给定的数据集和预处理作业,CPU 可能不足,从而导致处理性能达到最大化并需要很长时间才能完成。更糟糕的是,内存可能会成为问题,导致性能不佳或内存不足事件导致整个作业失败。
考虑到这些技术障碍,Vericast着手创建解决方案。它们需要在本质上保持一般性,并适应预处理工作流程的大局,在所涉及的步骤中保持灵活性。同样重要的是,既要解决在性能受损的情况下扩展环境的潜在需求,也要从此类事件中平稳恢复过来,或者由于任何原因任务过早完成。
Vericast 为解决此问题而构建的解决方案使用多个 亚马逊云科技 服务协同工作来实现其业务目标。它旨在根据使用监控作业的 Lambda 函数观察到的性能指标重启和扩展 SageMaker Processing 集群。为了避免在扩展事件发生时丢失工作量或从任务意外停止中恢复,我们推出了一项基于检查点的服务,该服务使用 Amazon D ynamo
下图显示了系统工作原理的高级概述。
在以下部分中,我们将更详细地讨论解决方案组件。
初始化解决方案
系统假设解决方案是由一个单独的进程启动的。相反,这种设计并不是为了单独使用而设计的,因为它不会产生任何伪像或输出,而是作为使用 SageMaker Processing 作业的系统的辅助实现。就Vericast而言,解决方案是通过调用在大型系统的另一个模块中启动的Step Functions步骤启动的。
解决方案启动并触发首次运行后,将从 DynamoDB 表中读取基本标准配置。此配置用于为 SageMaker 处理作业设置参数,并对基础架构需求做出了初步假设。SageMaker 处理任务现已启动。
监控元数据和输出
作业启动时,Lambda 函数会将作业处理元数据(当前作业配置和其他日志信息)写入 DynamoDB 日志表。这些元数据和日志信息维护着作业的历史记录、其初始和持续配置以及其他重要数据。
在某些时刻,当作业中的步骤完成时,检查点数据将添加到 DynamoDB 日志表中。处理后的输出数据将移至 Amazon S3,以便在需要时快速恢复。
此 Lambda 函数还设置了一条
停止
或处于
停止
状态。如果出现故障或计划中的自动扩展事件发生,此 EventBridge 规则在重新启动作业时起着重要作用。
监控云端观察指标
Lambda 函数还基于处理作业的指标数学表达式设置 CloudWatch 警报,该表达式监控所有实例的 CPU 使用率、内存利用率和磁盘利用率指标。这种类型的警报(指标)使用 CloudWatch 警报阈值。警报根据指标或表达式在多个时间段内相对于阈值的值生成事件。
在 Vericast 的用例中,阈值表达式旨在将驱动程序和执行器实例视为单独的实例,分别监控每个实例的指标。通过将它们分开,Vericast知道是谁引起了警报。这对于决定如何相应地扩展非常重要:
- 如果执行器指标超过阈值,则最好横向扩展
- 如果驱动指标超过阈值,横向扩展可能无济于事,因此我们必须垂直扩展
警报指标表达式
Vericast 可以在评估规模和失败时访问以下指标:
- CPU 利用率 — 每个 CPU 内核的利用率之和
- 内存利用率 — 容器在实例上使用的内存百分比
- DiskUtil ization — 容器在实例上使用的磁盘空间百分比
- GPU使用率 -实例上容器使用的 GPU 单元的百分比
- gpuMemoryUtilizat ion — 容器在实例上使用的 GPU 内存百分比
在撰写本文时,Vericast仅考虑
将来,他们还打算考虑
CPU利用率 、
。
内存
利用率和磁盘利用率
GPU 利用率 和 GpuMemoryU
tilization
。
以下代码是基于 Vericast 自动扩展指标数学表达式的 CloudWatch 警报示例:
前面表达式中的数字 80 代表阈值。
此表达式表明,CloudWatch 警报正在将驱动程序内存利用率(
内存驱动程序)、CPU 利用率( CPUDriver) 、磁盘利用率(DiskDriver)、 执行器内存利用率(Memory
Exec) 、CPU
。
利用率(CPUExec) 和磁盘利用率(Dis
kExec)视为监控指标
在这里,I
F ((CPUDriver) > 80、1、0
表示如果驱动程序 CPU 利用率超过 80%,则将 1 指定为阈值,否则为 0。 I@@
F (AVG(指标(“memoryExec”))> 80、1、0
表示考虑了所有包含字符串 M
emoryExec
的指标,并据此计算出平均值。如果平均内存利用率百分比超过 80,则将 1 指定为阈值,否则为 0。
表达式中使用逻辑运算符 O
R
来统一表达式中的所有利用率——如果任何利用率达到其阈值,则触发警报。
有关使用基于指标数学表达式的 CloudWatch 指标警报的更多信息,请参阅基于指标数学表达式
云观警报限制
CloudWatch 将每个警报的指标数量限制为 10。如果你需要考虑更多的指标,这可能会造成限制。
为了克服这一限制,Vericast 根据集群的整体大小设置了警报。每三个实例创建一个警报(对于三个实例,将有一个警报,因为这会加起来最多九个指标)。假设要单独考虑驱动程序实例,则会为该驱动程序实例创建另一个单独的警报。因此,创建的警报总数大致相当于执行器节点数的三分之一,以及驱动程序实例的另一个警报。在每种情况下,每个警报的指标数量都低于 10 个指标的限制。
处于警报状态时会发生什么
如果达到预先确定的阈值,则警报进入警
报
状态,该状态使用
Amazon SNS 还被用作 Lambda 函数的触发器,该函数会停止当前正在运行的 SageMaker Processing 作业,因为我们知道该任务可能会失败。此函数还将日志记录到与事件相关的日志表中。
作业启动时设置的 EventBridge 规则将注意到作业在几秒钟后进入
停止
状态。然后,该规则会重新运行第一个 Lambda 函数以重新启动作业。
动态扩展过程
运行两次或更多次后的第一个 Lambda 函数将知道先前的作业已经启动,现在已经停止。该函数将经历类似的过程,即从日志 DynamoDB 表中的原始作业中获取基本配置,还将从内部表中检索更新的配置。此更新后的配置是基于扩展类型设置的资源增量配置。如前所述,缩放类型由警报元数据确定。
之所以使用原始配置加上资源增量,是因为新的配置和新的 SageMaker Processing 作业是随着资源的增加而启动的。
此过程将持续到任务成功完成,并可能导致根据需要进行多次重启,每次都会增加更多资源。
Vericast 的结果
这种自定义的自动扩展解决方案在使Vericast的机器学习平台更强大和更具容错能力方面发挥了重要作用。该平台现在可以在最少的人为干预下优雅地处理不同数据量的工作负载。
在实施该解决方案之前,估计所有正在开发的基于Spark的模块的资源需求是新客户入职流程的最大瓶颈之一。如果客户数据量增加,工作流程就会失败,或者如果生产中的数据量减少,成本将不合理。
有了这个新模块,由于资源限制而导致的工作流程故障减少了近80%。剩下的几个故障主要是由于 亚马逊云科技 账户限制以及自动扩展流程之外造成的。Vericast使用该解决方案的最大优势是他们可以轻松地加入新客户和工作流程。Vericast预计将把流程加快至少 60-70%,最终数字仍有待收集。
尽管Vericast认为这是成功的,但随之而来的是有代价的。根据该模块的性质和整个动态扩展的概念,工作流程所花费的时间往往比为工作流程中的每个模块定制集群的工作流程长约30%(平均案例)。Vericast 继续在这一领域进行优化,希望通过为每个客户端模块整合基于启发式的资源初始化来改进解决方案。
Vericast 机器学习平台高级经理 Sharmo Sarkar 说:“随着我们继续扩大对 亚马逊云科技 和 SageMaker 的使用,我想花点时间重点介绍我们的 亚马逊云科技 客户服务团队、专职的 亚马逊云科技 解决方案架构师以及与我们合作的 亚马逊云科技 专业服务所做的出色工作。他们对 亚马逊云科技 和 SageMaker 的深刻理解使我们能够设计出满足我们所有需求的解决方案,并为我们提供了所需的灵活性和可扩展性。我们非常感谢有这样一支才华横溢且知识渊博的支持团队。”
结论
在这篇文章中,我们分享了SageMaker和SageMaker Processing如何使Vericast能够为大量数据量构建托管、高性能且经济实惠的数据处理框架。通过将 SageMaker Processing 的强大功能和灵活性与其他 亚马逊云科技 服务相结合,他们可以轻松监控通用功能工程流程。它们可以自动检测因计算、内存和其他因素不足而产生的潜在问题,并根据需要自动实现垂直和水平扩展。
SageMaker 及其工具也可以帮助您的团队实现其机器学习目标。
最后,如果这篇文章可以帮助你或激励你解决问题,我们很乐意听听!请分享您的评论和反馈。
作者简介
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。