0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spark基于DPU的Native引擎算子卸载方案

中科驭数 来源:中科驭数 作者:中科驭数 2024-06-28 17:12 次阅读

1.背景介绍

Apache Spark(以下简称Spark)是一个开源的分布式计算框架,由UC Berkeley AMP Lab开发,可用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。Spark使用内存加载保存数据并进行迭代计算,减少磁盘溢写,同时支持 Java、Scala、Python和 R等多种高级编程语言,这使得Spark可以应对各种复杂的大数据应用场景,例如金融、电商、社交媒体等。

Spark 经过多年发展,作为基础的计算框架,不管是在稳定性还是可扩展性方面,以及生态建设都得到了业界广泛认可。尽管Apache社区对Spark逐步引入了诸如钨丝计划、向量化 Parquet Reader等一系列优化,整体的计算性能也有两倍左右的提升,但在 3.0版本以后,整体计算性能的提升有所减缓,并且随着存储、网络以及IO技术的提升,CPU也逐渐成为Spark计算性能的瓶颈。如何在Spark现有框架上,增强大数据计算能力,提高CPU利用率,成为近年来业界的研究方向。

2.开源优化方案

Spark本身使用scala语言编写,整体架构基于 JVM开发,只能利用到一些比较基础的 CPU指令集。虽然有JIT的加持,但相比目前市面上的Native向量化计算引擎而言,性能还是有较大差距。因此考虑如何将具有高性能计算能力的Native向量引擎引用到 Spark里来,提升 Spark的计算性能,突破 CPU瓶颈,成为一种可行性较高的解决方案。

随着Meta在2022年超大型数据库国际会议(VLDB)上发表论文《Velox:Meta's Unified Execution Engine》,并且Intel创建的Gluten项目基于Apache Arrow数据格式和Substrait查询计划的JNI API将Spark JVM和执行引擎解耦,从而将Velox集成到Spark中,这使得使用Spark框架+Native向量引擎的大数据加速方案成为现实。

3.DPU计算卡与软件开发平台

AI大模型的发展,金融、电商等领域数据处理需求的增加,生活应用虚拟化程度的加深,都对现代化数据中心提出严峻的考验。未来数据中心的发展趋势,逐步演变成CPU + DPU + GPU三足鼎立的情况,CPU用于通用计算,GPU用于加速计算,DPU则进行数据处理。将大数据计算卸载到具有高度定制化和数据处理优化架构的大规模数据计算DPU卡上,可以有效提高计算密集型应用场景下数据中心的性能和效率,降低其成本和能耗。

中科驭数CONFLUX®-2200D大数据计算DPU卡主要应用于大数据计算场景。CONFLUX®-2200D通过计算DPU卸载加速,存储DPU卸载加速和网络DPU卸载加速实现大数据计算性能3-6倍提升。CONFLUX®-2200D是基于中科驭数自主知识产权的KPU(Kernel Processing Unit)架构、DOE(Data Offloading Engine)硬件数据库运算卸载引擎和LightningDMA中科驭数自主知识产权的基于DMA的直接内存写入技术提出的领域专用DPU卡。能够满足无侵入适配、自主可控、安全可靠,支持存算一体、存算分离等不同场景。

中科驭数HADOS是中科驭数推出的专用计算敏捷异构软件开发平台。HADOS®数据查询加速库通过提供基于列式数据的查询接口,供数据查询应用,目前Spark、PostgreSQL已通过插件的形式适配。支持Java、Scala、C和C++语言的函数调用,主要包括列数据管理、数据查询运行时函数、任务调度引擎、函数运算代价评估、内存管理、存储管理、硬件管理、DMA引擎、日志引擎等模块,目前对外提供数据管理、查询函数、硬件管理、文件存储相关功能API。

4.Spark框架+Gluten-Velox向量化执行引擎+DPU加速卡

4.1方案简介

随着SSD和万兆网卡普及以及I/O技术的提升,Spark用户的数据负载计算能力逐渐受到CPU性能瓶颈的约束。由于Spark本身基于JVM的Task计算模型的CPU指令优化,要远远逊色于其他的Native语言(C++等),再加上开源社区的Native引擎已经发展得比较成熟,具备优秀的量化执行能力,这就使得那些现有的Spark用户,如果想要获得这些高性能计算能力就需要付出大量的迁移和运维成本。

Gluten解决了这一关键性问题,让Spark用户无需迁移,就能享受这些成熟的Native引擎带来的性能优势。Gluten最核心的能力就是通过Spark Plugin的机制,把Spark查询计划拦截并下发给Native引擎来执行,跳过原生Spark不高效的执行路径。整体的执行框架仍沿用Spark既有实现,并且对于Native引擎无法承接的算子,Gluten安排Fallback回正常的Spark执行路径进行计算,从而保证Spark任务执行的稳定性。同时Gluten还实现了Fallback、本地内存管理等功能,使得Spark可以更好利用Native引擎带来的高性能计算能力。

