使用Project Aether在云端大规模迁移Apache Spark工作负载至GPU
数据是现代业务的燃料,但依赖较老的、基于CPU的Apache Spark管道会带来沉重的代价。它们天生缓慢,需要庞大的基础设施,并导致巨额的云支出。因此,GPU加速的Spark正成为一种领先的解决方案,通过并行处理提供极快的性能。这种提升的效率降低了云账单,并节省了宝贵的开发时间。
在此基础之上,引入了一种智能且高效的方式来迁移现有的、在Amazon Elastic MapReduce (EMR)上运行的基于CPU的Spark工作负载。Project Aether是某机构(NVIDIA)设计的一款工具,旨在自动化这一转换过程。它通过获取现有的CPU作业,并对其进行优化,使其能够在使用RAPIDS Accelerator的GPU加速EMR上运行,从而获得性能提升。
什么是Project Aether?
图1. Project Aether概览,展示了工作流阶段和服务
Project Aether是一套微服务和流程,旨在自动化RAPIDS Accelerator的迁移和优化,有效消除人工操作的摩擦。其目标是通过以下方式缩短从CPU到GPU的Spark作业迁移时间:
- 一个预测模型,使用推荐的引导配置来预估潜在的GPU加速效果。
- 在沙盒环境中对GPU作业进行开箱即用的测试和调优。
- 针对成本和运行时间的智能优化。
- 与Amazon EMR支持的工作负载完全集成。
Amazon EMR集成
Project Aether现已支持Amazon EMR平台,它自动化了GPU测试集群的管理以及Spark步骤的转换和优化。用户可以使用所提供的服务将现有的EMR CPU Spark工作负载迁移到GPU上。
设置和配置
要开始使用,需要满足以下先决条件:
- Amazon EMR on EC2:拥有GPU实例配额的某中心(AWS)账户。
- 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 <region>
# 设置必需的EMR S3路径
$ aether config set platform.emr.spark_event_log_dir <s3_path_for_event_logs>
$ aether config set platform.emr.cluster.artifacts_path <s3_path_for_uploading_aether_artifacts>
$ aether config set platform.emr.cluster.log_path <s3_path_for_cluster_log_uri>
示例Aether EMR迁移工作流
Aether CLI工具提供了多个模块化命令来运行各项服务。每个命令都会显示一个汇总表,并将每次运行记录在作业历史数据库中。在任何时候,都可以参考“4. 迁移:报告与建议”来查看被跟踪的作业。在每个 aether 命令后使用 --help 选项可以获取更多详细信息。
该示例EMR工作流需要从一个现有的Spark步骤开始,该步骤的ID为 s-XXX,它运行在一个ID为 j-XXX 的CPU EMR集群上。有关向EMR集群提交步骤的更多信息,请参考某中心(Amazon EMR)文档。
迁移过程分为四个核心阶段:预测、优化、验证和迁移。
1. 预测:资格评估
确定CPU Spark作业是否适合进行GPU加速,并生成初步的优化建议。
资格评估工具使用QualX机器学习系统的XGBoost模型,根据从CPU事件日志中提取的工作负载特征,来预测潜在的GPU加速效果和兼容性。
-
输入:
- 从EMR步骤和集群API获取的CPU事件日志,或直接提供。
-
输出:
- 由AutoTuner生成的推荐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_or_local_event_log_path>
2. 优化:自动测试与调优
通过在GPU集群上测试作业,并迭代调优Spark配置参数,以实现最佳性能和成本节约。
首先使用集群服务创建GPU测试集群,然后使用调优服务优化GPU作业,该服务会迭代运行提交和分析:
-
提交:作业提交服务使用指定的配置将Spark作业提交到GPU集群。
-
分析:分析服务使用分析工具处理GPU事件日志,以分析瓶颈并生成新的Spark配置参数,从而提升性能或降低成本。
-
输入:
- 从预测阶段输出中获得的、用于GPU作业的推荐Spark配置参数。
- 从预测阶段输出中获得的、用于创建GPU集群的推荐GPU集群形态。
-
输出:
- 在所有调优迭代中,从运行时长最短的作业中选择最佳GPU配置。
-
命令:
# A. 创建一个测试用的EMR GPU集群: # 选项1:使用推荐的集群形态ID和默认集群配置 $ aether cluster create --cluster_shape_id <recommended_cluster_shape_id_from_qualify> # 选项2:提供自定义配置文件 $ aether cluster create --cluster_shape_id <recommended_cluster_shape_id_from_qualify> --config_file <custom_cluster_yaml_file> # B. 向集群提交GPU步骤: $ aether submit --config_id <recommended_spark_config_id_from_qualify> --cluster_id <gpu_cluster_id_from_create> # C. 分析GPU运行结果以生成新的推荐Spark配置: $ aether profile --platform_job_id <gpu_step_id_from_submit> --cluster_id <gpu_cluster_id_from_create> # D. 迭代调优作业(提交 + 分析循环): $ aether tune --aether_job_id <aether_job_id> --cluster_id <gpu_cluster_id_from_create> --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运行命令中:
# 在CPU事件日志上运行完整的Aether工作流
$ aether run --event_log <s3_or_local_event_log_path>
结论
Project Aether是一个强大的工具,用于加速大数据处理,减少在GPU上迁移和运行大规模Apache Spark工作负载所需的时间和成本。
要尝试将其用于Apache Spark工作负载的大规模迁移,可以申请Project Aether的访问权限。要了解有关RAPIDS插件的更多信息,请参阅RAPIDS Accelerator for Apache Spark的文档。FINISHED