比Spark快100倍的GPU加速SQL引擎!BlazingSQL開源了
BlazingSQL 是基于英偉達 RAPIDS 生態(tài)系統(tǒng)構(gòu)建的 GPU 加速 SQL 引擎,可以為各種 ETL 大數(shù)據(jù)集提供 SQL 接口,并且完全運行在 GPU 之上。近日,其研發(fā)團隊 宣布,BlazingSQL 基于 Apache 2.0 許可完全開源!
開源項目地址:
https://github.com/blazingdb/pyBlazing/
BlazingSQL 是一個基于英偉達 RAPIDS 生態(tài)系統(tǒng)構(gòu)建的 GPU 加速 SQL 引擎。RAPIDS 包含一組軟件庫(BlazingSQL、cuDF、cuML、cuGraph),用來在 GPU 上執(zhí)行端到端的數(shù)據(jù)科學(xué)計算和分析管道。RAPIDS 基于 Apache Arrow 列式存儲格式,其中 cuDF 是一個 GPU DataFrame 庫,用于加載、連接、聚合、過濾和操作數(shù)據(jù)。BlazingSQL 是面向 cuDF 的 SQL 接口,具備支持大規(guī)模數(shù)據(jù)科學(xué)工作流和企業(yè)數(shù)據(jù)集的各種功能。
官方稱,BlazingSQL(幾乎)可以處理任何你想要的數(shù)據(jù)。它的前身是 BlazingDB,但因為它并不是一個數(shù)據(jù)庫,所以研發(fā)團隊將 BlazingDB 改名為 BlazingSQL。
BlazingSQL 主要特性:
查詢外部存儲數(shù)據(jù) :僅需一行代碼就可以注冊遠程存儲解決方案,例如 Amazon S3。 簡單的 SQL:非常容易使用,運行 SQL 查詢就能得到 GPU DataFrames(GDF)的查詢結(jié)果。 互操作性:任意一個 RAPIDS 庫都可以訪問查詢到的 GDF,并用于任意的數(shù)據(jù)科學(xué)工作負載。
價格昂貴: 進行大規(guī)模數(shù)據(jù)科學(xué)研究通常需要包含數(shù)千臺服務(wù)器的集群,而 BlazingSQL + RAPIDS 運行相同規(guī)模的工作負載只需要其中一小部分基礎(chǔ)設(shè)施。 速度慢: 在大型數(shù)據(jù)集上運行工作負載和查詢可能需要數(shù)小時或數(shù)天,而 BlazingSQL + RAPIDS 借助 GPU 加速可以在幾秒內(nèi)得到結(jié)果,幫助數(shù)據(jù)科學(xué)家快速迭代新模型。 復(fù)雜型: 數(shù)據(jù)科學(xué)工作負載通常基于小數(shù)據(jù)集開發(fā)出原型,然后針對分布式系統(tǒng)進行重建。BlazingSQL + RAPIDS 讓用戶能夠只編寫一次代碼,并且只需要一行代碼就能動態(tài)地改變分布式集群規(guī)模。
在開發(fā)團隊看來,迄今為止,SQL 是每一個主流分析生態(tài)系統(tǒng)的支柱之一,RAPIDS 是下一代分析生態(tài)系統(tǒng),而 BlazingSQL 是 RAPIDS 的 SQL 標(biāo)準。
BlazingSQL 完全基于 cuDF 和 cuIO 構(gòu)建,這些項目的新功能會直接影響 BlazingSQL 的功能和性能。同時,由于 BlazingSQL 運行在 GDF 上,它與 RAPIDS 的所有庫都是 100%可互操作的。
如果你正在使用 RAPIDS,或者正在考慮使用 RAPIDS,BlazingSQL 將為你提供更多便利,包括但不限于:
降低代碼復(fù)雜性:SQL 語句非常簡單,你可以用單個語句替換數(shù)十到數(shù)百個 cuDF 函數(shù)調(diào)用。 連接到數(shù)據(jù)湖: 你不再需要同步其他數(shù)據(jù)庫,BlazingSQL 可以查詢云端或網(wǎng)絡(luò)文件系統(tǒng)中的任意原始文件。 讓 RAPIDS 變得更快: 更先進的 SQL 優(yōu)化器讓 RAPIDS 技術(shù)棧更智能地運行。
目前,BlazingSQL+RAPIDS 已經(jīng)上線 Google Colab,研發(fā)團隊在 GCP 上搭建了兩個價格相當(dāng)?shù)募?,一個用于 Spark,另一個用于 BlazingSQL。他們在集群上運行端到端的數(shù)據(jù)分析工作負載:從數(shù)據(jù)湖到 ETL/ 特征工程,再到 XGBoost 訓(xùn)練,并對 Spark 和 BlazingSQL 的性能進行了對比測試。
研發(fā)人員在超過兩千萬行 Netflow 數(shù)據(jù)上運行兩次相同的特定工作負載。首先運行 BlazingSQL + RAPIDS,然后使用 PySpark(Spark 2.4.1)再次運行,得到如下結(jié)果:
如果把從 Google Drive 中加載 CSV 到各自 DataFrame 所需的時間考慮在內(nèi),BlazingSQL 比 Spark 快 71 倍。
越小越好
如果只看 ETL 時間,則 BlazingSQL 和 RAPIDS 的速度比 Spark 快 100 倍!
越小越好
運行以下 Colab 演示,用戶可以使用免費英偉達 T4 GPU 資源進行同樣的測試,對 BlazingSQL 的實際效果進行驗證:
https://colab.research.google.com/drive/1EbPE9FwFur7fE2054BH9s23Kd0FiUgGo
據(jù) 介紹,BlazingSQL 大部分性能提升來自團隊的內(nèi)部引擎項目,BlazingSQL 團隊的工程師們希望開發(fā)一種專為 GPU DataFrames(GDF)構(gòu)建的 GPU 執(zhí)行內(nèi)核,稱之為“SIMD 表達式解釋器”(SIMD Expression Interpreter)。研發(fā)團隊分享了一些關(guān)于 SIMD 表達式解釋器的細節(jié),SIMD 表達式解釋器通過幾個關(guān)鍵步驟帶來提升性能:
接收多個輸入,包括 GDF 列、字面量,在不久的將來也會支持函數(shù)。 在加載這些輸入時,SIMD 表達式解釋器將對 GPU 寄存器的分配進行優(yōu)化,這可以優(yōu)化 GPU 線程占用率,并提高性能。 然后,虛擬機處理這些輸入,并生成多個輸出。假設(shè)有以下 SQL 查詢:
- SELECT colA + colB * 10,sin(colA) - cos(colD)FROM tableA
目前,SIMD 表達式解釋器支持 BlazingSQL 的過濾和投影,因此它對許多主流的 SQL 查詢都有影響。
使用 BlazingSQL 在 Amazon S3 中查詢 CSV 文件的示例代碼:
- from blazingsql import BlazingContext
- bc = BlazingContext()
- bc.s3('dir_name', bucket_name='bucket_name', access_key_id='access_key', secrect_key='secret_key')
- # Create Table from CSV
- bc.create_table('taxi', '/dir_name/taxi.csv')
- # Query
- result = bc.sql('SELECT count(*) FROM taxi GROUP BY year(key)').get()
- result_gdf = result.columns
- #Print GDF
- print(result_gdf)
更多 BlazingSQL 的操作方法參見:
GitHub 項目鏈接:https://github.com/blazingdb/pyBlazing/
官方網(wǎng)站:https://docs.blazingdb.com/docs/using-blazingsql