Spark 3 0 對 GPU 做了什麼支援

2021-10-02 12:32:42 字數 1696 閱讀 1490

spark 本身在資料處理流程裡佔據非常重要的地位,而在人工智慧的戰場,傳統 spark 能帶來什麼呢?

在深度學習裡,模型訓練一般都被 tensorflow, pytorch 等深度學習框架占領了,而 spark 提供的 graphx 和 mllib 可以做一些機器學習的東西,但是在深度學習的戰場裡,明顯沒有什麼優勢,最大的問題就在於硬體加速上,3.0 以前的社群版 spark 是沒有任務排程 gpu 的方法的。

那麼 spark 為什麼在深度學習靠攏呢,還有他的價值呢?

答案就是訓練模型除了本身的大規模的並行密集計算,從資料到模型,必須有資料處理的過程,這個也就是 spark 的強項,因為你不太可能用 pandas 簡單清洗彙總 etl 你的訓練資料的,所以 spark 還是有其一席之地的。

目前 spark 只支援排程 nvidia 的 gpu,amd 等其他廠商的 gpu 還有待測試。

看一下 spark 原始碼到底對 gpu 做了什麼樣的支援。

checkout 到最新的v3.0.0-preview-rc2的 tag。

git checkout v3.0.0-preview-rc2 -b v3.0.0-preview-rc2
因為我只關注 on kubernetes 的模式下,如何對 gpu 進行支援,所以全域性搜尋的時候,可以適當把 yarn 和 mesos 的部分剔除,因為這裡的**一般是互斥的,也就是 on kubernetes 的**,不會用到 yarn 和 mesos 的模組。

這個指令碼執行的結果如下圖。

# addrs=`nvidia-smi --query-gpu=index --format=csv,noheader | sed -e ':a' -e 'n' -e'$!ba' -e 's/\n/","/g'`

# echo

query-gpu選項是用於列印 gpu 相關資訊的乙個選項。

spark..resource.gpu.discoveryscript這是 spark 新增內建的乙個 config,主要是用於傳遞指令碼,來確認 pod 裡的 driver/executor 容器是否已經分配 到了 gpu。當然了,我理解的是,如果你百分百確定可以分配到 gpu,其實這個指令碼不傳也是 沒事的。

core 模組增加了乙個resource的 pacakge。

/path/to/spark/core/src/main/scala/org/apache/spark/resource

├── resourceallocator.scala

├── resourceinformation.scala

└── resourceutils.scala

resourceallocator是乙個 trait,主要是定義了 task 的acquirerelease資源的兩個動作。

關於如何申請 gpu,目前 spark 將所有的資源型別抽象成 resource 這個概念,無論還以後是整合 fpga 還是 gpu,設定是 ib 網絡卡等等,都可以通過 resource 的 vendor 和 name 來指定需要給 task 申請的資源。

spark.driver.resource..vendor

Spark3 0新特性 SQL相關

目錄 一 動態分割槽修剪 dynamic partition pruning 二 自適應查詢執行 adaptive query execution 三 對映下推 project pushdown 四 謂詞下推 predicate pushdown 靜態分割槽裁剪優化 過濾提前,減少無效資料讀寫,尤其...

大資料入門spark3 0入門到精通

第1節 00 了解 課程內容介紹 第2節 01 了解 spark發展歷史和特點介紹 第3節 02 掌握 spark環境搭建 local本地模式 第4節 03 掌握 spark環境搭建 standalone集群模式 第5節 04 掌握 spark環境搭建 standalone ha集群模式 第6節 0...

大資料查詢優化 Spark3 0新特性

前言 apache spark在6月份分布了3.0.0版本,增加了許多效能優化方面的新特性。作為大資料分析的重要引擎,在sql查詢優化方面的新特性值得期待和使用。spark在sql查詢方面的效能優化主要分為四個方向七個方面 這7個方面最值得關注的在於動態優化方向的更新,下面來著重講一下。自適應查詢執...