为Spark ML算法提供GPU加速度

spark mllib是apache spark用于大规模machine learning并且提供了许多流行的机器学习算法的内置实现。这些实现创建于十年前,但没有利用现代计算加速器,如 nvidia gpu 。
为了解决这一差距,我们最近开源了 spark rapids ml(nvidia/spark-rapids-ml) ,一个 python 包,为 py spark ml 应用程序提供 gpu 加速。通过这样做,我们实现了以下关键目标:
应用程序编程接口:完全保留 py spark mllib 基于 dataframes 的 apispark ml algorithms,保持与 spark 的 pipeline api 、 crossvalidation 等的兼容性。允许在基线 spark ml 实现和 gpu 加速实现之间切换,只需最少的代码更改(即最多更改 python 包导入语句)。
加快速度并节省成本:为 spark ml 算法展示 gpu 加速带来的显著性能提升和成本节约。
体系结构:利用 nvidia 已经完成的大量工作来加速传统的 ml 算法。
您可以从nvidia/spark-rapids-mlapache v2 许可证下的 github 存储库。初始版本为以下 spark ml 算法提供了 gpu 加速度:
主成分分析
k- 均值聚类
带脊和弹性网正则化的线性回归
随机森林分类和回归
该版本还包括以下内容的 spark ml api 兼容版本:
k 最近邻
我们之所以最初选择算法,是因为我们的第三个目标:尽可能使用现有的 nvidia 加速 ml 库。
具体而言,我们选择在oss rapids cuml library并为 spark ml 中也提供的算法的现有 cuml 分布式实现提供 py spark api 包装器。
rapids cuml 还对 spark ml 中没有的一些流行算法进行了 gpu 加速的分布式实现,我们已经包括了 k 个最近邻居,作为为这些算法提供 spark ml api 兼容性的概念证明。
图 1 。 spark rapids ml 和 cuml 集成
图 1 显示, gpu cuml ml 与 cuml 的集成使用 spark 的 barrier rdd 同步和通信机制,在正在运行的 spark cluster 上引导 cuml s 的分布式算法实现,每个 rapids 工作者映射到每个 spark 一个 spark ]任务上。算法计算和工作人员之间的通信被推迟到 cuml 。对于后者, cuml 依赖于 nccl 和 ucx 库来加速 gpu 之间的通信, spark rapids ml 也使用这些通信。
易于采用的 api
作为核心设计目标, spark rapids ml api 旨在将代码更改降至最低,以方便 spark ml 开发人员采用,并促进现有 spark ml 应用程序的迁移。
以下代码示例用于 kmean 的基线 spark ml 和 spark rapids ml ,其中只有 python 导入语句被更改.
py spark 毫升
from pyspark.ml.clustering import kmeanskmeans_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 导入 kmeanskmeans_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 ml 对应的估计器模型 api 。它们具有匹配的(在名称和数据类型上)构造函数参数、 getter 和 setter 以及模型属性和方法,在各种算法的底层 cuml 实现所支持的范围内。
相应的拟合和变换方法接受带有 vectorudt 的 spark 数据帧、 spark sql 数组或标量特征列(带有float或double元素类型)。目前,仅支持密集向量。
加快速度并节省成本
在本节中,我们提供了初步的基准测试结果,比较了支持算法的 gpu 加速 spark rapids ml 版本和基于 cpu 的 spark ml 版本。
基准测试在 databricks 的 aws 托管 spark 服务上的三个节点 spark cluster (一个驱动程序,两个执行器)中运行,具有以下硬件配置:
在 cpu 集群中,m5.2xlarge执行器和驱动程序节点各有八个cpu内核和32 gb ram。
在 gpu 集群中, g5.2x 大型执行器节点的 cpu 和 ram 与 m5.2x 大型节点相同,还有 nvidia 24-gba10gpu 。
基准测试是在适用于相应算法的 12-gb 合成数据集上运行的。它们是使用 sci-kit learn 的合成数据生成例程生成的,并以 parquet 格式存储在 amazon s3 上。运行时用于从 amazon s3 加拟合方法执行端到端数据加载。我们还使用了spark-rapids plugin以加速 gpu 运行的数据加载。
图 2 : 基于 cpu 的 spark ml 和 gpu 加速 spark rapids ml 算法拟合方法的运行时间(秒)(对数刻度)
图 2 和图 3 总结了各种算法的基准测试结果。选择数据集和算法参数来表示高度计算密集型的 ml 工作负载。
图 3 中的成本效益图显示了由基准运行时间和 databricks 的计算成本模型( dbu 加上 cpu ec2 实例成本)确定的 cpu 计算成本与 amazon 计算成本的比率。虽然 gpu 集群每小时的成本更高,但对于这些基准测试来说,它的端到端成本效益要高得多,因为它不仅能补偿更快的运行时间。
有关更多信息和重现这些结果的步骤,请参阅nvidia/spark-rapids-mlgithub。
图 3 。 gpu – cpu 加速系数和相应的成本效益
接下来的步骤
使用 spark rapids ml ,只需一行代码更改即可显著加快 spark ml 应用程序的速度,并降低计算成本。

泰尔实验室破解AI伪造人脸,准确率达98.9%
如何采用FPGA自行设计一款LDPC编解码器呢
如何推动电器电子行业实现绿色高质量的发展
瑞盟三通道时钟发生芯片MS5351,完全兼容SI5351
基于FPGA系统的DDR2电路设计
为Spark ML算法提供GPU加速度
三星Galaxy S24+搭载Exynos 2400芯片,CPU性能提升1.7倍,AI处理能
银川政府与宁夏电力公司合作计划到2025年建成智能电网
USB2.0HUB控制器芯片-DPU1.1S主要特性和应用及管脚图片
英飞凌推出面向低电压应用的最新防静电二极管 提升消费电子产品的可靠性
小米有线充电技术已经突破100W,未来高端旗舰机都将配备三重快充
信号完整性之反射(三)
5G需找到杀手级应用,实现用营收覆盖成本的良性循环
关于肉制品挥发性盐基氮测定仪的产品介绍
iQOO手机体验评测 实力不容小觑
随着智能电视的功能越来越多,电视盒子或将被取代
又一热门报考专业诞生:无人机,志愿填报的考生注意了
PCB经典层叠
体感互动技术是什么,它的应用领域都有哪些
星巡智能最新打造基于嵌入式AI视觉的硬件产品