本發(fā)明涉及深度學習異構(gòu)加速技術(shù)領(lǐng)域,更具體地說,涉及一種數(shù)據(jù)處理方法及裝置。
背景技術(shù):
大數(shù)據(jù)和高性能計算平臺的發(fā)展極大的推進了深度學習的步伐,在深度學習中,當數(shù)據(jù)集和參數(shù)模型非常大時,培養(yǎng)大型模型便需要借助分布式計算框架。apachespark有著非常卓越的內(nèi)存計算和可擴展的分布式計算性能,能夠有效的提高深度學習中的超參數(shù)調(diào)優(yōu)及大規(guī)模模型部署。
在深度學習的兩個關(guān)鍵活動:分類和卷積中,需要很高的內(nèi)在并行度、大量的浮點計算能力以及矩陣計算。gpu及fpga憑借其出色的異構(gòu)加速計算和浮點計算能力,極大的提高了深度學習的速度和性能,相對cpu處理有所需服務(wù)器更少、功耗更低的特點。
spark對于可變長度的數(shù)據(jù),通過解析元數(shù)據(jù)后,在內(nèi)存中存儲了一個相對偏移量和長度,利用unsaferow實例充當指向以此長度存儲的行數(shù)據(jù)的指針,在處理一行數(shù)據(jù)時,才把數(shù)據(jù)讀取到內(nèi)存中;而fpga在加速數(shù)據(jù)處理時,只能暫時讀入這一行數(shù)據(jù)。發(fā)明人發(fā)現(xiàn),這種數(shù)據(jù)讀取方式對于fpga加速spark計算明顯沒有充分利用到fpga的可并行性,使得fpga的數(shù)據(jù)讀取速度較慢,進一步導(dǎo)致fpga對于數(shù)據(jù)的處理速度較慢。
綜上所述,如何提供一種能夠充分利用fpga的可并行性以提高其數(shù)據(jù)處理速度的技術(shù)方案,是目前本領(lǐng)域技術(shù)人員亟待解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種數(shù)據(jù)處理方法及裝置,以充分利用fpga的可并行性以提高其數(shù)據(jù)處理速度。
為了實現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種數(shù)據(jù)處理方法,包括:
將分布式計算平臺中存儲的待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式;
利用spark將所述parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中,并在內(nèi)存中對所述待處理數(shù)據(jù)進行解壓和反序列化后發(fā)送至fpga異構(gòu)計算裝置進行對應(yīng)計算。
優(yōu)選的,將待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式,包括:
生成包含有全部待處理數(shù)據(jù)的parquet文件,并在該文件中將全部待處理數(shù)據(jù)切分成行組,其中每個所述行組中包含所有待處理數(shù)據(jù)的列的列塊,且任一列塊均存儲有對應(yīng)列中對應(yīng)部分的待處理數(shù)據(jù)。
優(yōu)選的,在所述parquet文件中將全部待處理數(shù)據(jù)切分成行組,包括:
在所述parquet文件中將全部待處理數(shù)據(jù)切分成行組,其中每個所述行組的大小與所述分布式計算平臺中數(shù)據(jù)塊的大小相同。
優(yōu)選的,利用spark將所述parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中,包括:
利用spark中預(yù)先利用c語言設(shè)置的函數(shù)將所述parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中。
優(yōu)選的,將在內(nèi)存中進行解壓和反序列化后的待處理數(shù)據(jù)至fpga異構(gòu)計算裝置之后,還包括:
獲取所述fpga異構(gòu)計算裝置返回的計算結(jié)果并將該計算結(jié)果返回給所述spark,所述計算結(jié)果為所述fpga異構(gòu)計算裝置利用接收到的待處理數(shù)據(jù)進行對應(yīng)計算得到的。
一種數(shù)據(jù)處理裝置,包括:
轉(zhuǎn)換模塊,用于:將分布式計算平臺中存儲的待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式;
處理模塊,用于:利用spark將所述parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中,并在內(nèi)存中對所述待處理數(shù)據(jù)進行解壓和反序列化后發(fā)送至fpga異構(gòu)計算裝置進行對應(yīng)計算。
優(yōu)選的,所述轉(zhuǎn)換模塊包括:
轉(zhuǎn)換單元,用于:生成包含有全部待處理數(shù)據(jù)的parquet文件,并在該文件中將全部待處理數(shù)據(jù)切分成行組,其中每個所述行組中包含所有待處理數(shù)據(jù)的列的列塊,且任一列塊均存儲有對應(yīng)列中對應(yīng)部分的待處理數(shù)據(jù)。
優(yōu)選的,所述轉(zhuǎn)換單元包括:
轉(zhuǎn)換子單元,用于:在所述parquet文件中將全部待處理數(shù)據(jù)切分成行組,其中每個所述行組的大小與所述分布式計算平臺中數(shù)據(jù)塊的大小相同。
優(yōu)選的,所述處理模塊包括:
加載單元,用于:利用spark中預(yù)先利用c語言設(shè)置的函數(shù)將所述parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中。
優(yōu)選的,還包括:
返回模塊,用于:將在內(nèi)存中進行解壓和反序列化后的待處理數(shù)據(jù)至fpga異構(gòu)計算裝置之后,獲取所述fpga異構(gòu)計算裝置返回的計算結(jié)果并將該計算結(jié)果返回給所述spark,所述計算結(jié)果為所述fpga異構(gòu)計算裝置利用接收到的待處理數(shù)據(jù)進行對應(yīng)計算得到的。
本發(fā)明提供了一種數(shù)據(jù)處理方法及裝置,其中該方法包括:將分布式計算平臺中存儲的待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式;利用spark將所述parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中,并在內(nèi)存中對所述待處理數(shù)據(jù)進行解壓和反序列化后發(fā)送至fpga異構(gòu)計算裝置進行對應(yīng)計算。本申請公開的技術(shù)方案中,先將分布式計算平臺中存儲的待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式,再按照行組將parquet格式的待處理數(shù)據(jù)加載入內(nèi)存中進行相關(guān)處理后發(fā)送至fpga異構(gòu)計算裝置進行對應(yīng)計算。不同于現(xiàn)有技術(shù)中需要一行數(shù)據(jù)一行數(shù)據(jù)的讀取方式,本申請中對parquet格式的待處理數(shù)據(jù)按照行組進行讀取,能夠充分利用到fpga異構(gòu)計算裝置的可并行性,使得fpga異構(gòu)計算裝置的數(shù)據(jù)讀取速度較快,進而大大提高了fpga異構(gòu)計算裝置的數(shù)據(jù)處理速度。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種數(shù)據(jù)處理方法的流程圖;
圖2為本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參閱圖1,其示出了本發(fā)明實施例提供的一種數(shù)據(jù)處理方法的流程圖,可以包括:
s11:將分布式計算平臺中存儲的待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式。
本申請中可以先確定存儲于分布式計算平臺中的待處理數(shù)據(jù)是否為按列存儲的parquet格式,如果是,則不做處理,如果否,則需要將這些待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式。parquet格式的數(shù)據(jù)相較行式存儲有降低磁盤存儲空間、支持向量運算、獲取更好的掃描性能的優(yōu)點。本申請公開的一種數(shù)據(jù)處理方法中各步驟的執(zhí)行主體均可以為數(shù)據(jù)處理裝置,而該數(shù)據(jù)處理裝置可以集成于spark中,因此本申請匯總各步驟的執(zhí)行主體均可以為spark。
s12:利用spark將parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中,并在內(nèi)存中對待處理數(shù)據(jù)進行解壓和反序列化后發(fā)送至fpga異構(gòu)計算裝置進行對應(yīng)計算。
將待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式后,再需要將其加載入內(nèi)存中時則可以直接利用spark將其按行組加入內(nèi)存,進而在內(nèi)存中利用parquet函數(shù)庫中提供的對應(yīng)接口進行解壓及反序列化等相關(guān)處理后發(fā)送至fpga異構(gòu)計算裝置使得fpga異構(gòu)計算裝置對接收到的數(shù)據(jù)進行對應(yīng)的計算。
本申請公開的技術(shù)方案中,先將分布式計算平臺中存儲的待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式,再按照行組將parquet格式的待處理數(shù)據(jù)加載入內(nèi)存中進行相關(guān)處理后發(fā)送至fpga異構(gòu)計算裝置進行對應(yīng)計算。不同于現(xiàn)有技術(shù)中需要一行數(shù)據(jù)一行數(shù)據(jù)的讀取方式,本申請中對parquet格式的待處理數(shù)據(jù)按照行組進行讀取,能夠充分利用到fpga異構(gòu)計算裝置的可并行性,使得fpga異構(gòu)計算裝置的數(shù)據(jù)讀取速度較快,進而大大提高了fpga異構(gòu)計算裝置的數(shù)據(jù)處理速度。
本發(fā)明實施例提供的一種數(shù)據(jù)處理方法,將待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式,可以包括:
生成包含有全部待處理數(shù)據(jù)的parquet文件,并在該文件中將全部待處理數(shù)據(jù)切分成行組,其中每個行組中包含所有待處理數(shù)據(jù)的列的列塊,且任一列塊均存儲有對應(yīng)列中對應(yīng)部分的待處理數(shù)據(jù)。
需要說明的是將待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式,具體則是在parquet文件中將所有待處理數(shù)據(jù)水平切分成rowgroup(行組),一個rowgroup包含所有列中對應(yīng)部分的columnchunk(列塊),一個columnchunk存儲該列的待處理數(shù)據(jù),也即水平切分得到行組,而行組內(nèi)部則按列切分,從而每個行組包含待處理數(shù)據(jù)的所有列的部分列塊,而所有行組組合到一起就可以得到全部待處理數(shù)據(jù);如需要將10行4列的待處理數(shù)據(jù)切分成兩個行組,則將前5行及這5行在4列中對應(yīng)的數(shù)據(jù)作為第一個行組,而后5行及這5行在4列中對應(yīng)的數(shù)據(jù)作為第二個行組,最終得到兩個均為5行4列的行組。從而通過這種方式快速方便的將待處理數(shù)據(jù)轉(zhuǎn)換成parquet格式,進一步保證了本發(fā)明實施例提供的數(shù)據(jù)處理方法的順利實現(xiàn)。
本發(fā)明實施例提供的一種數(shù)據(jù)處理方法,在parquet文件中將全部待處理數(shù)據(jù)切分成行組,可以包括:
在parquet文件中將全部待處理數(shù)據(jù)切分成行組,其中每個行組的大小與分布式計算平臺中數(shù)據(jù)塊的大小相同。
需要說明的是,行組的大小可以根據(jù)實際需要進行配置,本申請中將其設(shè)置成與分布式計算平臺中的數(shù)據(jù)塊大小相同,無需對數(shù)據(jù)塊進行切分或結(jié)合,簡化了操作過程。
本發(fā)明實施例提供的一種數(shù)據(jù)處理方法,利用spark將parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中,可以包括:
利用spark中預(yù)先利用c語言設(shè)置的函數(shù)將parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中。
需要說明的是,本發(fā)明實施例提供的技術(shù)方案可以基于c語言實現(xiàn),其中可以預(yù)先利用c語言編寫對應(yīng)的函數(shù)實現(xiàn)對待處理數(shù)據(jù)的按行組讀取并加載入內(nèi)存中以及后續(xù)對待處理數(shù)據(jù)的處理發(fā)送等。具體來說,本申請以c語言實現(xiàn)了一種存在于內(nèi)存中的數(shù)據(jù)模型,該模型以parquet存儲格式為基礎(chǔ),結(jié)合javanativeinterface(jni,jni提供了scala和c語言及opencl的通信,允許代碼和數(shù)據(jù)在不同語言間進行交互),可以實現(xiàn)parquet文件的元數(shù)據(jù)解析、數(shù)據(jù)讀取、解壓縮、反序列化等功能并可以提供與scala交互的接口。從而可以利用c語言簡單快速的實現(xiàn)本申請公開的技術(shù)方案。
本發(fā)明實施例提供的一種數(shù)據(jù)處理方法,將在內(nèi)存中進行解壓和反序列化后的待處理數(shù)據(jù)至fpga異構(gòu)計算裝置之后,還可以包括:
獲取fpga異構(gòu)計算裝置返回的計算結(jié)果并將該計算結(jié)果返回給spark,計算結(jié)果為fpga異構(gòu)計算裝置利用接收到的待處理數(shù)據(jù)進行對應(yīng)計算得到的。
將處理過后的待處理數(shù)據(jù)發(fā)送到fpga異構(gòu)計算裝置,由fpga異構(gòu)計算裝置中的算法進行相應(yīng)的數(shù)據(jù)處理后,反饋回spark,便于spark基于計算結(jié)果進行下一步操作。
另外需要說明的是,本發(fā)明的實施例中對于與現(xiàn)有技術(shù)中對應(yīng)技術(shù)方案實現(xiàn)原理一致的部分并未詳細說明,以免過多贅述。
本發(fā)明實施例還提供了一種數(shù)據(jù)處理裝置,如圖2所示,可以包括:
轉(zhuǎn)換模塊11,用于:將分布式計算平臺中存儲的待處理數(shù)據(jù)轉(zhuǎn)換成按列存儲的parquet格式;
處理模塊12,用于:利用spark將parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中,并在內(nèi)存中對待處理數(shù)據(jù)進行解壓和反序列化后發(fā)送至fpga異構(gòu)計算裝置進行對應(yīng)計算。
本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置,轉(zhuǎn)換模塊可以包括:
轉(zhuǎn)換單元,用于:生成包含有全部待處理數(shù)據(jù)的parquet文件,并在該文件中將全部待處理數(shù)據(jù)切分成行組,其中每個行組中包含所有待處理數(shù)據(jù)的列的列塊,且任一列塊均存儲有對應(yīng)列中對應(yīng)部分的待處理數(shù)據(jù)。
本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置,轉(zhuǎn)換單元可以包括:
轉(zhuǎn)換子單元,用于:在parquet文件中將全部待處理數(shù)據(jù)切分成行組,其中每個行組的大小與分布式計算平臺中數(shù)據(jù)塊的大小相同。
本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置,處理模塊可以包括:
加載單元,用于:利用spark中預(yù)先利用c語言設(shè)置的函數(shù)將parquet格式的待處理數(shù)據(jù)按行組加載入內(nèi)存中。
本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置,還可以包括:
返回模塊,用于:將在內(nèi)存中進行解壓和反序列化后的待處理數(shù)據(jù)至fpga異構(gòu)計算裝置之后,獲取fpga異構(gòu)計算裝置返回的計算結(jié)果并將該計算結(jié)果返回給spark,計算結(jié)果為fpga異構(gòu)計算裝置利用接收到的待處理數(shù)據(jù)進行對應(yīng)計算得到的。
本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置中相關(guān)部分的說明請參見本發(fā)明實施例提供的一種數(shù)據(jù)處理方法中對應(yīng)部分的詳細說明,在此不再贅述。
對所公開的實施例的上述說明,使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。