Spark MLlib是Apache Spark用于大規(guī)模machine learning并且提供了許多流行的機(jī)器學(xué)習(xí)算法的內(nèi)置實(shí)現(xiàn)。這些實(shí)現(xiàn)創(chuàng)建于十年前,但沒(méi)有利用現(xiàn)代計(jì)算加速器,如 NVIDIA GPU 。
為了解決這一差距,我們最近開(kāi)源了 Spark RAPIDS ML(NVIDIA/spark-rapids-ml) ,一個(gè) Python 包,為 Py Spark ML 應(yīng)用程序提供 GPU 加速。通過(guò)這樣做,我們實(shí)現(xiàn)了以下關(guān)鍵目標(biāo):
應(yīng)用程序編程接口:完全保留 Py Spark MLlib 基于 DataFrames 的 APISpark ML algorithms,保持與 Spark 的 Pipeline API 、 CrossValidation 等的兼容性。允許在基線 Spark ML 實(shí)現(xiàn)和 GPU 加速實(shí)現(xiàn)之間切換,只需最少的代碼更改(即最多更改 Python 包導(dǎo)入語(yǔ)句)。
加快速度并節(jié)省成本:為 Spark ML 算法展示 GPU 加速帶來(lái)的顯著性能提升和成本節(jié)約。
體系結(jié)構(gòu):利用 NVIDIA 已經(jīng)完成的大量工作來(lái)加速傳統(tǒng)的 ML 算法。
您可以從NVIDIA/spark-rapids-mlApache v2 許可證下的 GitHub 存儲(chǔ)庫(kù)。初始版本為以下 Spark ML 算法提供了 GPU 加速度:
主成分分析
K- 均值聚類(lèi)
帶脊和彈性網(wǎng)正則化的線性回歸
隨機(jī)森林分類(lèi)和回歸
該版本還包括以下內(nèi)容的 Spark ML API 兼容版本:
K 最近鄰
我們之所以最初選擇算法,是因?yàn)槲覀兊牡谌齻€(gè)目標(biāo):盡可能使用現(xiàn)有的 NVIDIA 加速 ML 庫(kù)。
具體而言,我們選擇在OSS RAPIDS cuML library并為 Spark ML 中也提供的算法的現(xiàn)有 cuML 分布式實(shí)現(xiàn)提供 Py Spark API 包裝器。
RAPIDS cuML 還對(duì) Spark ML 中沒(méi)有的一些流行算法進(jìn)行了 GPU 加速的分布式實(shí)現(xiàn),我們已經(jīng)包括了 k 個(gè)最近鄰居,作為為這些算法提供 Spark ML API 兼容性的概念證明。
圖 1 。 Spark RAPIDS ML 和 cuML 集成
圖 1 顯示, GPU cuML ML 與 cuML 的集成使用 Spark 的 Barrier RDD 同步和通信機(jī)制,在正在運(yùn)行的 Spark cluster 上引導(dǎo) cuML s 的分布式算法實(shí)現(xiàn),每個(gè) RAPIDS 工作者映射到每個(gè) Spark 一個(gè) Spark ]任務(wù)上。算法計(jì)算和工作人員之間的通信被推遲到 cuML 。對(duì)于后者, cuML 依賴(lài)于 NCCL 和 UCX 庫(kù)來(lái)加速 GPU 之間的通信, Spark RAPIDS ML 也使用這些通信。
易于采用的 API
作為核心設(shè)計(jì)目標(biāo), Spark RAPIDS ML API 旨在將代碼更改降至最低,以方便 Spark ML 開(kāi)發(fā)人員采用,并促進(jìn)現(xiàn)有 Spark ML 應(yīng)用程序的遷移。
以下代碼示例用于 KMean 的基線 Spark ML 和 Spark RAPIDS ML ,其中只有 Python 導(dǎo)入語(yǔ)句被更改.
py Spark 毫升
from pyspark.ml.clustering import KMeans kmeans_estm = KMeans() .setK(100) .setFeaturesCol("features") .setMaxIter(30) kmeans_model = kmeans_estm.fit(pyspark_data_frame) kmeans_model.write().save("saved-model") transformed = kmeans_model.transform(pyspark_data_frame)
Spark _ RAPIDS _ ml
從 Spark _ RAPIDS _ ml 導(dǎo)入 KMeans kmeans_estm = KMeans() .setK(100) .setFeaturesCol("features") .setMaxIter(30) kmeans_model = kmeans_estm.fit(pyspark_data_frame) kmeans_model.write().save("saved-model") transformed = kmeans_model.transform(pyspark_data_frame)
更一般地說(shuō),支持算法的 Spark RAPIDS ML 加速版本實(shí)現(xiàn)了 Spark ML 對(duì)應(yīng)的估計(jì)器模型 API 。它們具有匹配的(在名稱(chēng)和數(shù)據(jù)類(lèi)型上)構(gòu)造函數(shù)參數(shù)、 getter 和 setter 以及模型屬性和方法,在各種算法的底層 cuML 實(shí)現(xiàn)所支持的范圍內(nèi)。
相應(yīng)的擬合和變換方法接受帶有 VectorUDT 的 Spark 數(shù)據(jù)幀、 Spark SQL 數(shù)組或標(biāo)量特征列(帶有Float或Double元素類(lèi)型)。目前,僅支持密集向量。
加快速度并節(jié)省成本
在本節(jié)中,我們提供了初步的基準(zhǔn)測(cè)試結(jié)果,比較了支持算法的 GPU 加速 Spark RAPIDS ML 版本和基于 CPU 的 Spark ML 版本。
基準(zhǔn)測(cè)試在 Databricks 的 AWS 托管 Spark 服務(wù)上的三個(gè)節(jié)點(diǎn) Spark cluster (一個(gè)驅(qū)動(dòng)程序,兩個(gè)執(zhí)行器)中運(yùn)行,具有以下硬件配置:
在 CPU 集群中,m5.2xlarge執(zhí)行器和驅(qū)動(dòng)程序節(jié)點(diǎn)各有八個(gè)CPU內(nèi)核和32 GB RAM。
在 GPU 集群中, g5.2x 大型執(zhí)行器節(jié)點(diǎn)的 CPU 和 RAM 與 m5.2x 大型節(jié)點(diǎn)相同,還有 NVIDIA 24-GBA10GPU 。
基準(zhǔn)測(cè)試是在適用于相應(yīng)算法的 12-GB 合成數(shù)據(jù)集上運(yùn)行的。它們是使用 sci-kit learn 的合成數(shù)據(jù)生成例程生成的,并以 Parquet 格式存儲(chǔ)在 Amazon S3 上。運(yùn)行時(shí)用于從 Amazon S3 加擬合方法執(zhí)行端到端數(shù)據(jù)加載。我們還使用了spark-rapids plugin以加速 GPU 運(yùn)行的數(shù)據(jù)加載。
圖 2 : 基于 CPU 的 Spark ML 和 GPU 加速 Spark RAPIDS ML 算法擬合方法的運(yùn)行時(shí)間(秒)(對(duì)數(shù)刻度)
圖 2 和圖 3 總結(jié)了各種算法的基準(zhǔn)測(cè)試結(jié)果。選擇數(shù)據(jù)集和算法參數(shù)來(lái)表示高度計(jì)算密集型的 ML 工作負(fù)載。
圖 3 中的成本效益圖顯示了由基準(zhǔn)運(yùn)行時(shí)間和 Databricks 的計(jì)算成本模型( DBU 加上 CPU EC2 實(shí)例成本)確定的 CPU 計(jì)算成本與 Amazon 計(jì)算成本的比率。雖然 GPU 集群每小時(shí)的成本更高,但對(duì)于這些基準(zhǔn)測(cè)試來(lái)說(shuō),它的端到端成本效益要高得多,因?yàn)樗粌H能補(bǔ)償更快的運(yùn)行時(shí)間。
有關(guān)更多信息和重現(xiàn)這些結(jié)果的步驟,請(qǐng)參閱NVIDIA/spark-rapids-mlGitHub。
圖 3 。 GPU – CPU 加速系數(shù)和相應(yīng)的成本效益
接下來(lái)的步驟
使用 Spark RAPIDS ML ,只需一行代碼更改即可顯著加快 Spark ML 應(yīng)用程序的速度,并降低計(jì)算成本。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5080瀏覽量
103822 -
gpu
+關(guān)注
關(guān)注
28文章
4785瀏覽量
129409 -
人工智能
+關(guān)注
關(guān)注
1796文章
47773瀏覽量
240513
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
ADI362如何得到線性加速度的值?
![](https://file1.elecfans.com/web2/M00/82/ED/wKgZomRl1FWAF_vAAADGg5qq7II413.png)
評(píng)論