DATA AI Summit 2022提及到的对 aggregate 的优化

简介: DATA AI Summit 2022提及到的对 aggregate 的优化

背景


本文基于SPARK 3.3.0


HashAggregate的优化


该优化是FaceBook(Meta) 内部的优化,还有合并到spark社区。

该优化的主要是partialaggregate的部分:对于类似求count,sum,Avg的聚合操作,会存在现在mapper进行部分聚合的操作,之后在reduce端,再进行FinalAggregate操作。这看起来是没有问题的(能够很好的减少网络IO),但是我们知道对于聚合操作,我们会进行数据的spill的操作,如果在mapper阶段合并的数据很少,以至于抵消不了网络IO带来的消耗的话,这无疑会给任务带来损耗。

874a8e4b1f2049e5b90b054e4a2abd1e.png

964d47901ff14cab9ac60e63955e30c8.png

4f02bf94d848458ebd2f0508d8ba3242.png

image.png


利用运行时的指标信息,能够达到比较好的加速效果。

7af2035a744d4819ba269e2200decc8f.png


ObjectHashAggregate的优化


对于ObjectHashAggreate的原理,可以参考深入理解SPARK SQL 中HashAggregateExec和ObjectHashAggregateExec以及UnsafeRow,该文可以比较清楚的解释ObjectHashAggregate和HashAggregate的区别:


ObjectHashAggregate能够弥补HashAggregate 不能支持collect_set等这种表达式,从而不会转变为SortAggregate

ObjectHashAggregate利用的是java Array对象(SpecificInternalRow)保存聚合的中间缓冲区,这对jvm gc是不太友好的

ObjectHashAggregate根据hashMap的size(默认是128),而不是输入的行数来进行spill,这会导致提前spill,内存利用率不高。

由于提前的spill,ObjectHashAggregate会对剩下的所有数据做额外的一次排序操作(如果没有spill,就不需要额外的sort操作),而HashAggregate则是会对每次需要spill的数据做排序


使用jvm heap的内存使用情况以及处理的行数来指导什么时候开始spill。

但是这种在数据倾斜的情况下,会增加OOM的风险。


SortAggregate优化


目前SortAggreaget的现状是:


每个任务在sort Aggreate前需要按照key进行排序

根据排序的结果,在相邻的行之间进行聚合操作

不同于Hash Aggregate:

不需要hashTable,也就不存在内存溢写和回退到sortAggregate

优化器更喜欢选择hashAggregate

没有codegen的实现.

目前在spark 3.3.0增加的功能:


如果数据是有序的话,会选择用sortAggragate替代HashAggregate

通过物理计划Rule ReplaceHashWithSortAgg 来做替换,当然通过spark.sql.execution.replaceHashWithSortAgg来开启(默认是关闭的),因为对于任何新特性,在release版本默认都是关闭的,在master分支才是开启的

支持sortAggretate(without keys)的codegen代码生成


其他


对于Aggregate更多的细节了解可以参考sparksql源码系列 | 一文搞懂with one count distinct 执行原理

相关文章
|
12天前
|
存储 人工智能 缓存
【AI系统】Ascend C 语法扩展
Ascend C 是基于标准 C++ 扩展的编程语言,专为华为昇腾处理器设计。本文介绍了 Ascend C 的基础语法扩展、API(基础与高阶)、关键编程对象(数据存储、任务间通信与同步、资源管理及临时变量),以及如何利用这些特性高效开发。通过华为自研的毕昇编译器,Ascend C 实现了主机与设备侧的独立执行能力,支持不同地址空间的访问。API 包括计算、数据搬运、内存管理和任务同步等功能,旨在帮助开发者构建高性能的 AI 应用。
24 2
【AI系统】Ascend C 语法扩展
|
12天前
|
机器学习/深度学习 人工智能 调度
【AI系统】CANN 算子类型
本文介绍了算子的基本概念及其在编程和数学中的作用,重点探讨了CANN算子在AI编程和神经网络中的应用,特别是华为CANN算子在AI CPU上的架构和开发要求。CANN是华为推出的异构计算架构,旨在优化AI处理器的计算效率,支持多种AI框架,涵盖AI Core和AI CPU算子,以适应不同类型的计算需求。文中还详细说明了AI CPU算子的开发流程和适用场景,为开发者提供了宝贵的指导。
30 2
|
2月前
|
存储 人工智能 NoSQL
使用 MongoDB 构建 AI:Gradient Accelerator Block 如何在几秒钟内让您从零开发 AI
借助 MongoDB,开发者可以存储任何结构的数据,然后使用单一查询 API 和驱动程序将这些数据用于 OLTP、文本搜索和向量搜索处理。
|
4月前
|
人工智能 分布式计算 数据处理
Big Data for AI实践:面向AI大模型开发和应用的大规模数据处理套件
文叙述的 Big Data for AI 最佳实践,基于阿里云人工智能平台PAI、MaxCompute自研分布式计算框架MaxFrame、Data-Juicer等产品和工具,实现了大模型数据采集、清洗、增强及合成大模型数据的全链路,解决企业级大模型开发应用场景的数据处理难题。
|
7月前
|
数据采集 人工智能 PyTorch
极智AI | 昇腾CANN ATC模型转换
大家好,我是极智视界,本文介绍一下 昇腾 CANN ATC 模型转换。
389 0
|
7月前
|
存储 人工智能 缓存
[译][AI OpenAI-doc] 生产最佳实践
本指南提供了一套全面的最佳实践,以帮助您从原型转向生产。无论您是经验丰富的机器学习工程师还是最近的爱好者,本指南都应为您提供成功将平台投入生产环境所需的工具:从确保访问我们的API到设计能够处理高流量的稳健架构。使用本指南帮助制定尽可能平稳有效地部署应用程序的计划。
|
7月前
|
人工智能 JSON 机器人
[译][AI OpenAI-doc] 延迟优化
本指南涵盖了一系列核心原则,您可以应用这些原则来改善在各种LLM相关用例中的延迟。这些技术来自于与广泛的客户和开发人员在生产应用程序上的合作,因此无论您正在构建什么——从细粒度的工作流程到端到端的聊天机器人,都应该适用!
[译][AI OpenAI-doc] 延迟优化
|
6月前
|
机器学习/深度学习 人工智能 JSON
人工智能平台PAI操作报错合集之带有all reduce 的算子是trace不出来的,结果会错,怎么才可以绕过去
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
7月前
|
人工智能 vr&ar
[译][AI Research] AI 模型中的“it”是数据集
模型效果的好坏,最重要的是数据集,而不是架构,超参数,优化器。
|
7月前
|
人工智能
极智AI | 讲解TensorRT Fully Connected算子
大家好,我是极智视界,本文讲解一下 TensorRT Fully Connected 算子。
116 0