Velox是一个集合了现有各种计算引擎优化的新颖的C++数据加速库,其重新设计了数据模型以支持复杂数据类型的高效计算,并且提供可重用、可扩展、高性能且与上层软件无关的数据处理组件,用于构建执行引擎和增强数据管理系统。

由于Velox只接收完全优化的查询计划作为输入,不提供 SQL解析器、dataframe层、其他 DSL或全局查询优化器,专注于成为大数据计算的执行引擎。这就使得Gluten+Velox架构可以各司其职,从而实现数据库组件模块化。

wKgZomZ-fKiAAsUcAAFEwmESLqQ755.png

要将Gluten+Velox优化过的Spark计算任务卸载到DPU卡,还缺少一个异构中间层,为此中科驭数研发了HADOS异构执行库,该库提供列数据管理、数据查询运行时函数、任务调度引擎、函数运算代价评估、内存管理等多种DPU能力的API接口,并且支持Java,C++等多种大数据框架语言的调用,拥有极强的拓展性,以及与现有生态的适配性。HADOS敏捷异构软件平台可以适应复杂的大数据软件生态,在付出较小成本的情况下为多种计算场景提供DPU算力加速。Spark框架集成Gluten+Velox向量化执行引擎,然后使用HADOS平台,就可以将经过向量化优化的计算任务,利用DPU执行,从而彻底释放CPU,实现DPU高性能计算。

4.2 DPU算力卸载

velox是由C++实现的向量化计算引擎,其核心执行框架涵盖了任务(Task)、驱动(Driver)和操作器(Operator)等组件。velox将Plan转换为由PlanNode组成的一棵树,然后将PlanNode转换为Operator。Operator作为基础的算子,是实际算法执行的逻辑框架,也是实现DPU计算卸载的关键。

4.2.1逻辑框架

Operator作为实际算法的逻辑框架,承载着各种表达式的抽象,每一个Operator中包含一个或多个表达式来实现一个复杂完整的计算逻辑块,表达式的底层是由function来具体实现。Velox向开发人员提供了API可以实现自定义scalar function,通过实现一个异构计算版本的function,然后将这个function注册到Velox的函数系统中,就可以将计算任务卸载到DPU卡上。任务执行过程如下图:

wKgZomZ-fJSAcULaAACu8X5ZUvM185.png

中科驭数的CONFLUX®-2200DS大数据计算加速DPU卡可以实现列式计算,并且HADOS平台支持C++语言,所以可以直接解析Velox的向量化参数。对于列式存储的数据,经过对数据类型的简单处理之后,可以直接交给DPU执行计算任务,免去了数据行列转换的性能损失,同时也降低了DPU计算资源集成的运维难度,大大提高了Velox异构开发的效率。

4.2.2算子卸载

以我们实现卸载的Filter算子为例,对于cast(A as bigint)>1这一具体的表达式,来探究如何实现”>”这一二元运算符的卸载。

Filter算子的Operator中会使用有一个 std::unique_ptr exprs_的变量,用来执行过滤和投影的计算。ExprSet是Filter算子计算的核心,其本质是一颗表达式树。cast(A as bigint)>1的表达式树以及表达式树的静态节点类型如下:

wKgaomZ-fIeABX1EAABKIi2tCto087.png

节点类型 作用
FieldAccessTypedExpr 表示RowVector中的某一列,作为表达式的叶子节点
ConstantTypedExpr 表示常量值,作为表达式的叶子节点
CallTypedExpr 表示函数调用表达式,子节点表示输入参数
表示特殊类型表达式,包括
if/and/or/switch/cast/try/coalesce等
CastTypedExpr 类型转换
LambdaTypedExpr Lambda表达式,作为叶子节点

在表达式的所有子节点执行完后,会执行applyFunction,说明当前表达式节点是一个函数调用,然后调用vectorFunction_的apply来对结果进行处理,输入是inputValues_数组,该数组长度与函数的表达式叶子节点数相等(文中示例表达式的叶子节点为2),作为函数的参数,result为输出,结果为VectorPtr,程序流程图如下:

wKgaomZ-fH-AHggnAABj-GQ8lJE207.png

4.2.3 Fallback

