使用Aether项目大规模迁移Spark工作负载至GPU

3 阅读4分钟

某机构的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作业,该服务会迭代运行 submitprofile

  • 提交: 作业提交服务使用指定配置将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