如何用cuDF加快Pandas的速度
Python中的Pandas数据框架非常有用;它们提供了一种简单而灵活的处理数据的方式,以及大量的内置函数来处理、分析和加工数据。虽然Pandas数据框架有一个不错的处理时间,但在计算密集型操作的情况下,Pandas数据框架往往很慢,导致数据科学和ML工作流的延迟。Pandas数据框架的这种有限速度是因为Pandas在只有8个核心的CPU上工作。然而,数据科学和机器学习工作流程的GPU加速为这一问题提供了解决方案,并以令人印象深刻的水平提高了操作速度。
cuDF
cuDF(CUDA DF)是一个Python GPU数据框架库,有助于加速海量数据的加载、处理和操作–从而使用户能够快速进行计算机密集型操作。cuDF是基于apache arrow columnar布局的,我们将在后面讨论。
为了从CPU转向GPU,即从Pandas转向cuDF,人们不需要从头开始学习一个新的库。cuDF提供了一个类似Pandas的API–使数据科学家、分析师和机器学习工程师从Pandas转向cuDF相当简单。就像Pandas一样,cuDF提供两种数据结构。大多数内置函数也可以在cuDF中以同样的语法使用。
CUDA/GPU 需求:
- CUDA 11.0+
- NVIDIA驱动程序450.80.02+
- Pascal架构或更好(计算能力>=6.0)。
- Conda
cuDF可以用rapidsai频道的conda来安装。
Pandas和cuDF的计算时间比较
为了分析两种情况下所花费的时间,让我们尝试加载一个巨大的数据集data.csv–首先使用pandas库,然后使用cuDF,并比较两种情况下的计算时间。
在下面的例子中,我们采取了一个由887379行和22列组成的大量数据集’Data.csv’。首先,我们将使用Pandas加载数据集,计算所需的时间,然后我们将使用cuDF重复加载相同的数据集,并比较运行时间。
使用Pandas来加载数据集:
输出:
上述代码的输出使用Pandas来加载Data.csv。
使用cuDF来加载数据集:
输出:
上述代码的输出使用cuDF来加载Data.csv。
从以上两个案例可以看出,CPU(Pandas)加载数据集需要2.3006720542907715秒,而GPU(cuDF)只需要0.1478710174560547秒,速度快很多。
cuDF中的箭形列式布局
如前所述,cuDF采用了Apache Arrow Columnar Layout,这是一种用于表示结构化数据集的内存列式格式。这种列式格式速度快,在处理和迭代大数据集时,允许计算密集型操作以最高效率工作。
以下是传统内存缓冲区和箭形内存缓冲区(柱状布局)的样本数据集。
传统内存缓冲器与箭形内存缓冲器
传统的内存缓冲器的数据是以行为单位存储在连续的内存位置。相反,在Arrow Memory Buffer的情况下,数据被存储在连续的内存位置的列中。这是加快CuDF数据帧速度的因素之一。
注意:由于cuDF要求你有特定的RAPIDS兼容GPU,为了练习/探索,可以使用Kaggle或Google Colaboratory,因为这两个平台都提供免费的GPU访问。然而,在使用Google Colabs时,只需确保你被分配到以下GPU中的任何一个。Tesla T4、P4或P100,因为这些是Google Colab上唯一兼容RAPIDS的GPU。
因此,很明显,使用cuDF我们可以在Python数据框架上使用GPU加速,使数据的处理速度相当快。这在数据科学和ML领域有着巨大的意义,因为每秒钟都会有大量的数据产生–其快速的处理是必须的。