现阶段我们只实现了Filter算子的部分表达式,后续还会继续支持更多的算子和表达式。对于一些无法执行的算子和表达式,还是需要退回给Velox,交由CPU执行,从而保证SQL的正常执行。由于处理的是列式数据,所以回退的执行计划可以不需要任何处理,就可以直接从HADOS退还给Velox,几乎无性能损失。

4.2.4 DPU资源管理

HADOS平台会对服务器的DPU资源进行统一管理。对于卸载的计算任务根据现有的DPU资源进行动态分配,从而实现计算资源的高效利用。同时HADOS平台还会对计算任务中所需的内存进行合理的分配,动态申请和释放系统内存,从而减少额外的内存开销。

4.3加速效果

单机单线程local模式,使用1G数据集,仅卸载Filter算子的部分表达式的场景下,TPC-DS语句中有5条SQL语句,可以将使用开源方案的加速效果提升15-20%左右。q70语句,在开源方案提升100%的基础上,提升了15%;q89语句,在开源方案提升50%的基础上,提升了27%;q06在开源方案提升170%的基础上,提升了13%。

wKgaomZ-fHmAe35qAAC7txK8IwA017.png

单一运算符场景下(SELECT a FROM t WHERE a = 100),使用DPU运算符相比 Spark原生的运算符的加速比最高达到12.7。

wKgZomZ-fHWAK8o8AACJ7iopfBE806.png

5.不足和展望

中科驭数HADOS敏捷异构软件平台可以十分轻松地与现有开源大数据加速框架相结合,并且为开源框架提供丰富的算力卸载功能。HADOS平台在完美发挥开源加速框架优势的前提下,为大数据任务提供硬件加速能力。由于现在我们只实现了较小部分算子卸载的验证,在执行具有复杂算子操作的SQL时无法发挥出DPU的全部实力,并且因为开源方案在设计之处并没有考虑到使用DPU硬件,所以在磁盘IO,算子优化等方面的性能还有待优化。后续我们也会从一下几个方面来进一步做特定优化:

开发更多较复杂的算子,例如重量级的聚合算子会消耗CPU大量的计算能力从而影响Spark作业,通过将聚合算子卸载到DPU硬件来解放CPU能力,从而使得加速效果更加明显;

优化DPU的磁盘读写,让DPU可以直接读取硬盘数据,省去数据在服务器内部的传输时间,可以减少数据准备阶段的性能损耗;

RDMA技术,可以直读取远端内存数据,数据传输内容直接卸载到网卡,减少数据在系统内核中额外的数据复制与移动,可以减少大数据任务计算过程中的性能损耗。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10854

    浏览量

    211567
  • DPU
    DPU
    +关注

    关注

    0

    文章

    357

    浏览量

    24169
  • SPARK
    +关注

    关注

    1

    文章

    105

    浏览量

    19890
