比Spark快100倍的GPU加速SQL引擎!BlazingSQL開源了

關於 BlazingSQL

比Spark快100倍的GPU加速SQL引擎!BlazingSQL開源了

BlazingSQL 是一個基於英偉達 RAPIDS 生態系統構建的 GPU 加速 SQL 引擎。RAPIDS 包含一組軟件庫(BlazingSQL、cuDF、cuML、cuGraph),用來在 GPU 上執行端到端的數據科學計算和分析管道。RAPIDS 基於 Apache Arrow 列式存儲格式,其中 cuDF 是一個 GPU DataFrame 庫,用於加載、連接、聚合、過濾和操作數據。BlazingSQL 是面向 cuDF 的 SQL 接口,具備支持大規模數據科學工作流和企業數據集的各種功能。

官方稱,BlazingSQL(幾乎)可以處理任何你想要的數據。它的前身是 BlazingDB,但因為它並不是一個數據庫,所以研發團隊將 BlazingDB 改名為 BlazingSQL。

BlazingSQL 主要特性:

  • 查詢外部存儲數據 :僅需一行代碼就可以註冊遠程存儲解決方案,例如 Amazon S3。
  • 簡單的 SQL:非常容易使用,運行 SQL 查詢就能得到 GPU DataFrames(GDF)的查詢結果。
  • 互操作性:任意一個 RAPIDS 庫都可以訪問查詢到的 GDF,並用於任意的數據科學工作負載。

BlazingSQL 解決的痛點

  • 價格昂貴: 進行大規模數據科學研究通常需要包含數千臺服務器的集群,而 BlazingSQL + RAPIDS 運行相同規模的工作負載只需要其中一小部分基礎設施。
  • 速度慢: 在大型數據集上運行工作負載和查詢可能需要數小時或數天,而 BlazingSQL + RAPIDS 藉助 GPU 加速可以在幾秒內得到結果,幫助數據科學家快速迭代新模型。
  • 複雜型: 數據科學工作負載通常基於小數據集開發出原型,然後針對分佈式系統進行重建。BlazingSQL + RAPIDS 讓用戶能夠只編寫一次代碼,並且只需要一行代碼就能動態地改變分佈式集群規模。

在開發團隊看來,迄今為止,SQL 是每一個主流分析生態系統的支柱之一,RAPIDS 是下一代分析生態系統,而 BlazingSQL 是 RAPIDS 的 SQL 標準。

BlazingSQL 完全基於 cuDF 和 cuIO 構建,這些項目的新功能會直接影響 BlazingSQL 的功能和性能。同時,由於 BlazingSQL 運行在 GDF 上,它與 RAPIDS 的所有庫都是 100%可互操作的。

如果你正在使用 RAPIDS,或者正在考慮使用 RAPIDS,BlazingSQL 將為你提供更多便利,包括但不限於:

  • 降低代碼複雜性:SQL 語句非常簡單,你可以用單個語句替換數十到數百個 cuDF 函數調用。
  • 連接到數據湖: 你不再需要同步其他數據庫,BlazingSQL 可以查詢雲端或網絡文件系統中的任意原始文件。
  • 讓 RAPIDS 變得更快: 更先進的 SQL 優化器讓 RAPIDS 技術棧更智能地運行。

BlazingSQL 性能表現

目前,BlazingSQL+RAPIDS 已經上線 Google Colab,研發團隊在 GCP 上搭建了兩個價格相當的集群,一個用於 Spark,另一個用於 BlazingSQL。他們在集群上運行端到端的數據分析工作負載:從數據湖到 ETL/ 特徵工程,再到 XGBoost 訓練,並對 Spark 和 BlazingSQL 的性能進行了對比測試。

研發人員在超過兩千萬行 Netflow 數據上運行兩次相同的特定工作負載。首先運行 BlazingSQL + RAPIDS,然後使用 PySpark(Spark 2.4.1)再次運行,得到如下結果:

如果把從 Google Drive 中加載 CSV 到各自 DataFrame 所需的時間考慮在內,BlazingSQL 比 Spark 快 71 倍。

比Spark快100倍的GPU加速SQL引擎!BlazingSQL開源了

如果只看 ETL 時間,則 BlazingSQL 和 RAPIDS 的速度比 Spark 快 100 倍!

比Spark快100倍的GPU加速SQL引擎!BlazingSQL開源了

據 介紹,BlazingSQL 大部分性能提升來自團隊的內部引擎項目,BlazingSQL 團隊的工程師們希望開發一種專為 GPU DataFrames(GDF)構建的 GPU 執行內核,稱之為“SIMD 表達式解釋器”(SIMD Expression Interpreter)。研發團隊分享了一些關於 SIMD 表達式解釋器的細節,SIMD 表達式解釋器通過幾個關鍵步驟帶來提升性能:

  1. 接收多個輸入,包括 GDF 列、字面量,在不久的將來也會支持函數。
  2. 在加載這些輸入時,SIMD 表達式解釋器將對 GPU 寄存器的分配進行優化,這可以優化 GPU 線程佔用率,並提高性能。
  3. 然後,虛擬機處理這些輸入,並生成多個輸出。假設有以下 SQL 查詢:
比Spark快100倍的GPU加速SQL引擎!BlazingSQL開源了

  1. 在以前,BlazingSQL 會將這條查詢語句轉換為 5 個操作(+,*,sin,cos, - ),每個操作都需要單獨執行。在使用 SIMD 表達式解釋器後,它會同時接收(colA、colB、colD)作為輸入,並在單次內核執行中執行所有 5 個操作,最終生成兩個輸出。這意味著 colA 只需要加載一次,而不是兩次。

目前,SIMD 表達式解釋器支持 BlazingSQL 的過濾和投影,因此它對許多主流的 SQL 查詢都有影響。

如何使用 BlazingSQL

使用 BlazingSQL 在 Amazon S3 中查詢 CSV 文件的示例代碼:

比Spark快100倍的GPU加速SQL引擎!BlazingSQL開源了


分享到:


相關文章: