rapids_评论:Nvidia的Rapids将Python分析引入GPU

rapids

建立机器学习模型是一个重复的过程。 这通常是死记硬背的惯例,是“在周期中获胜最快”的游戏,因为您可以越快地进行迭代,就越容易探索新的理论并获得良好的答案。 这就是当今实际的企业使用AI由大型企业支配的原因之一,而大型企业可能会为此投入大量资源。

Rapids是由Nvidia孵化的几个开源项目的保护伞,该项目将整个处理流程放在GPU上,消除了I / O约束的数据传输,同时还大大提高了每个步骤的速度。 它还为数据提供了一种通用格式,从而减轻了在不同系统之间交换数据的负担。 在用户级别,Rapids模仿了Python API,以简化该用户群的过渡。

机器学习工作流程 Tidyverse食谱

典型的机器学习工作流程

急流生态系统架构

Rapids项目旨在在很大程度上复制Python的机器学习和数据分析API,但要复制GPU,而不是CPU。 这意味着Python开发人员已经拥有了在GPU上运行所需的一切,而无需了解CUDA编程和并行操作的底层细节。 Pythonista的开发人员可以在未启用GPU的计算机上开发代码,然后进行一些调整,然后在可使用的所有GPU上运行它们。

[ 也在InfoWorld上:用于AI开发的6种最佳编程语言 ]

Nvidia CUDA工具包为数学库,并行算法和图形分析提供了较低级的原语。 该架构的核心是基于Apache Arrow的GPU数据帧,该数据帧提供了与编程语言无关的列式内存数据结构。 用户通过cuDF和类似Pandas的API与GPU数据框进行交互。 Dask是用于并行计算的Python库,它模仿上游Python API并与CUDA库一起用于并行计算。 将Dask视为适用于Python的Spark。

急流生态系统架构 快速

急流生态系统架构

cuDF,cuML和cuGraph这三个主要项目是独立开发的,但设计为可无缝协同工作。 作为该项目的一部分,也正在开发到更广泛的Python生态系统的桥梁。

急流安装

在AWS的Linux机器上通过Anaconda进行的安装非常简单,由于版本0.11中的依赖关系发生了变化,因此不多。 安装C / C ++库以使用libcudf并非易事,我建议坚持使用Python API和Conda安装过程。 Rapids包含Jupyter笔记本,也可以在Google的免费Colab上获得,从而使入门变得简单。 我使用Jupyter笔记本0.10版在Google Colab上运行代码,其中包括Nvidia Tesla T4 GPU。

急流端到端毫升工作流程 IDG

Rapids的GPU数据框

数据框架是任何数据科学工作流程的核心。 这是发生功能工程的地方,并且是花费大量时间的地方,因为数据科学家会整理脏数据。 cuDF是Rapids项目,用于基于GPU的类似熊猫的数据框。 cuDF的基础是libcudf,libcudf是一个C ++库,实现了用于导入Apache Arrow数据的低级原语,在数组上执行逐元素的数学运算,以及对GPU内内存矩阵执行排序,联接,分组,归约及其他操作。 libcudf的基本数据结构是GPU数据框(GDF),该数据框又以Apache Arrow的列式数据存储为模型。

cudf技术栈 快速

cuDF技术栈

Rapids Python库为用户提供了类似于数据框的高级界面,例如Pandas中的数据框。 在许多情况下,Pandas代码在cuDF上运行不变。 如果不是这种情况,通常只需要进行较小的更改。

[ 也在InfoWorld上:深度学习与机器学习:理解差异 ]

cuDF中的用户定义功能

结束基本数据操作后,有时有时需要使用用户定义的函数(UDF)处理行和列。 cuDF提供了一种PyData样式的API,可以编写代码来处理更多的过程数据结构,例如数组,序列和移动窗口。 当前仅支持数字和布尔类型。 使用Numba JIT编译器编译UDF,该编译器使用LLVM的子集将数字函数编译为CUDA机器代码。 这样可以大大加快GPU的运行时间。

cuDF中的字符串

