0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为Spark ML算法提供GPU加速度

jf_pJlTbmA9 来源:NVIDIA 作者:NVIDIA 2023-07-05 16:30 次阅读

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 兼容性的概念证明。

Spark-RAPIDS-ML-and-cuML-b.png

图 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 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 导入 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 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 运行的数据加载。

Running-time-in-seconds.png 图 2 : 基于 CPU 的 Spark ML 和 GPU 加速 Spark RAPIDS ML 算法拟合方法的运行时间(秒)(对数刻度)

图 2 和图 3 总结了各种算法的基准测试结果。选择数据集和算法参数来表示高度计算密集型的 ML 工作负载。

图 3 中的成本效益图显示了由基准运行时间和 Databricks 的计算成本模型( DBU 加上 CPU EC2 实例成本)确定的 CPU 计算成本与 Amazon 计算成本的比率。虽然 GPU 集群每小时的成本更高,但对于这些基准测试来说,它的端到端成本效益要高得多,因为它不仅能补偿更快的运行时间。

有关更多信息和重现这些结果的步骤,请参阅NVIDIA/spark-rapids-mlGitHub。

GPU-to-CPU-speedup-factors.png 图 3 。 GPU – CPU 加速系数和相应的成本效益

接下来的步骤

使用 Spark RAPIDS ML ,只需一行代码更改即可显著加快 Spark ML 应用程序的速度,并降低计算成本。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4592

    浏览量

    101719
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4417

    浏览量

    126705
  • 人工智能
    +关注

    关注

    1776

    文章

    43845

    浏览量

    230605
收藏 人收藏

    评论

    相关推荐

    ADI362如何得到线性加速度的值?

    我看到ST公司的加速度传感器,可以同时输出普通含有重力加速度的值以及滤波过后的线性加速度值。请问使用ADI362可以得到同样的各个轴的线性加速度值吗? 如果要使用外部滤波
    发表于 01-01 06:56

    加速度传感器的工作原理#传感器

    加速度加速度速度传感器加速度传感器
    硬创客
    发布于 :2021年09月27日 18:27:08

    MMA7361 绝对加速度

    请问,如何将采集到的三轴加速度传感器的电压信号转换成加速度值?求详细算法、公式,有参考程序就更感激不尽了。
    发表于 11-16 12:27

    mpu6050如何除去重力加速度,得到实际的加速度

    各位大神:从MPU6050寄存器读取到的加速度怎样处理才能得到不含重力加速度以外的加速度,即得到实际的加速度值,除去重力加速度
    发表于 11-12 11:57

    加速度速度、位移的算法

    现在使用ADXL363在做加速度传感器。目前算法出了问题。加速度准确,可是速度、位移不准确。测试时使用的正弦波。我想请问一下,怎么计算速度
    发表于 01-16 11:36

    请问什么是静态加速度

    在用ADXL362测加速度,datasheet说可测因倾斜产生的静态加速度,不大明白。既然是静止,怎么还会有加速度呢?该怎么理解这句话?
    发表于 09-28 15:24

    请问ADI362如何得到线性加速度的值

    我看到ST公司的加速度传感器,可以同时输出普通含有重力加速度的值以及滤波过后的线性加速度值。请问使用ADI362可以得到同样的各个轴的线性加速度值吗? 如果要使用外部滤波
    发表于 10-09 16:11

    加速度传感器的原理

    提供了可以检测各个方向的加速度传感器。以iOS设备例,我们利用了其三轴加速度传感器(x,y,z轴代表方向如图)的特性来分析。分别用以检测人步行中三个方向的
    发表于 11-08 15:46

    加速度传感器原理

    提供了可以检测各个方向的加速度传感器。以iOS设备例,我们利用了其三轴加速度传感器(x,y,z轴代表方向如图)的特性来分析。分别用以检测人步行中三个方向的
    发表于 11-09 10:39

    加速度传感器是什么

    何谓加速度传感器?加速度是指单位时间内产生的速度,测量加速度的IC就叫加速度传感器。通过测量加速度
    发表于 03-15 00:46

    请问怎么通过MPU6050的x,,y,z轴加速度,计算出合加速度

    如题,MPU6050采集出来的是三轴加速度,但是我现在想通过计算求出合加速度。要怎么计算呢?这是我自己写的算法,合加速度a = a[0] / ((cos(angle[1])) * (c
    发表于 04-19 05:07

    加速度传感器介绍

    何谓加速度传感器?加速度是指单位时间内产生的速度,测量加速度的IC就叫加速度传感器。通过测量加速度
    发表于 05-15 05:57

    介绍加速度计和陀螺仪的数学模型和基本算法

    本帖翻译自IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南。这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法,以及如何融合这两者,侧重算法、思想的讨论
    发表于 08-06 08:04

    介绍加速度计和陀螺仪的数学模型和基本算法

    本帖翻译自IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南。这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法,以及如何融合这两者,侧重算法、思想的讨论介绍本指南旨在向兴趣者介
    发表于 08-09 06:46

    三轴加速度传感器原理_三轴加速度传感器应用

    本文首先介绍了三轴加速度传感器原理,其次介绍了三轴加速度传感器优点,最后介绍了三轴加速度传感器应用。
    发表于 10-17 15:19 1.8w次阅读