收藏 人收藏

    评论

    相关推荐

    基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图

    以下是基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件设计方案: 一、总体架构 图像采集:使用合适的图像传感器,如 CMOS 传感器,通过相应的接口(如 SPI、I2C 等
    发表于 09-25 15:25

    服务网格DPU卸载解决方案

    服务网格(Service Mesh)是微服务架构中的一种重要技术,它主要处理服务之间的通信,为服务间的信息交换提供更安全、更快速且更可靠的基础设施层。服务网格将服务治理从业务逻辑中剥离出来,拆解为独立的进程,实现异构系统的统一治理和增强网络安全。
    的头像 发表于 09-20 16:25 298次阅读
    服务网格<b class='flag-5'>DPU</b><b class='flag-5'>卸载</b>解决<b class='flag-5'>方案</b>

    spark为什么比mapreduce快?

    spark为什么比mapreduce快? 首先澄清几个误区: 1:两者都是基于内存计算的,任何计算框架都肯定是基于内存的,所以网上说的spark是基于内存计算所以快,显然是错误的 2;DAG计算模型
    的头像 发表于 09-06 09:45 253次阅读

    IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书

    、VMware、Palo Alto 等公司纷纷推出相关解决方案。这些方案背后共同的本质思想是:将云计算的 IaaS 层组件从服务器侧卸载后围绕 DPU 构筑高性能算力底座,与 AWS、
    发表于 07-24 15:32

    spark运行的基本流程

    前言: 由于最近对spark的运行流程非常感兴趣,所以阅读了《Spark大数据处理:技术、应用与性能优化》一书。通过这本书的学习,了解了spark的核心技术、实际应用场景以及性能优化的方法。本文旨在
    的头像 发表于 07-02 10:31 400次阅读
    <b class='flag-5'>spark</b>运行的基本流程

    Spark+Hive”在DPU环境下的性能测评 | OLAP数据库引擎选型白皮书(24版)DPU部分节选

    在奇点云2024年版《OLAP数据库引擎选型白皮书》中,中科驭数联合奇点云针对Spark+Hive这类大数据计算场景下的主力引擎,测评DPU环境下对比CPU环境下的性能提升效果。特此节
    的头像 发表于 05-30 16:09 513次阅读
    “<b class='flag-5'>Spark</b>+Hive”在<b class='flag-5'>DPU</b>环境下的性能测评 | OLAP数据库<b class='flag-5'>引擎</b>选型白皮书(24版)<b class='flag-5'>DPU</b>部分节选

    鸿蒙OS开发实例:【Native C++】

    使用DevEco Studio创建一个Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用C标准库hypot接口计算两个给定数平方和的平方根。在输入框中输入两个数字,点击计算结果按钮显示计算后的数值。
    的头像 发表于 04-14 11:43 2588次阅读
    鸿蒙OS开发实例:【<b class='flag-5'>Native</b> C++】

    明天线上见!DPU构建高性能云算力底座——DPU技术开放日最新议程公布!

    技术在不同行业中的应用解决方案有哪些?能带来怎样的业务效果? 3月29日本周五,中科驭数集结产品大咖及解决方案专家团,诚邀您参加以“DPU构建高性能云算力底座”为主题的线上DPU技术开
    的头像 发表于 04-03 18:12 998次阅读

    如何利用DPU加速Spark大数据处理? | 总结篇

    SSD速度通过NVMe接口得到了大幅提升,并且网络传输速率也进入了新的高度,但CPU主频发展并未保持同等步调,3GHz左右的核心频率已成为常态。 在当前背景下Apache Spark等大数据处理工具中,尽管存储和网络性能的提升极大地减少了数据读取和传输的时间消耗,但
    的头像 发表于 04-02 13:45 1042次阅读
    如何利用<b class='flag-5'>DPU</b>加速<b class='flag-5'>Spark</b>大数据处理? | 总结篇

    中科驭数DPU技术开放日秀“肌肉”:云原生网络、RDMA、安全加速、低延时网络等方案组团亮相

    DPU技术开放日既是对DPU技术应用的典型方案展示,也是DPU技术在重要细分场景走向成熟的标志。
    的头像 发表于 04-01 11:48 776次阅读
    中科驭数<b class='flag-5'>DPU</b>技术开放日秀“肌肉”:云原生网络、RDMA、安全加速、低延时网络等<b class='flag-5'>方案</b>组团亮相

    Spark基于DPU Snappy压缩算法的异构加速方案

    一、总体介绍 1.1 背景介绍 Apache Spark是专为大规模数据计算而设计的快速通用的计算引擎,是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使
    的头像 发表于 03-26 17:06 786次阅读
    <b class='flag-5'>Spark</b>基于<b class='flag-5'>DPU</b> Snappy压缩算法的异构加速<b class='flag-5'>方案</b>

    RDMA技术在Apache Spark中的应用

    背景介绍 在当今数据驱动的时代,Apache Spark已经成为了处理大规模数据集的首选框架。作为一个开源的分布式计算系统,Spark因其高效的大数据处理能力而在各行各业中广受欢迎。无论是金融服务
    的头像 发表于 03-25 18:13 1528次阅读
    RDMA技术在Apache <b class='flag-5'>Spark</b>中的应用

    基于DPU和HADOS-RACE加速Spark 3.x

    背景简介 Apache Spark(下文简称Spark)是一种开源集群计算引擎,支持批/流计算、SQL分析、机器学习、图计算等计算范式,以其强大的容错能力、可扩展性、函数式API、多语言支持(SQL
    的头像 发表于 03-25 18:12 1344次阅读
    基于<b class='flag-5'>DPU</b>和HADOS-RACE加速<b class='flag-5'>Spark</b> 3.x

    兴汉携手芯启源发布一款为网络防火墙量身定制的DPU安全卸载模块

    北京兴汉网际股份有限公司(NEXSEC)与芯启源电子科技有限公司(Corigine)携手,经过一整年的潜心研发与努力,正式发布了LAG 4A20—— 一款为网络防火墙量身定制的DPU安全卸载模块。
    的头像 发表于 03-01 15:24 883次阅读
    兴汉携手芯启源发布一款为网络防火墙量身定制的<b class='flag-5'>DPU</b>安全<b class='flag-5'>卸载</b>模块

    《数据处理器:DPU编程入门》DPU计算入门书籍测评

    实践 最后一部分是数据加速应用的落地: 基于各个平台的算力解决方案 推荐的存储解决方案 边缘计算方案 网络平台与融合加速技术 本书不能帮你完全入门DOCA和相关的DPU开发技术,但是能
    发表于 12-24 10:54