尽管GPU非常适合快速处理浮点向量,但通常不会将它们用于处理字符串数据,而事实是,大多数数据都是以字符串形式出现的。 cuStrings是一个GPU字符串处理库,用于在字符串数组中拆分,应用正则表达式,连接,替换标记等。 像cuDF的其他功能一样,它被实现为C / C ++库(libnvStrings),并由旨在模仿熊猫的Python层包装。 尽管未针对在GPU上执行优化字符串数据类型,但代码的并行执行应提供比基于CPU的字符串处理更快的速度。

从cuDF进出数据

数据帧I / O由专用库cuIO处理。 支持所有最常见的格式,包括Arrow,ORC,Parquet,HDF5和CSV。 如果您有幸在DGX-2硬件上运行,可以使用GPU Direct Storage集成将数据直接从高速存储移动到GPU,而无需使用CPU。 至关重要的用户仍然会欣赏在解压缩大型数据集时GPU所提供的加速以及与Python生态系统的紧密集成。

GPU Direct Storage目前处于测试阶段,发布时将在大多数Tesla GPU上提供。 您可以只用一行代码就可以从NumPy数组,Pandas DataFrames和PyArrow表创建GPU数据框。 其他项目可以通过__cuda_array_interface__与Numba生态系统内的库交换数据。 用于神经网络库的DLPack也是受支持的接口。

使用cuDF的最大缺点可能是Python外部缺乏互操作性。 我认为,像Arrow所做的那样,专注于C / C ++ API的强大基础将能够建立更广阔的生态系统并使整个项目受益。

拉皮兹的cuML

cuML的既定目标是成为“由GPU支持的Python Scikit学习”。 从理论上讲,这意味着您只需要更改import语句,并可能需要调整一些参数,以解决在CPU上运行时的差异,在这种情况下,有时采用蛮力方法会更好。 很难低估基于GPU的Scikit学习的好处。 加速是巨大的,数据分析师的生产率可以提高很多倍。 C ++ API尚未准备好在其Python绑定之外进行广泛使用,但这有望改善。

cuML还包括用于通过Dask帮助超参数调整的API,Dask是一个用于在多个节点之间扩展Python的库。 许多机器学习算法可以有效地并行化,并且cuML正在积极开发多GPU和多节点,多GPU算法。

累积算法 快速

cuML算法

[ 也在InfoWorld上:2020年的人工智能预测 ]

拉皮兹的cuGraph

cuGraph是Rapids生态系统的第三个成员,与其他人一样,cuGraph与cuDF和cuML完全集成。 它提供了图形算法,基元和实用程序的良好选择,所有这些都具有GPU加速的性能。 cuGraph中对API的选择比Rapids的其他部分要广泛一些,它们都可以使用NetworkX,Pregel,GraphBLAS和GQL(图形查询语言)。

cugraph堆栈 快速

cuGraph堆栈

cuGraph在本质上更像是一个工具包,而不是cuML。 图形技术在学术界和工业界都是一个快速发展的空间。 因此,通过设计,cuGraph使开发人员可以访问C ++层和图基元,从而鼓励第三方使用cuGraph开发产品。 几所大学做出了贡献,得克萨斯州A&M(GraphBLAS),佐治亚理工大学(Hornet)和加州大学戴维斯分校(Gunrock)的项目已经“产品化”,并归类于cuGraph之下。 每个项目提供一组不同的功能,所有功能都由GPU加速,并且都由相同的cuDF数据帧支持。

NetworkX是Rapids团队针对其本机界面使用的Python API。 通过该接口可以使用多种算法。 尽管只有页面排名是多GPU,但团队仍在积极开发其他版本的多GPU版本。

cugraph算法 快速

cuGraph算法

我发现有趣的cuGraph子项目之一是cugraphBLAS,它是一种使用线性代数语言标准化图算法的构建块的工作。 基于GraphBLAS( graphblas.org ),这是一种用于稀疏动态图处理的自定义数据结构。

