某机构的EMR上的项目Aether:大规模将Apache Spark工作负载迁移至GPU
数据是现代商业的燃料,但依赖基于旧式CPU的Apache Spark管道会带来沉重的负担。它们本质上是缓慢的,需要大量的基础设施,并导致巨大的云支出。因此,GPU加速的Spark正成为一种领先的解决方案,利用并行处理提供闪电般的性能。这种更高的效率降低了云账单并节省了宝贵的开发时间。
在此基础之上,我们介绍一种智能且高效的方法,用于迁移在某机构EMR(Elastic MapReduce)上运行的现有基于CPU的Spark工作负载。项目Aether是一款某机构工具,旨在实现这一过渡的自动化。它通过接收现有的CPU作业,并使用RAPIDS加速器对其进行优化,以在GPU加速的EMR上运行,从而获得性能优势。
什么是项目Aether?
(图1. 项目Aether概览,显示工作流阶段和服务)
项目Aether是一套微服务和流程,旨在为RAPIDS加速器自动化迁移和优化,有效消除手动操作的不便。它旨在通过以下方式减少从CPU到GPU的Spark作业的迁移时间:
- 使用推荐的引导配置进行潜在GPU加速的预测模型。
- 在沙盒环境中对GPU作业进行开箱即用的测试和调优。
- 针对成本和运行时间的智能优化。
- 与某机构EMR支持的工作负载完全集成。
某机构EMR集成
现在支持某机构EMR平台,项目Aether自动化了GPU测试集群的管理以及Spark步骤的转换和优化。用户可以使用所提供的服务将现有的EMR CPU Spark工作负载迁移到GPU。
设置和配置
首先,需要满足以下先决条件。
- 某机构EMR on EC2:具有GPU实例配额的某机构云账户
- AWS CLI:使用
aws configure进行配置 - Aether NGC:请求访问权限,使用
ngc config set配置凭证,并遵循Aether安装说明。
为EMR配置Aether
安装Aether包后,使用以下命令为EMR平台配置Aether客户端:
# 初始化并列出配置
$ aether config init
$ aether config list
# 选择EMR平台和区域
$ aether config set core.selected_platform emr
$ aether config set platform.emr.region <区域>
# 设置必需的EMR S3路径
$ aether config set platform.emr.spark_event_log_dir <用于事件日志的S3路径>
$ aether config set platform.emr.cluster.artifacts_path <用于上传Aether构件的S3路径>
$ aether config set platform.emr.cluster.log_path <用于集群日志URI的S3路径>
示例Aether EMR迁移工作流
Aether CLI工具提供了多个用于运行服务的模块化命令。每个命令显示一个汇总表,并在作业历史数据库中跟踪每次运行。在任何时候,可以参考“4. 迁移:报告与建议”来查看被跟踪的作业。使用 --help 选项获取每个 aether 命令的更多详细信息。
示例EMR工作流需要从一个现有的Spark步骤开始,该步骤ID为 s-XXX,在一个集群ID为 j-XXX 的CPU EMR集群上运行。关于向EMR集群提交步骤的更多信息,请参阅某机构EMR文档。
迁移过程分为四个核心阶段:预测、优化、验证和迁移。
1. 预测:资格评估
确定CPU Spark作业对GPU加速的可行性,并生成初始优化建议。
资格评估工具使用QualX机器学习系统的XGBoost模型,根据从CPU事件日志中得出的工作负载特征,预测潜在的GPU加速效果和兼容性。
- 输入: 从EMR步骤和集群API获取或直接提供的CPU事件日志。
- 输出:
- 由自动调谐器生成的推荐Spark配置参数。
- 推荐的GPU集群规格(实例类型和数量),以优化成本节约。
- 用于跟踪此作业及任何后续作业运行的Aether作业ID。
- 命令:
# 选项1:使用平台ID $ aether qualify --platform_job_id <cpu_step_id> --cluster_id <cpu_cluster_id> # 选项2:直接提供事件日志路径 $ aether qualify --event_log <S3或本地事件日志路径>
2. 优化:自动测试与调优
通过在GPU集群上测试作业并迭代调优Spark配置参数,以实现最佳性能和成本节约。
使用集群服务创建GPU测试集群,然后使用 tune 服务优化GPU作业,该服务会迭代运行 submit 和 profile:
-
提交: 作业提交服务使用指定配置将Spark作业提交到GPU集群。
-
分析: 分析服务使用性能分析工具处理GPU事件日志,以分析瓶颈并生成新的Spark配置参数,从而提高性能和/或降低成本。
-
输入:
- 来自
qualify输出的、针对GPU作业的推荐Spark配置参数。 - 来自
qualify输出的、用于创建GPU集群的推荐GPU集群规格。
- 来自
-
输出: 从所有调优迭代中选择持续时间最短的运行作为最佳GPU配置。
-
命令:
# A. 创建测试EMR GPU集群: # 选项1:使用推荐的集群规格ID和默认集群配置 $ aether cluster create --cluster_shape_id <来自qualify的推荐集群规格ID> # 选项2:提供自定义配置文件 $ aether cluster create --cluster_shape_id <来自qualify的推荐集群规格ID> --config_file <自定义集群YAML文件> # B. 向集群提交GPU步骤: $ aether submit --config_id <来自qualify的推荐Spark配置ID> --cluster_id <来自create的GPU集群ID> # C. 分析GPU运行以生成新的推荐Spark配置: $ aether profile --platform_job_id <来自submit的GPU步骤ID> --cluster_id <来自create的GPU集群ID> # D. 迭代调优作业(提交+分析循环): # 调优作业进行3次迭代 $ aether tune --aether_job_id <aether_job_id> --cluster_id <来自create的GPU集群ID> --min_tuning_iterations 3
3. 验证:数据完整性检查
通过确保GPU作业的结果与原始CPU作业相同,来确认GPU作业的输出完整性。
验证服务会比较从事件日志中检索到的关键行指标,特别是读取的行数和写入的行数,在最佳GPU运行和原始CPU运行之间进行对比。
- 命令:
# 验证CPU和GPU作业指标 $ aether validate --aether_job_id <aether_job_id>
4. 迁移:报告与建议
查看作业历史数据库中跟踪作业的详细报告,并查看每个作业的迁移建议,包括最优的Spark配置参数和GPU集群配置。
报告服务提供CLI和UI选项来显示:
-
关键绩效指标 (KPI): 所有作业的总加速比和总成本节约。
-
作业列表: 每个作业的加速比、成本节约和迁移建议。
-
作业详情: 某个作业的所有作业运行(原始CPU运行和GPU调优运行)的指标和详情。
-
命令:
# 列出所有作业报告 $ aether report list # 查看特定作业的所有作业运行 $ aether report job --aether_job_id <aether_job_id> # 启动Aether UI以在浏览器中查看报告 $ aether report ui
(图2. Aether报告UI作业详情示例截图)
(图3. Aether报告UI GPU配置详情示例截图)
5. 自动化运行
将上述所有单个服务组合成一个单一的自动化 aether run 命令:
# 在CPU事件日志上运行完整的Aether工作流
$ aether run --event_log <S3或本地事件日志路径>
结论
项目Aether是一个用于加速大数据处理的强大工具,减少了将大规模Apache Spark工作负载迁移到GPU并在其上运行所关联的时间和成本。
要尝试将其用于大规模迁移Apache Spark工作负载,请申请项目Aether的访问权限。要了解有关RAPIDS插件的更多信息,请参阅Apache Spark的RAPIDS加速器文档。FINISHED