[HeteroSys/GPU]ShadowVM: Acceler
论文题目:ShadowVM: Accelerating Data Plane for Data Analytics with Bare Metal CPUs and GPUs
文章时间:
会议/期刊:PPoPP 2021-02-17
作者背景:华东师范大学
笔记时间:2021年09月15日周三
论文地址:ppopp
Abstract
因JVM运行时的限制,大数据系统(Spark,Hadoop,flink等)不适合计算密集形任务。GPU在深度学习图形渲染等方面显示出卓越的计算能力,然而现有的架构很难在大数据系统中利用GPU。
因此,本文改变了基础架构。通过解耦大数据系统的数据平面和控制平面,控制面保留spark等系统的逻辑信息,数据面利用CPU和GPU的混合架构来处理实际数据。我们实现了一个名为ShadowVM的控制平面,在基于JVM的Spark环境达到了14.7x的加速。而且,本文的方法同过CPU和GPU的协同工作达到了比纯GPU更佳的性能。
Intro
早期大数据系统的瓶颈在网络和磁盘的IO上,因此工程师们使用Java/Scala等硬件无关的高级语言。
如今,网络硬件(Infiniband)和存储硬件(NVMe SSD)的发展使得计算重新成为瓶颈。因此,JVM很难充分利用硬件的能力。而如今新的计算硬件(GPU)在很多方面有着非常优秀的提升效果,所以为什么不利用新的计算硬件来加速瓶颈?
我们分析Spark+GPU这种组合。首先,JVM很难表达GPU所需要的并行度;其次,GPU无法利用到Spark中objects,在数据传到GPU之前,需要Spark系统讲JVM的中间结果转换成GPU理解的形式。而且,JVM是独立于硬件的系统,这对硬件系统感知的优化很不友好。
新版本的spark提供了加速感知的调度,有的工作为此重写了runtime来利用GPU的算力。然而这个方法具有针对性,对于每种数据平台,每种加速硬件都要做特别的适配,工作量非常大。
本文则提出了一种绕开JVM局限的架构。
架构
提了三个技术
1,action shadowing
2,vkernel execution
3,passive prefetch
具体的方案不是很能看得懂
Related Work
-
Spark+GPU
Flare将所有的spark任务转换成轻量级的OpenMP任务
HeteroSpark利用远程调用RPC来处理GPU上的数据
Spark-GPU和SWAT利用JNI技术利用本地GPU处理数据
GStorm和GFlink在流式系统中使用GPU加速,数据通过JNI传输
GPUEnable研究如何减少大数据系统在GPU使用过程中的数据冗余传输问题
也有用FPGA来加速的
总的来说,这些工作都是紧耦合数据平面的,而且不具有普适性
本文的工作将数据平面解耦,绕开JVM提供了各种硬件加速的框架作为控制平面 -
加速JVM
TornadoVM将JVM中的字节码编译成OpenCL的kernel,使得JVM的结果可以在多种设备上运行
还有一些不支持动态重新编译的工作
本文的工作更接近系统级的虚拟化 -
GPU数据库系统
有的工作研究如何将SQL语言转化成CPU或者GPU代码,OmniSci是一个GPU数据库;
RAPIDS是一个GPU分析平台
GPU数据库系统和利用GPU的大数据系统的区别是,前者单纯是为了绝对的算力,后者还是为了可扩展性,价格等因素。所以本文的工作考虑使用混合节点以及passive prefetch
4.GPU调度问题
混合CPU,GPU的GPU调度工作也有一些,但是都比较早了,14,16,18年
最近Spark和其他GPU感知的调度器主要有话ML/DL系统而不是大数据分析系统。
主流的大数据系统依旧是以CPU为核心的,调度工作也聚焦于CPU(16,08)
大数据分析系统本质上是利用大量便宜的设备完成工作,所以不计较时间问题,如果是单纯为了完成工作,那么大家追求的是HPC,不计代价的快速完成计算密集的任务,算力也不是瓶颈。
本文引入GPU来加速大数据系统,那么如何平衡GPU成本才是工业界的实际问题。