Hornet的另一个cuGraph子项目,Hornet提供了一种用于包含图形数据的独立于系统的格式,类似于Apache arrow提供了一种独立于系统的方式处理数据框的方式。 Hornet支持大多数流行的图形格式,包括SNAP,mtx,metis和edge。

为了与接近Python社区的精神保持一致,Python的本机NetworkX包可用于研究复杂的网络。 这包括使用CUDA原语重新实现的图形和多图形的数据结构,使您可以重用许多标准图形算法并执行网络结构和分析措施。 大多数算法是单GPU,例如NetworkX。 尽管如此,仅在GPU上运行它们就能显着提高速度,而工作仍在继续转向多GPU实施。

[ 同样在InfoWorld上:什么是CUDA? GPU的并行编程 ]

在急流路线图上

鉴于基于GPU的分析提供了巨大的速度,因此在将来的版本中将引入一些新项目。

DLPack和array_interface用于深度学习

多层神经网络是移至GPU的首批工作负载之一,针对该机器学习用例存在大量的代码体。 以前,DLPack是深度学习库之间数据交换的实际标准。 如今,通常支持array_interface。 急流都支持。

cuSignal

与Rapids的其他大多数项目一样,cuSignal是现有Python库(在本例中为SciPy Signal库)的GPU加速版本。 原始的SciPy信号库基于NumPy,已由其GPU加速的cuSignal中的CuPy取代。 这是Rapids设计理念在工作中的一个很好的例子。 除了少数自定义CUDA内核外,GPU的端口主要涉及替换import语句和调整一些功能参数。

将信号处理引入Rapids部门是明智之举。 信号处理无处不在,在工业和国防领域具有许多立即有用的商业应用。

空间

时空操作是GPU加速的最佳选择,它们可以解决我们在日常生活中面临的许多现实问题,例如分析交通模式,土壤健康/质量和洪水风险。 移动设备(包括无人机)收集的许多数据都具有地理空间成分,而空间分析是智慧城市的核心。

与其他组件一样,cuSpatial也是一个基于CUDA原语和Thrust向量处理库构建的C ++库,使用cuDF进行数据交换。 C ++库的使用者可以使用C ++阅读器读取点,折线和面数据。 Python用户最好使用Shapely或Fiona之类的现有Python包来填充NumPy数组,然后使用cuSpatial Python API或转换为cuDF数据帧。

用于数据可视化的cuxfilter

数据可视化对于分析工作流以及呈现或报告结果都是至关重要的。 然而,尽管GPU可以处理数据本身的所有魔力,但将数据发送到浏览器并不是一件容易的事。 受Crossfilter JavaScript库启发的cuxfilter旨在通过提供一个堆栈来弥合差距,以使第三方可视化库能够显示cuDF数据帧中的数据。

随着团队挑选出最佳的架构和连接器模式,cuxfilter进行了几次迭代。 最新的迭代利用了Jupyter笔记本电脑,Bokeh服务器和PyViz面板,而集成实验包括来自Uber,Falcon和PyDeck的项目。 该组件尚未准备就绪,但计划在Rapids 0.13中发布。 有很多活动部件,我没有亲身尝试它,但是,如果它能如期实现,那将是Rapids工具包的一个重要补充。

[ 同样在InfoWorld上:选择PyTorch进行深度学习的5个理由 ]

使用Dask扩展和扩展

Dask是Python的分布式任务调度程序,在Python中的作用类似于Apache Spark在Scala中发挥的作用。 Dask-cuDF是一个库,提供分区的,GPU支持的数据帧。 当您计划使用cuML或正在加载大于GPU内存或分布在多个文件中的数据集时,Dask-cuDF可以很好地工作。

就像Spark RDD(弹性分布式数据集)一样,Dask-cuDF分布式数据帧的行为几乎与本地一样,因此您可以尝试使用本地计算机并在需要扩展时迁移到分布式模型。 Dask-cuML提供cuML多节点功能,当您没有DGX工作站的预算时,它是一个不错的选择。

翻译自: https://www.infoworld.com/article/3532009/review-nvidias-rapids-brings-python-analytics-to-the-gpu.html

rapids

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值