百度運(yùn)用FPGA方法大規(guī)模加速SQL查詢
盡管我們對百度今年工作焦點(diǎn)的關(guān)注集中在這個中國搜索巨頭在深度學(xué)習(xí)方面的舉措上,許多其他的關(guān)鍵的,盡管不那么前沿的應(yīng)用表現(xiàn)出了大數(shù)據(jù)帶來的挑戰(zhàn)。
正如百度的歐陽劍在本周 Hot Chips 大會上談?wù)摰模俣茸鴵沓^ 1 EB 的數(shù)據(jù),每天處理大約 100 PB 的數(shù)據(jù),每天更新 100 億的網(wǎng)頁,每 24 小時更新處理超過 1 PB 的日志更新,這些數(shù)字和 Google 不分上下,正如人們所想象的。百度采用了類似 Google 的方法去大規(guī)模地解決潛在的瓶頸。
正如剛剛我們談到的,Google 尋找一切可能的方法去打敗摩爾定律,百度也在進(jìn)行相同的探索,而令人激動的、使人著迷的機(jī)器學(xué)習(xí)工作是迷人的,業(yè)務(wù)的核心關(guān)鍵任務(wù)的加速同樣也是,因?yàn)楸仨毴绱?。歐陽提到,公司基于自身的數(shù)據(jù)提供高端服務(wù)的需求和 CPU 可以承載的能力之間的差距將會逐漸增大。
對于百度的百億億級問題,在所有數(shù)據(jù)的接受端是一系列用于數(shù)據(jù)分析的框架和平臺,從該公司的海量知識圖譜,多媒體工具,自然語言處理框架,推薦引擎,和點(diǎn)擊流分析都是這樣。簡而言之,大數(shù)據(jù)的首要問題就是這樣的:一系列各種應(yīng)用和與之匹配的具有壓倒性規(guī)模的數(shù)據(jù)。
當(dāng)談到加速百度的大數(shù)據(jù)分析,所面臨的幾個挑戰(zhàn),歐陽談到抽象化運(yùn)算核心去尋找一個普適的方法是困難的。“大數(shù)據(jù)應(yīng)用的多樣性和變化的計(jì)算類型使得這成為一個挑戰(zhàn),把所有這些整合成為一個分布式系統(tǒng)是困難的,因?yàn)橛卸嘧兊钠脚_和編程模型(MapReduce,Spark,streaming,user defined,等等)。將來還會有更多的數(shù)據(jù)類型和存儲格式。”
盡管存在這些障礙,歐陽講到他們團(tuán)隊(duì)找到了(它們之間的)共同線索。如他所指出的那樣,那些把他們的許多數(shù)據(jù)密集型的任務(wù)相連系在一起的就是傳統(tǒng)的 SQL。“我們的數(shù)據(jù)分析任務(wù)大約有 40% 是用 SQL 寫的,而其他的用 SQL 重寫也是可用做到的。” 更進(jìn)一步,他講道他們可以享受到現(xiàn)有的 SQL 系統(tǒng)的好處,并可以和已有的框架相匹配,比如 Hive,Spark SQL,和 Impala 。下一步要做的事情就是 SQL 查詢加速,百度發(fā)現(xiàn) FPGA 是最好的硬件。
這些主板,被稱為處理單元( 下圖中的 PE ),當(dāng)執(zhí)行 SQL 時會自動地處理關(guān)鍵的 SQL 功能。這里所說的都是來自演講,我們不承擔(dān)責(zé)任。確切的說,這里提到的 FPGA 有點(diǎn)神秘,或許是故意如此。如果百度在基準(zhǔn)測試中得到了如下圖中的提升,那這可是一個有競爭力的信息。后面我們還會繼續(xù)介紹這里所描述的東西。簡單來說,F(xiàn)PGA 運(yùn)行在數(shù)據(jù)庫中,當(dāng)其收到 SQL 查詢的時候,該團(tuán)隊(duì)設(shè)計(jì)的軟件就會與之緊密結(jié)合起來。
歐陽提到了一件事,他們的加速器受限于 FPGA 的帶寬,不然性能表現(xiàn)本可以更高,在下面的評價(jià)中,百度安裝了 2 塊12 核心,主頻 2.0 GHz 的 intl E26230 CPU,運(yùn)行在 128G 內(nèi)存。SDA 具有 5 個處理單元,(上圖中的 300MHz FPGA 主板)每個分別處理不同的核心功能(篩選filter,排序sort,聚合aggregate,聯(lián)合join和分組group by)
為了實(shí)現(xiàn) SQL 查詢加速,百度針對 TPC-DS 的基準(zhǔn)測試進(jìn)行了研究,并且創(chuàng)建了稱做處理單元(PE)的特殊引擎,用于在基準(zhǔn)測試中加速 5 個關(guān)鍵功能,這包括篩選filter,排序sort,聚合aggregate,聯(lián)合join和分組group by,(我們并沒有把這些單詞都像 SQL 那樣大寫)。SDA 設(shè)備使用卸載模型,具有多個不同種類的處理單元的加速卡在 FPGA 中組成邏輯,SQL 功能的類型和每張卡的數(shù)量由特定的工作量決定。由于這些查詢在百度的系統(tǒng)中執(zhí)行,用來查詢的數(shù)據(jù)被以列格式推送到加速卡中(這會使得查詢非??焖?,而且通過一個統(tǒng)一的 SDA API 和驅(qū)動程序,SQL 查詢工作被分發(fā)到正確的處理單元而且 SQL 操作實(shí)現(xiàn)了加速。
SDA 架構(gòu)采用一種數(shù)據(jù)流模型,加速單元不支持的操作被退回到數(shù)據(jù)庫系統(tǒng)然后在那里本地運(yùn)行,比其他任何因素,百度開發(fā)的 SQL 加速卡的性能被 FPGA 卡的內(nèi)存帶寬所限制。加速卡跨整個集群機(jī)器工作,順便提一下,但是數(shù)據(jù)和 SQL 操作如何分發(fā)到多個機(jī)器的準(zhǔn)確原理沒有被百度披露。
我們受限與百度所愿意披露的細(xì)節(jié),但是這些基準(zhǔn)測試結(jié)果是十分令人鼓舞的,尤其是 Terasort 方面,我們將在 Hot Chips 大會之后跟隨百度的腳步去看看我們是否能得到關(guān)于這是如何連接到一起的和如何解決內(nèi)存帶寬瓶頸的細(xì)節(jié)。