周情濤, 何 軍, 胡昭華
(南京信息工程大學(xué) 電子與信息工程學(xué)院, 南京 210044)
·計(jì)算機(jī)技術(shù)應(yīng)用·
基于GPU的Spark大數(shù)據(jù)技術(shù)在實(shí)驗(yàn)室的開發(fā)應(yīng)用
周情濤, 何 軍, 胡昭華
(南京信息工程大學(xué) 電子與信息工程學(xué)院, 南京 210044)
在大數(shù)據(jù)時(shí)代,兼顧大數(shù)據(jù)處理與高性能計(jì)算是目前對計(jì)算機(jī)系統(tǒng)的迫切需求。針對Spark大數(shù)據(jù)處理與基于GPU的高性能計(jì)算,分析了基于GPU的Spark技術(shù)。它主要通過構(gòu)建CPU和GPU的異構(gòu)并行,使計(jì)算機(jī)獲得強(qiáng)大的計(jì)算能力,并在實(shí)驗(yàn)室環(huán)境下探討了Spark-GPU技術(shù)的實(shí)現(xiàn),闡述了算法實(shí)現(xiàn)的技術(shù)流程。在此基礎(chǔ)上,通過仿真實(shí)驗(yàn)評(píng)估了Spark和Spark-GPU技術(shù)的性能。實(shí)驗(yàn)表明,Spark-GPU技術(shù)可以達(dá)到上百倍的加速比,這對圖像處理以及信息檢索等領(lǐng)域的發(fā)展都具有重要推動(dòng)作用。
大數(shù)據(jù)處理; 異構(gòu)計(jì)算; 圖形處理器
近年來,移動(dòng)設(shè)備、無線傳感器等設(shè)備每時(shí)每刻都在產(chǎn)生數(shù)據(jù),要處理的數(shù)據(jù)量非常大,而業(yè)務(wù)需求對數(shù)據(jù)處理的實(shí)時(shí)性、有效性又提出了更高要求,傳統(tǒng)的常規(guī)技術(shù)根本無法應(yīng)付。大數(shù)據(jù)技術(shù)就是這個(gè)高科技時(shí)代的產(chǎn)物。大型數(shù)據(jù)分析經(jīng)常需要將任務(wù)分發(fā)給若干臺(tái)機(jī)器同步執(zhí)行,所以它往往與分布式計(jì)算互相聯(lián)系[1]。
目前分布式計(jì)算框架主要有Hadoop和Spark,新生的Spark是一個(gè)基于內(nèi)存計(jì)算的開源集群計(jì)算系統(tǒng),更適合于迭代的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘算法,據(jù)述,Spark在內(nèi)存中的計(jì)算速度可比Hadoop提升100倍[2]。然而當(dāng)數(shù)據(jù)規(guī)模極其龐大時(shí),數(shù)據(jù)處理速度會(huì)隨之變慢,與此同時(shí)分子動(dòng)力學(xué)、數(shù)學(xué)建模、圖像處理等數(shù)據(jù)密集型應(yīng)用對計(jì)算效率提出了更高的要求,顯然Spark不能滿足當(dāng)前的實(shí)時(shí)性需求。 隨著GPU的發(fā)展和CUDA的成熟,GPU并行計(jì)算已成為極其熱門的領(lǐng)域。Spark和CUDA擁有天然的并行處理能力,如何在Spark平臺(tái)整合CPU和GPU計(jì)算資源也很快成為熱門話題。因此很多中外學(xué)者都在研究Spark-GPU技術(shù),以充分利用GPU計(jì)算資源,提高計(jì)算效率[3]。
1.1 Spark技術(shù)
Apache Spark是當(dāng)今熱門的大數(shù)據(jù)處理框架,它兼容任何Hadoop的文件存儲(chǔ)系統(tǒng),可以使用Standalone、Hadoop YARN或Apache Mesos進(jìn)行資源管理與作業(yè)調(diào)度,支持Scala,Java、Python和R 4種程序設(shè)計(jì)語言的編程接口。彈性分布數(shù)據(jù)集(RDD)是Spark的最核心概念,它表示已被分區(qū)、不可變的并能夠被并行操作的數(shù)據(jù)集合,而且要求可序列化[4]。Spark可以將特定的RDD緩存到內(nèi)存中,這樣下一個(gè)操作可以直接讀取內(nèi)存中的數(shù)據(jù),節(jié)省了大量磁盤I/O操作[5]。RDD還具有容錯(cuò)特性,用變換(Lineage)記錄粗顆粒度的特定數(shù)據(jù)的轉(zhuǎn)換(Transformation)和動(dòng)作(Action)行為,當(dāng)部分?jǐn)?shù)據(jù)分區(qū)丟失時(shí),通過Lineage獲取足夠的信息來重新運(yùn)算和恢復(fù)丟失的數(shù)據(jù)分區(qū)。這種粗顆粒度的數(shù)據(jù)模型相比細(xì)顆粒度的數(shù)據(jù)模型帶來了性能的提升[6]。
1.2 CUDA架構(gòu)
基于CPU與GPU混合并行計(jì)算系統(tǒng)已經(jīng)逐漸成為國內(nèi)外高性能計(jì)算領(lǐng)域的熱點(diǎn)研究方向,CUDA 是NVIDIA發(fā)明的基于NVIDIA GPU并行計(jì)算的架構(gòu),利用GPU的處理能力,可大幅提升計(jì)算性能[7-8]。它支持C、C++,以及 Fortran、Java、Python等多種語言開發(fā)。圖1為CUDA編程模式下處理數(shù)據(jù)的流程圖。
圖1 CUDA架構(gòu)工作流程
CUDA將CPU作為主機(jī)(Host),負(fù)責(zé)邏輯性較強(qiáng)的計(jì)算任務(wù),將GPU作為設(shè)備(Device),負(fù)責(zé)高度線程化的并行處理任務(wù)。程序是由設(shè)備端的內(nèi)核函數(shù)(Kernel)并行步驟和主機(jī)端的串行處理步驟組成,內(nèi)核函數(shù)以網(wǎng)格(Grid)形式執(zhí)行,網(wǎng)格由若干線程塊(Block)組成,線程塊由若干線程(Thread)組成。NVCC編譯器可將程序分成在 GPU 上執(zhí)行的部分及在CPU 上執(zhí)行的部分,并對適當(dāng)?shù)某绦蜻M(jìn)行編譯動(dòng)作。
1.3 Spark-GPU技術(shù)現(xiàn)狀
近年來,隨著Spark技術(shù)的迅速普及,很多學(xué)者都在努力整合Spark云平臺(tái)上的CPU和GPU資源,并取得了許多突出的成果,cuSpark、 SparkCL是兩個(gè)代表性的Spark-GPU項(xiàng)目,都實(shí)現(xiàn)了將GPU嵌入到Spark,在一定程度上實(shí)現(xiàn)了CPU和GPU的混合并行計(jì)算[9-10]。
cuSpark是一項(xiàng)CUDA和Spark相結(jié)合的技術(shù)。它抽象出管線(Pipeline),類似于Spark中的RDD,數(shù)據(jù)可分片,并可以存儲(chǔ)在主機(jī)內(nèi)存或顯卡內(nèi)存中。管線同樣有轉(zhuǎn)換和動(dòng)作兩種操作,轉(zhuǎn)換包含Map(func),Map(func)等函數(shù),動(dòng)作包含Reduce(func),ReduceByKey(func),Materialize(dest)等函數(shù)。轉(zhuǎn)換屬于延長操作(lazy manner),在調(diào)用動(dòng)作之前,只記錄操作行為,不做任何計(jì)算。遇到動(dòng)作操作時(shí),則先計(jì)算轉(zhuǎn)換部分,再計(jì)算動(dòng)作部分。cuSpark項(xiàng)目主要驗(yàn)證了兩種實(shí)驗(yàn),一種數(shù)據(jù)量較小,可以完全放在顯存中;一種數(shù)據(jù)量較大,顯存相對較小,但可以被主存容納,實(shí)驗(yàn)表明前者比后者執(zhí)行速度快百倍以上。
與cuSpark不同,SparkCL則是將JavaCL與Spark結(jié)合[11]。JavaCL就是Java版本的OpenCL庫。它使用了OpenCL,而沒有使用CUDA,意味著可以在非NVIDIA顯卡上運(yùn)行代碼。Aparapi由AMD Java實(shí)驗(yàn)室開發(fā),2011年開放源代碼,利用它可以編譯Java代碼到OpenCL,在GPU上運(yùn)行。在這個(gè)項(xiàng)目中,如果試圖設(shè)置內(nèi)核運(yùn)行在GPU,而GPU無法使用,則會(huì)切換運(yùn)行在CPU上??梢酝ㄟ^運(yùn)行示例程序,測試加速的效果,結(jié)果表明,用GPU獲得了10~100倍左右的加速比。
以上現(xiàn)狀分析表明,現(xiàn)階段的Spark-GPU技術(shù)主要是將現(xiàn)有的GPU加速技術(shù)引入到Spark平臺(tái),本文則是將PyCUDA技術(shù)融進(jìn)Spark,通過導(dǎo)入PyCUDA必要函數(shù)庫的方式,在Spark平臺(tái)調(diào)用GPU資源,因此二者融合配置較為有效、簡便。
Spark-GPU技術(shù)可借助于GPU的并行能力提高運(yùn)算性能,而這需要構(gòu)建有效的CPU和GPU異構(gòu)并行系統(tǒng),保證分布式并行算法在系統(tǒng)上的穩(wěn)定運(yùn)行。下面詳細(xì)分析Spark融合GPU的技術(shù),并力圖使系統(tǒng)達(dá)到最高計(jì)算效率,在此基礎(chǔ)上著重探討Kmeans聚類算法在Spark-GPU技術(shù)上的實(shí)現(xiàn)。
2.1 Spark云平臺(tái)上混合GPU和CPU的技術(shù)流程
Spark由主節(jié)點(diǎn)(Master)和從節(jié)點(diǎn)或稱工作機(jī)(Workers)組成。Spark程序稱為驅(qū)動(dòng)程序,驅(qū)動(dòng)程序定義了對每個(gè)RDD的轉(zhuǎn)換和動(dòng)作。 將待處理數(shù)據(jù)上傳到分布式存儲(chǔ)系統(tǒng)HDFS,把應(yīng)用程序提交到集群,通過CPU調(diào)控,將數(shù)據(jù)分片并發(fā)送到從節(jié)點(diǎn)。從節(jié)點(diǎn)收到對RDD的操作后,根據(jù)數(shù)據(jù)分片信息進(jìn)行本地化數(shù)據(jù)操作。Spark提交應(yīng)用程序的過程如圖2所示。
圖2 Spark提交應(yīng)用程序過程
Spark應(yīng)用可分成任務(wù)調(diào)度和任務(wù)執(zhí)行兩部分,其中SparkContext為程序運(yùn)行的總?cè)肟?,由?yīng)用程序啟動(dòng),可通過資源調(diào)度模塊與執(zhí)行器(Executor)通信。DAGScheduler作業(yè)調(diào)度模塊可以把作業(yè)劃分成若干階段(stage),然后把階段轉(zhuǎn)化為相應(yīng)的任務(wù)集(TaskSets),并交給TaskScheduler任務(wù)調(diào)度模塊,任務(wù)調(diào)度模塊主要負(fù)責(zé)具體啟動(dòng)任務(wù)以及監(jiān)控和匯報(bào)任務(wù)運(yùn)行情況。將任務(wù)(task)提交給執(zhí)行器運(yùn)行完之后,可以將結(jié)果返回給主程序或?qū)懭胪獠肯到y(tǒng)。
這里的每臺(tái)工作機(jī)分別實(shí)現(xiàn)了CPU和GPU的異構(gòu)并行計(jì)算[12],CPU控制程序的串行邏輯部分,GPU控制并行計(jì)算部分,計(jì)算過程中可能需要顯存與內(nèi)存頻繁的數(shù)據(jù)交換,將計(jì)算結(jié)果先保存到顯存,再由顯存送回內(nèi)存,再開始接下來的串行操作,或者等待下一次內(nèi)核函數(shù)的調(diào)用[13]。GPU融入Spark技術(shù)流程圖如圖3所示。
圖3 GPU融入Spark技術(shù)流程
具體執(zhí)行某項(xiàng)任務(wù)時(shí),可以將一個(gè)階段分成Map和Reduce兩個(gè)操作步驟,每啟動(dòng)一次MapReduce,則為一次迭代,直到完成迭代的步數(shù)或者滿足設(shè)定的閾值則終止迭代操作,以下為一個(gè)MapReduce階段的詳細(xì)描述:
(1) Map操作。根據(jù)計(jì)算資源可利用情況向工作機(jī)分配任務(wù),工作機(jī)接收到程序指令和任務(wù)分配信息,由CPU控制內(nèi)存讀取分配到的待處理數(shù)據(jù),并開始執(zhí)行程序串行部分。當(dāng)程序執(zhí)行到內(nèi)核函數(shù),CPU將操作指令傳送給GPU,數(shù)據(jù)從內(nèi)存轉(zhuǎn)移到顯存,并對每個(gè)數(shù)據(jù)分配給相應(yīng)的線程,并獲取線程索引,同時(shí)可計(jì)算數(shù)據(jù)索引,以線程為單位,對數(shù)據(jù)進(jìn)行函數(shù)操作。一般情況下,根據(jù)不同的作業(yè)情況會(huì)執(zhí)行特定的函數(shù)任務(wù),將計(jì)算后結(jié)果保存到顯存,然后轉(zhuǎn)移到內(nèi)存,等待CPU的調(diào)用。
(2) Reduce操作。將GPU設(shè)備上計(jì)算的結(jié)果以特定的形式轉(zhuǎn)化為RDD或者物化為文件,作為Reduce操作的輸入,工作機(jī)按照一定的規(guī)則對數(shù)據(jù)進(jìn)行運(yùn)算,大多數(shù)情況下,數(shù)據(jù)都是以(key,value)的形式存在,因此主要是按key值對value進(jìn)行操作,返回的結(jié)果聯(lián)和其他特定類型的數(shù)據(jù)可作為Map操作的輸入。有時(shí)候也根據(jù)Reduce結(jié)果的返回情況判斷收斂與否。
實(shí)際上,雖然每個(gè)節(jié)點(diǎn)實(shí)現(xiàn)了CPU和GPU的異構(gòu)并行,但由于集群異構(gòu)化較復(fù)雜,在最大化集群計(jì)算能力的過程中也會(huì)遇到諸多問題:① 開發(fā)程序并應(yīng)用到集群規(guī)模具有一定困難,尤其是應(yīng)用到集群的CPU和GPU異構(gòu)并行系統(tǒng)。② 通常情況下,CPU和芯片集數(shù)據(jù)傳輸速率在10~20 Gb/s之間,而GPU顯存和內(nèi)存間的數(shù)據(jù)交換速率在1~10 Gb/s之間,GPU提供了更快計(jì)算能力的同時(shí),內(nèi)存和顯存間的數(shù)據(jù)傳輸速度也帶來了性能瓶頸。③ 如何根據(jù)集群資源動(dòng)態(tài)分配任務(wù)的問題,由于集群中的機(jī)器配置不一定均衡,主要包括CPU核數(shù)、有無顯卡、顯卡型號(hào)以及內(nèi)顯存大小等差異,故仍需要設(shè)計(jì)出一種策略,使得在任務(wù)分配時(shí)達(dá)到負(fù)載均衡。
2.2 Kmeans在Spark-GPU技術(shù)上的實(shí)現(xiàn)
Kmeans算法是比較典型的無監(jiān)督聚類算法,廣泛應(yīng)用在數(shù)據(jù)挖掘、信息檢索、市場營銷等方面。其主要目標(biāo)是最小化所有向量到其類簇中心的距離平方和。在Spark-GPU上實(shí)現(xiàn)的Kmeans算法是由CPU和GPU協(xié)同工作,工作流程如圖4所示。
圖4 Spark-GPU的Kmeans實(shí)現(xiàn)
Spark從HDFS文件系統(tǒng)讀取待聚類的數(shù)據(jù)源,數(shù)據(jù)以塊(block)的形式分布在集群機(jī)器硬盤,被程序解析成指定的向量格式后,根據(jù)集群資源情況將數(shù)據(jù)自動(dòng)分片并分發(fā)給從節(jié)點(diǎn),然后在CPU上初始化聚類中心,當(dāng)程序執(zhí)行到內(nèi)核函數(shù),將數(shù)據(jù)交給GPU,GPU計(jì)算出每個(gè)數(shù)據(jù)對象的類索引信息,將運(yùn)算結(jié)果返回給CPU,再由CPU更新聚類中心,并判斷收斂條件以決定程序是否終止,最終可以得出聚類中心的詳細(xì)情況。具體地,可以將其分為Map和Reduce兩個(gè)操作步驟。
(1) Map操作。輸入為解析成數(shù)組形式的待聚類數(shù)據(jù)以及初始(或者上一次迭代)的類簇中心,形如(array),每一數(shù)組代表一個(gè)樣本,調(diào)用內(nèi)核函數(shù)時(shí)將所有數(shù)據(jù)由CPU內(nèi)存?zhèn)鬟f給GPU顯存,在GPU上計(jì)算樣本到類簇中心的距離,內(nèi)核函數(shù)輸入為數(shù)據(jù)和類簇中心,將數(shù)據(jù)歸屬到擁有最小距離的簇類別,輸出為(clusterID,array),使其轉(zhuǎn)換為形如(clusterID,(array,1))的RDD,并返回CPU。
(2) Reduce操作。輸入為形如(clusterID,(array,1))的數(shù)據(jù)列表,將數(shù)據(jù)中含有相同簇的(array,1)部分累加,得到一個(gè)形如(clusterID,(arraysum,arraynum))的RDD,通過元素arraysum與arraynum的求商計(jì)算可以得到新的類簇中心,輸出形式為(clusterID,clustercenter)。
一個(gè)MapReduce階段結(jié)束后,就可得到樣本以及它的類簇歸屬信息的描述文件,以及類簇中心的描述文件,其中clusterID為類簇編號(hào),clustercenter代表類簇中心。每啟動(dòng)一次MapReduce任務(wù)就執(zhí)行一次迭代操作,一直迭代到目標(biāo)函數(shù)收斂或者一個(gè)特定的步數(shù)。
在實(shí)驗(yàn)室的局域網(wǎng)中挑選閑置的3臺(tái)計(jì)算機(jī),均配置有支持CUDA的顯卡,并且裝有Ubuntu14.04 64位的操作系統(tǒng)。如果有更多的機(jī)器滿足要求,可以有選擇地?cái)U(kuò)展Hadoop和Spark集群。3臺(tái)機(jī)器配置情況如表1所示。
表1 實(shí)驗(yàn)器材配置
由于環(huán)境配置較繁瑣,故詳細(xì)配置流程在筆者博客上描述*.http://blog.csdn.net/zhouqingtaostudy/article/details/50916836。下面僅介紹其主要步驟。
選擇在Spark云平臺(tái)上使用PyCUDA技術(shù)開發(fā)GPU,這項(xiàng)基于Python開發(fā)語言的技術(shù)不但可以使用CUDA并行計(jì)算接口,而且由于許多庫函數(shù)的加入,使得編程比基于C的CUDA更加方便[14]。而使用PyCUDA也需要配置好CUDA開發(fā)環(huán)境。因此,首先需要驗(yàn)證集群中的PC機(jī)有相應(yīng)的支持CUDA的GPU、Linux系統(tǒng)版本以及gcc編譯器,另外,系統(tǒng)中的內(nèi)核頭文件和開發(fā)包也需要與系統(tǒng)內(nèi)核版本保持一致。本實(shí)驗(yàn)選擇最新的CUDA-7.5進(jìn)行配置。當(dāng)CUDA安裝成功,才可以安裝PyCUDA開發(fā)環(huán)境,選擇pycuda-2015.1.3版本。PyCUDA依賴于 Boost C++ 庫,numpy庫以及其他必要的庫,條件滿足后修改配置文件并編譯安裝。配置好GPU開發(fā)環(huán)境就可以使用GPU資源執(zhí)行并行計(jì)算。
安裝Spark有幾種不同的方式,可以在計(jì)算機(jī)上將Spark作為一個(gè)獨(dú)立的框架安裝,或者從供應(yīng)商處獲取一個(gè)Spark虛擬機(jī)鏡像直接使用,或者使用在云端環(huán)境安裝并配置好的Spark。本文選擇最新發(fā)布的Spark 1.6.0,把Spark作為一個(gè)獨(dú)立的框架安裝并啟動(dòng)[15]。為了讓Spark能夠在本機(jī)正常工作,需要安裝Java開發(fā)工具包。為了能使用HDFS分布式文件系統(tǒng),需要安裝Hadoop軟件。根據(jù)Hadoop版本,在Spark網(wǎng)站上下載特定版本的Spark安裝包,根據(jù)實(shí)際資源修改配置文件。待全部安裝成功,可通過自帶程序示例驗(yàn)證安裝[16]。
4.1 實(shí)驗(yàn)流程
實(shí)驗(yàn)中以Spark云平臺(tái)上的Kmeans算法實(shí)現(xiàn)作為對比,評(píng)估Spark-GPU技術(shù)的性能,Spark和PyCUDA都可以使用Python語言開發(fā),因此選擇Python編寫應(yīng)用程序[17]。為了增加實(shí)驗(yàn)結(jié)果的可信度,準(zhǔn)備了3組數(shù)據(jù)集,數(shù)據(jù)集的大小依次為41.9、209.7、419.4 Mb,分別在Spark和Spark-GPU上實(shí)現(xiàn)Kmeans聚類。首先在master節(jié)點(diǎn)啟動(dòng)Hadoop和Spark集群,然后將3個(gè)數(shù)據(jù)集上傳到HDFS分布式文件系統(tǒng),并修改程序中相關(guān)數(shù)據(jù)的路徑,使其對應(yīng)HDFS上的特定文件夾,將應(yīng)用程序以及相應(yīng)的聚類參數(shù)分別提交到集群中,如果環(huán)境配置和應(yīng)用程序都正確,那么集群將開始計(jì)算。
4.2 結(jié)果分析
集群計(jì)算結(jié)束后,收集聚類的時(shí)間信息,為了使獲得的時(shí)間數(shù)據(jù)更準(zhǔn)確、更可視化,獲取程序開始和結(jié)束時(shí)刻的時(shí)間戳,其差值作為實(shí)驗(yàn)運(yùn)行時(shí)間,并修改程序使聚類中心和聚類時(shí)間顯示在終端窗口,為增加實(shí)驗(yàn)結(jié)果的可信度,分別對3組數(shù)據(jù)集多次實(shí)驗(yàn)求平均值,時(shí)間統(tǒng)計(jì)結(jié)果如表2所示。
結(jié)果表明,Spark-GPU執(zhí)行Kmeans的速度遠(yuǎn)快于Spark,究其原因:Spark云平臺(tái)中的計(jì)算任務(wù)完全依靠CPU,而Spark-GPU項(xiàng)目中,集群中每個(gè)節(jié)點(diǎn)都實(shí)現(xiàn)了CPU與GPU的異構(gòu)并行。CPU負(fù)責(zé)更新聚類中心,判斷收斂條件,以及一些邏輯性任務(wù),而距離計(jì)算等具有高度并行化的任務(wù),則交給適合并行計(jì)算的GPU來完成。GPU含有成百上千的核心,雖然計(jì)算能力有限,但是在并行計(jì)算能力方面,比CPU更加強(qiáng)大,而Kmeans的距離計(jì)算部分任務(wù)比較簡單,而且可分片執(zhí)行,具有并行化處理的天然基礎(chǔ),若用CPU處理顯然會(huì)耗費(fèi)相當(dāng)長的時(shí)間,但是若用GPU來協(xié)助計(jì)算,則會(huì)大幅提升運(yùn)算速度。綜上因素使得Spark-GPU獲得了極高的效率。
本文提出了GPU嵌入Spark云平臺(tái)的構(gòu)想,并構(gòu)建了含有GPU開發(fā)環(huán)境的Spark云平臺(tái)計(jì)算框架,在搭建Spark云平臺(tái)的基礎(chǔ)上,努力通過CPU和GPU的異步運(yùn)算,最大化提升集群計(jì)算性能,通過無監(jiān)督的Kmeans聚類實(shí)驗(yàn),驗(yàn)證了本文構(gòu)建的基于GPU開發(fā)環(huán)境的Spark計(jì)算框架,有效的提高了聚類的效率,這對圖像檢索、數(shù)據(jù)挖掘等領(lǐng)域有著極其深刻的意義,本框架對其他數(shù)據(jù)密集型或者計(jì)算密集型的任務(wù),也明顯會(huì)有加速的效果,還有待進(jìn)一步的實(shí)現(xiàn)與驗(yàn)證。
在未來的工作中,仍需要了解并行計(jì)算的運(yùn)行機(jī)制,將更多適合并行計(jì)算的新算法加以改進(jìn),使得在本文的框架中加以實(shí)現(xiàn)和優(yōu)化,從而更加高效率的完成計(jì)算任務(wù)。
[1] 王 珊, 王會(huì)舉, 覃雄派, 等. 架構(gòu)大數(shù)據(jù): 挑戰(zhàn), 現(xiàn)狀與展望[J]. 計(jì)算機(jī)學(xué)報(bào), 2011, 34(10): 1741-1752.
[2] 唐振坤. 基于 Spark 的機(jī)器學(xué)習(xí)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[D]. 廈門:廈門大學(xué), 2014.
[3] Yang X, Wallom D, Waddington S,etal. Cloud computing in e-Science: research challenges and opportunities[J]. The Journal of Supercomputing, 2014, 70(1): 408-464.
[4] Zaharia M, Chowdhury M, Das T,etal. Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing[C]//Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation. USENIX Association, 2012: 2-2.
[5] Ma Z, Hong K, Gu L. VOLUME: Enable large-scale in-memory computation on commodity clusters[C]//Cloud Computing Technology and Science (CloudCom), 2013 IEEE 5th International Conference on. IEEE, 2013, 1: 56-63.
[6] Dean J, Ghemawat S. MapReduce: simplified data processing on large clusters[J]. Communications of the ACM, 2008, 51(1): 107-113.
[7] Spiechowicz J, Kostur M, Machura L. GPU accelerated Monte Carlo simulation of Brownian motors dynamics with CUDA[J]. Computer Physics Communications, 2014, 191(1):140-149.
[8] Zhang H, Garcia J. GPU Acceleration of a cloud resolving model using CUDA[J]. Procedia Computer Science, 2012, 9(11):1030-1038.
[9] 曾青華, 袁家斌. 基于MapReduce和GPU雙重并行計(jì)算的云計(jì)算模型[J]. 計(jì)算機(jī)與數(shù)字工程, 2013, 41(3):333-336.
[10] Boubela R N, Kalcher K, Huf W,etal. Big data approaches for the analysis of large-scale fMRI data using apache spark and GPU processing: A demonstration on resting-state fMRI data from the human connectome project[J]. Frontiers in neuroscience, 2014, 9: 492-492.
[11] Segal O, Colangelo P, Nasiri N,etal. SparkCL: A unified programming framework for accelerators on heterogeneous clusters[J]. arXiv preprint arXiv:1505.01120, 2015.
[12] Stuart J A, Owens J D. Multi-GPU MapReduce on GPU clusters[C]//Parallel & Distributed Processing Symposium (IPDPS), 2011 IEEE International. IEEE, 2011: 1068-1079.
[13] Zhang J, You S, Gruenwald L. Large-scale spatial data processing on GPUs and GPU-accelerated clusters[J]. SIGSPATIAL Special, 2015, 6(3): 27-34.
[14] Kl?ckner A, Pinto N, Lee Y,etal. PyCUDA: GPU run-time code generation for high-performance computing[J]. Parallel Computing, 2009, 38(3):157-174.
[15] 付 偉, 嚴(yán) 博, 吳曉平. 云計(jì)算實(shí)驗(yàn)平臺(tái)建設(shè)關(guān)鍵技術(shù)研究[J]. 實(shí)驗(yàn)室研究與探索, 2013, 32(11):78-81.
[16] 薛志云, 何 軍, 張丹陽, 等. Hadoop 和 Spark 在實(shí)驗(yàn)室中部署與性能評(píng)估[J]. 實(shí)驗(yàn)室研究與探索, 2015, 34(11):77-81.
[17] 李佳佳, 胡新明, 吳百鋒. 基于異構(gòu) GPU 集群的并行分布式編程解決方案[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2014, 31(9):28-31.
Department and Application of the GPU-based Spark Big Data Technology in Laboratory
ZHOUQing-tao,HEJun,HUZhao-hua
(School of Electronic and Information Engineering,Nanjing University of Information Science and Technology, Nanjing 210044, China)
In the era of big data, both big data processing and high performance computing are of the urgent needs of a computer system. Specific to Spark big data processing and high performance computing based on GPU, this paper analyzes the Spark technology based on GPU proposed by industry. It is mainly by constructing heterogeneous parallel of CPU and GPU, making computer to obtain a powerful computing capability. Then we discuss the implementation of the Spark-GPU technology in laboratory environment, and expound the technical process of algorithm realization in detail. On this basis, we assess the performance of the Spark and Spark - GPU technology through simulation experiment. Results show Spark-GPU technology can achieve hundredfold speedup, hence, it can play an important role in promoting the development of image processing and information retrieval and other areas.
big data processing; heterogeneous computing; graphics processing unit
2016-03-28
國家自然科學(xué)基金(NSFC61203273),江蘇省自然科學(xué)基金(BK20141004)
周情濤(1990-),男,山東臨沂人,碩士生,研究方向?yàn)榇髷?shù)據(jù)機(jī)器學(xué)習(xí)。
E-mail: 14751701086@163.com
何 軍(1978-),男,河南鄭州人,博士,副教授,研究方向?yàn)榇髷?shù)據(jù)機(jī)器學(xué)習(xí),計(jì)算機(jī)視覺等。
E-mail: jhe@nuist.edu.cn
TP 302.1
A
1006-7167(2017)01-0112-05