【译】【OpenMLDB】:”与Native Spark 3.0相比,我们在AI方面取得了明显的优化效果“

297 阅读4分钟

与原生Spark 3.0相比,我们在AI应用领域取得了明显的优化效果

介绍OpenMLDB及其相对于原生Spark的优势

照片:SpaceXonUnsplash

背景介绍

Spark已经迅速成为大数据处理的事实标准,没有必要再介绍了,但Spark在AI场景下仍有很多不足之处。

  1. 好。原生Spark在Hadoop集群中擅长大数据处理
  2. 不足。SparkSQL的短板在特征提取领域逐渐暴露出来
  3. 不足。Koalas,Apache Spark上的熊猫API

即使SparkSQL和Koalas项目可以提供一些重要的数据处理功能,但对特征提取所需的功能支持仍然非常有限。支持的时间序列特征计算的性能并不令人满意。它只能支持离线分析,但对于人工智能生产,还需要在线计算。而且由于这个过程要反复使用UDF/UDAF,开源Spark和AI的整合还有很大的改进空间。

目前,业界出现了越来越多的原生执行引擎解决方案,如Databricks的Photon模块,英特尔的OAP项目,Nvidia的Spark-rapids项目,以及阿里巴巴的EMR服务。这些项目都有其亮点。它们可以通过底层的原生代码生成,充分利用CPU矢量化和GPU并行计算的特点,并在特定场景下显著提高Spark的性能。但仍有一些不足之处。首先,它只能支持离线计算和在线特征计算,以及人工智能场景落地所需的在线模型估计服务。其次,对于常用的时间序列计算功能(SQL Over Window)没有进一步优化,最后,对于AI场景,特征提取功能也缺乏支持。

几个Spark引擎的比较

图片由作者提供

于是我们发布了我们的OpenMLDB的项目(SparkFE是OpenMLDB的引擎)。它可以弥补上述项目的不足,在AI应用中取得更好的性能。基于LLVM的优化,性能比原来的Spark提高了6倍以上。

优势

  • 基于LLVM优化,高性能表现比原来的Spark提高了6倍以上。
  • 针对人工智能,扩展SQL语法,支持更多的FE函数和时间序列特征计算。
  • 在线和离线一致性,通过时间序列数据库的窗口特征聚合计算,实现SQL的一键在线。
  • 无迁移成本,兼容SparkSQL应用,Scala、Java、Python、R等应用无需修改代码即可享受性能提升。
  • 所以,最后,无论是时间序列特征计算场景,还是机器学习的特定组表场景,最终的性能测试结果显示,OpenMLDB在不增加硬件成本的情况下,可以实现6倍到数百倍的性能提升。

时间序列特征提取。图片由作者提供

用于机器学习的自定义表连接。图片来源:作者

与原生Spark3.0相比的性能优化。

这里我们介绍一些OpenMLDB的应用场景,重点是性能优化方法。

第一个优化是原生窗口计算

底层是基于C++的双向队列数据接口,有效地实现了标准的窗口和子窗口功能。扩展SQL实现的ROWS_RANGE边界,也可以更好地解决同一毫秒数据的计算顺序问题。本机窗口计算

  • 本机窗口计算
  • ➡性能提升
  • ➡ ROWS_RANGE边界
  • ➡带有联合表的窗口
  • ➡ 处理微秒级的冲突
select trip_duration, passenger_count,

第二个优化点是本地LastJoin的实现。

这种扩展的Join类型可以保证表组装后的结果与拼接前的结果相同。在Spark源代码层面的原生实现可以比基于Spark 3.0的实现快一百倍以上,而且可以节省更多的内存。

SELECT t1.name FROM t1 LAST JOIN t2 WHERE t1.id == t1.id

LastJoin的性能。图片由作者提供

第三个优化点是对多窗口并行计算的优化。

将Spark默认的串行执行优化为并行计算,充分利用集群计算资源,SparkSQL整体任务时间也可以大大缩短。

SELECT

图片由作者提供

第四点优化是时间窗口的数据倾斜计算

与表格偏斜优化类似,窗口对偏斜数据进行了两次分割,大大提升了任务的计算并行度,充分利用了集群资源,降低了整体TCO(总体拥有成本)。

选择前,并行性:2.作者的图片

选择后,并行性:4.作者的图片

SparkFE(现在合并为OpenMLDB)有很多优化,不能重复。因为它与SparkSQL API兼容,所以应用场景与Spark相似,尤其是在AI相关的时间序列特征计算、数据表拼接方面。

  • 时间序列特征提取
  • 多窗口的并发性
  • 自定义表连接
  • 自定义特征提取功能
  • 斜度优化
  • 原生聚合函数

下面是OpenMLDB的架构,欢迎大家加入我们的社区。

图片由作者提供


与Native Spark 3.0相比,我们在人工智能方面取得了明显的优化效果》最初发表于Towards Data Scienceon Medium,人们通过强调和回应这个故事来继续对话。