GPU數據科學:更迅速地將CSV轉換為Parquet

在本地,很長一段時間以來一直存在著這樣的事實:"我們用啟動資金來處理企業級別的數據" —我們需要更便宜地做!

這可能令人沮喪—老實說,我夢想著能夠啟動一個1000個節點的群集在幾分鐘而不是幾個小時的時間內完成一些痛苦的處理會好得多。 因此,我開始嘗試一些替代方法,以嘗試不僅加速我們的數據科學工作,而且使其價格更便宜!

這些方法之一是利用GPU的功能。

是什麼使GPU對數據科學有利?

GPU本質上是一個獨立的集群。 NVIDIA芯片具有所謂的" CUDA內核",其中每個內核都是一個微型處理器,可以以與CPU相同的方式執行某些代碼。

下面是一個受歡迎的消費類GPU-GTX 1080 Ti,它表明該卡具有3584個CUDA內核,可以並行處理此數據。

GPU數據科學:更迅速地將CSV轉換為Parquet / ORC!

> Courtesy of videocardz.com

為什麼以CSV轉換為ORC或Parquet為例?

很簡單,因為在計算上是相對困難的事情。 為了從基於行轉移到基於列,需要對整個數據集進行透視

最重要的是,數據被分成多個條帶,並且有各種統計信息可以計算得出,並且要寫入的文件標頭和頁腳包含所保存數據的摘要。

GPU數據科學:更迅速地將CSV轉換為Parquet / ORC!

> https://www.reddit.com/r/dataengineering/comments/bd5h54/eli5_columnar_databasesdata_storage/

設置

我在家中有一臺QNAP NAS,由於我需要大量存儲,因此非常適合本演示,它具有以下硬件和軟件:

· 14TB SATA(Raid 10)

· NVIDIA Geforce GTX 1060 6GB

· Rapids.ai(通過Docker)

Rapids.ai是一個開放源代碼框架,得到了NVIDIA公司員工的支持,它提供了GPU優化的數據幀和各種其他工具,可以使此操作變得容易!

數據集

我們為客戶創建了一個數據集,該數據集包含117GB壓縮的CSV文件(未壓縮的文件約為400GB),大約有20億行。 我們需要將其轉換為ORC格式,以便將其插入到平臺數據倉庫(基於Presto)中。

在GPU上將CSV處理為ORC

注意:在標準SATA驅動器上運行時,我已包括以下每個步驟的時間安排

第一步是創建一個包含所有CSV數據的Dask GPU數據框。 我的GPU只有6GB,因此這裡的限制是每個未壓縮的塊都必須適合GPU內存,如果將CSV數據導出到較少的大文件中,則可能會導致問題-在這種情況下,您應該處理未壓縮的數據。

CPU times:

user 1.82 s,

sys: 870 ms,

total: 2.69 s

Wall time 6.99 s

第二步是將數據重新分區為更易於管理的文件-此處的內存限制再次限制了您可以執行的操作(儘管Rapids.ai團隊正在對此進行處理)。

CPU times:

user 60.2 ms,

sys: 159 µs,

total: 60.4 ms

Wall time: 57.6 ms

最後,採用這個新的數據框並將其寫到ORC文件中:

CPU times:

user 1h 4min 4s,

sys: 30min 19s,

total 1h 34min 23s

Wall time: 41min 57s

因此總共需要42分鐘來處理400GB的CSV數據到ORC

測試回顧

自然,該測試並不完美。 有許多可以改進的地方。 對我來說,最大的煩惱是我必須指定大量分區,以使其保持在我的GPU限制內。

有一些問題可以解決這個問題,但是:

https://github.com/rapidsai/cudf/issues/3542 https://github.com/rapidsai/cudf/issues/3342

https://github.com/rapidsai / cudf / issues / 3004

他們在開發方面非常活躍,所以我只是認為這是處於前沿的一部分!

磁盤速度:

同樣在SATA驅動器上運行此測試。 42分鐘是一個了不起的結果,並且比運行Presto或類似版本的21個節點大型實例集群的類似大小的數據集要快得多。我確實在NVMe驅動器上運行了此過程並返回了31分鐘,但是我認為可以通過單獨運行來進一步減少 NVMe驅動器可避免IO衝突。

結論

與使用群集完成數據科學上的任務相比,GPU正在迅速成為一種廉價且現實的選擇。 與一個21節點的大型集群相比,旋轉單個AWS GPU實例的成本大約是其成本的十分之一,因此探索這種數據處理方法比以往任何時候都變得越來越有意義。

GPU數據科學:更迅速地將CSV轉換為Parquet / ORC!

(本文翻譯自Daniel Voyce的文章《GPU Data Science: Converting CSV to Parquet / ORC faster & Cheaper than using a cluster!》,參考:https://towardsdatascience.com/gpu-datascience-converting-csv-to-parquet-orc-faster-cheaper-than-using-a-cluster-c4b20d969009)


分享到:


相關文章: