数据科学

使用 GPU 预测 Apache Spark 的性能

大数据分析领域正在不断寻找加速处理和降低基础设施成本的方法。Apache Spark 已成为用于横向扩展分析的领先平台,可处理 ETL、机器学习和深度学习工作负载的大型数据集。虽然传统上基于 CPU,但 GPU 加速的出现提供了一个令人信服的前景:显著加速数据处理任务。

但是,将 Spark 工作负载从 CPU 迁移到 GPU 并非易事。GPU 加速虽然对某些操作非常强大,但不一定能提高每个场景中的性能。小型数据集、大量数据移动以及使用用户定义函数 (User-Defined Functions, UDFs) 等因素有时会对 GPU 性能产生负面影响。相反,涉及高基数数据的工作负载,例如连接、聚合、排序、窗口操作和转码任务 (例如编码/压缩 Apache Parquet 或 Apache ORC 或解析 CSV) 通常是 GPU 加速的积极指标。

这给希望利用 GPU 的组织带来了一个关键问题:在投入时间和资源进行迁移之前,您如何知道您的特定 Spark 工作负载是否真正受益于 GPU 加速?Spark 工作负载在 CPU 和 GPU 上运行的特定环境可能会有很大差异。此外,网络设置、磁盘带宽甚至 GPU 类型都会影响 GPU 的性能,并且这些变量可能很难从 Spark 日志中捕获。

认证工具 

针对此问题提出的解决方案是 Spark RAPIDS 验证工具。此工具旨在分析您现有的基于 CPU 的 Spark 应用程序,并预测哪些应用程序适合迁移到 GPU 集群。它旨在使用基于行业基准和许多真实示例的历史结果训练的机器学习估计模型,在 GPU 上投射 Spark 应用程序的性能。该工具可通过 pip 包 作为命令行界面,并可在各种环境中使用,包括云服务提供商 (CSP) 如 AWS EMR 、Google Dataproc、 Databricks (AWS/Azure) 以及本地环境。有一些快速入门 notebook 专门用于 AWS EMR 和 Databricks 环境。

该工具的工作原理是,将基于 CPU 的 Spark 应用生成的 Spark 事件日志 作为主要输入。这些事件日志包含有关应用程序、其执行程序和所用表达式的重要信息,以及相关的操作指标。该工具支持来自 Spark 2.x 和 Spark 3.x 作业的事件日志。

The qualification tool processes event logs to generate application recommendations for migration to GPU along with Spark config recommendations.
图 1。用于 qualification tool 的高级流程

作为输出,定性工具提供了几个关键信息来帮助迁移过程:

  • 合格的工作负载列表,指明哪些应用程序是 GPU 迁移的候选者。
  • 推荐的 GPU Spark 配置,基于集群信息 (如内存和核心) 以及 Spark 事件日志中可能影响 GPU 上 Spark 应用程序性能的数据进行计算。
  • 对于 CSP 环境 – 推荐的 GPU 集群形状,包括实例类型和数量以及 GPU 信息。

输出提供了一个起点,但必须注意的是,该工具并不能保证推荐的应用程序将得到最大的加速。该工具是一种预测性估算,我们将在下一节中详细解释该方法。该工具通过检查 SQL Dataframe 操作任务所花费的时间来报告其结果。

您可以使用 CLI 命令从命令行运行该工具:spark_rapids qualification --eventlogs <file-path> --platform <platform>

资格认证的工作原理 

那么,该工具如何在内部提供这些预测和建议呢?该验证工具的核心在于它能够分析输入事件日志并提取各种指标,然后将其用作特征。该工具会解析原始事件日志,并生成包含每个 SQL 执行 ID (sqlID) 的原始特征的中间 CSV 文件。这些特征来自事件日志中的信息,例如磁盘字节溢出、使用的最大堆内存、估计的扫描带宽、查询计划中各个运算符的详细信息以及数据大小。

The estimation model for the qualification tool extracts features from the event log such as bytes spilled, scan bandwidth, data size, and more.
图 2。定性工具估计模型

这些提取的特征可作为机器学习估计模型的输入。此模型已基于各种 Spark 应用程序的 CPU 和 GPU 运行匹配的历史数据进行训练。通过利用这些训练数据,模型可以学习预测应用程序在 GPU 上运行时可能实现的加速。该工具使用这些历史基准测试中的数据来估算单个操作员的速度。然后,将此估计与其他相关启发式算法相结合,以确定 GPU 迁移工作负载的总体资格。该工具附带针对各种环境定制的预训练估计模型,主要在 NDS 基准工作负载 上进行训练。

构建自定义资格模型

虽然预训练模型适用于许多场景,但您可能会遇到开箱即用的预测无法准确满足特定需求的情况。如果您的工作负载与主要训练模型的 NDS 基准测试不相似,如果您的 Spark 环境(硬件、网络等)与预训练环境明显不同,或者您已在环境中的 CPU 和 GPU 上对大量工作负载进行基准测试,并观察到与预测的差异。

在这些情况下,Spark RAPIDS 资格工具能够构建自定义资格估计模型。这允许您专门根据自己的数据和环境训练估计模型,从而有可能实现更准确的预测。

The process to build a custom estimation model starts with running CPU and GPU workloads to collect event logs, then preprocessing the logs, and then training the model before feature importance and evaluation.
图 3。构建自定义 Estimation Model 的过程

运行 CPU 和 GPU 工作负载并收集事件日志

要训练能够准确预测环境中 GPU 性能的模型,您需要包含为相同工作负载运行的 CPU 和 GPU 的训练数据。该过程涉及在 CPU 和 GPU 集群上运行目标 Spark 应用程序,并收集生成的 Spark 事件日志。为每个工作负载收集 CPU 和 GPU 事件日志对至关重要。CPU 事件日志用于推导模型的特征,GPU 事件日志用于计算实际实现的加速,以此作为训练的标签。

预处理事件日志 

在训练之前,需要处理收集的事件日志,以提取模型所需的特征。预处理步骤使用 Profiler 工具解析原始事件日志,并生成包含每个 sqlID 的“原始特征”的 CSV 文件。此过程可能需要一些时间,具体取决于事件日志的数量和大小。为优化后续运行,可以将 $QUALX_CACHE_DIR 环境变量设置为缓存这些中间 Profiler CSV 文件。可以使用 CLI 命令 qualx preprocess --dataset datasets 执行预处理步骤。

训练 XGBoost 模型 

通过预处理提取特征后,您可以训练自定义 XGBoost 模型。可以使用 spark_rapids train CLI 命令启动训练过程。您需要提供包含数据集 JSON 文件的目录的路径、要保存经过训练的模型的路径,以及生成的 CSV 文件的输出文件夹。例如,您可以运行 spark_rapids train --dataset datasets --model custom_onprem.json --output_folder train_output。训练过程利用机器学习并 利用 Optuna 进行超参数优化 。您还可以配置超参数搜索的试验次数。模型在 SQL 执行 ID 级别 (sqlID) 上进行训练。一般来说,对于“初始”模型,建议使用大约 100 个 sqlID,对于“良好”模型,建议使用大约 1000 个 sqlID。

评估功能重要性和模型性能

在训练后,评估模型所使用特征的重要性非常有用。虽然估计模型具有内置的特征重要性指标 (增益、覆盖、频率) ,但也有可用的 Shapley (SHAP) 值,这些值提供博论重要性分配,并且是叠加的,可对最终预测进行求和。典型的重要特性包括持续时间、compute、和网络 I/O。

您还可以通过比较预测的加速与从训练数据中观察到的实际加速来评估训练模型的性能。理想的预测结果将落在单位线上 (预测的加速等于实际的加速) 。您可以选择适合您用例的评估指标,例如 Mean Absolute Percentage Error (MAPE) 、精度或召回率。

The evaluation graph shows actual speedup vs predicted speedup for various Spark queries.  That allows the custom model to be evaluated for true positives, false positives, true negatives, and false negatives based on evaluation criteria.
图 4。自定义模型的示例评估图

使用自定义模型进行预测

在对自定义训练模型的性能感到满意后,您可以将其与验证工具结合使用,以预测新的未见过的 Spark 应用的加速情况。运行 spark_rapids prediction 命令时,只需使用 --custom_model_file 参数提供经过训练的模型文件 (例如 custom_onprem.json) 的路径即可。然后,该工具将使用您的自定义模型 (而非默认的预训练模型) 来分析事件日志,并提供加速预测和建议。输出将包括每个应用程序和每个 SQL 的加速预测、用于预测的特征值以及特征重要性值。

通过构建自定义资格模型,您可以根据特定环境和工作负载定制预测过程,提高推荐的准确性,最终帮助您更有效地将 GPU 用于 Spark 应用。

在 GPU 上开始使用 Apache Spark

企业可以利用 适用于 Apache Spark 的 RAPIDS 加速器 将 Apache Spark 工作负载无缝迁移到 NVIDIA GPU。适用于 Apache Spark 的 RAPIDS 加速器将 RAPIDS cuDF 库的强大功能与 Spark 分布式计算框架的规模相结合,利用 GPU 加速处理。通过使用 RAPIDS 加速器为 Apache Spark 插件 JAR 文件启动 Spark,在不更改代码的情况下在 GPU 上运行现有 Apache Spark 应用程序。

验证工具也是 Project Aether 的一部分,Project Aether 是一系列工具和流程,可自动验证、测试、配置和优化 Spark 工作负载,以实现大规模 GPU 加速。有兴趣使用 Project Aether 协助其 Spark 迁移的组织可以 申请这项免费服务

有关资格认证工具的更多信息,请查看 Spark RAPIDS 用户指南。如需了解有关此主题的更详细的技术视图,您可以观看 GTC 2025 Spark RAPIDS 工具点播会议。

 

标签