35

CPU靠边站!使用cuDF在GPU加速Pandas

 4 years ago
source link: https://www.tuicool.com/articles/ZrMBref
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Vj6R3qb.jpg!web

标星★公众号      爱你们

作者:George Seif

编译:1+1=6

近期原创文章:

♥  5种机器学习算法在预测股价的应用(代码+数据)

♥  Two Sigma用新闻来预测股价走势,带你吊打Kaggle

 2万字干货: 利用深度学习最新前沿预测股价走势

♥  机器学习在量化金融领域的误用!

♥  基于RNN和LSTM的股市预测方法

♥  如何鉴别那些用深度学习预测股价的花哨模型?

♥  优化强化学习Q-learning算法进行股市

♥  WorldQuant 101 Alpha、国泰君安 191 Alpha

♥  基于回声状态网络预测股票价格(附代码)

♥  计量经济学应用投资失败的7个原因

♥  配对交易千千万,强化学习最NB!(文档+代码)

♥  关于高盛在Github开源背后的真相!

♥  新一代量化带货王诞生!Oh My God!

♥  独家!关于定量/交易求职分享(附真实试题)

♥  Quant们的身份危机!

♥  AQR最新研究 | 机器能“学习”金融吗?

使用Pandas Dataframe执行数千甚至数百万次计算仍然是一项挑战。你不能简单的将数据丢进去,编写Python for循环,然后希望在合理的时间内处理数据。公众号在此之前的一篇文章专门介绍了一些方法,请点击查看:

高逼格使用Pandas加速代码,向for循环说拜拜!

尽管如此,即使加速, Pandas仍然只能在CPU上运行 。由大家的CPU通常有8个或更少的核,因此达到的加速是有限的。我们的数据集可能有多达数百万、数十亿甚至数万亿个,8核不足以解决这个问题。

幸运的是,随着GPU加速在机器学习领域的成功普及,将数据分析库应用到GPU上有了强大的推动力。 cuDF 库就是朝这个方向迈出的一步。

相关文章

1、30倍!使用Cython加速Python代码

2、 CuPy: 将Numpy提速700倍!

3、71803倍! 超强Pandas循环提速攻略

4、10个提高工作效率的Pandas小技巧

cuDF( https://github.com/rapidsai/cudf )是一个基于Python的GPU DataFrame库,用于处理数据,包括加载、连接、聚合和过滤数据。向GPU的转移允许大规模的加速,因为GPU比CPU拥有更多的内核。

cuDF的API是Pandas的一面镜 子,在大多数情况下可以直接替代P andas 。这使得数据科学家、分析师和工程师很容易将其集成到他们的工作中。

那么,你所需做的是把你的Pandas DataFrame 转换成cuDF。 cuDF支持Pandas大多数常见的DataFrame操作,因此无需太多学习成本你就可以加速许多常规的Pandas代码

我们首先安装库文件:

EVJFnev.png!web

下面是我们测试电脑的配置参数:

  • i7–8700k CPU

  • 1080 Ti GPU

  • 32 GB of DDR4 3000MHz RAM

  • CUDA 9.2

获得GPU加速

我们将加载一个包含随机数的Big数据集,并比较不同Pandas操作的速度与使用cuDF在GPU上执行相同操作的速度。

首先初始化Dataframes:一个用于Pandas,一个用于cuDF。 DataFrame有超过1亿个单元格!

import pandas as pd
import numpy as np
import cudf

pandas_df = pd.DataFrame({'a': np.random.randint(0, 100000000, size=100000000),
'b': np.random.randint(0, 100000000, size=100000000)})

cudf_df = cudf.DataFrame.from_pandas(pandas_df)

在我们的第一个测试中,让我计算一下 Pandas VS cuDF数据中a变量的平均值需要多长时间。 %timeit 命令允许我们在Jupyter计算Python命令的速度。

6ZbEJna.jpg!web

https://docs.python.org/3.6/library/timeit.html

# Timing Pandas
# Output: 82.2 ms per loop
%timeit pandas_df.a.mean()

# Timing cuDF
# Output: 5.12 ms per loop
%timeit cudf_df.a.mean()

平均运行时间显示在代码注释中。我们得到了将近 16倍 的加速!

现在,做一些更复杂的事情,比如做一个大合并。将Dataframe本身合并到数据 Dataframe 的b列上。

这里的合并是一个非常大的操作,因为Pandas将不得不寻找并匹配公共值,对于一个有1亿行的数据集来说,这是一个非常耗时的操作!GPU加速将使这变得容易,因为我们有更多的并行进程可以一起工作。

代码:

# Timing Pandas
# Output: 39.2 s per loop
%timeit pandas_df.merge(pandas_df, on='b')

# Timing cuDF
# Output: 2.76 s per loop
%timeit cudf_df.merge(cudf_df, on='b')

即使使用i7-8700k CPU, Pandas 完成合并平均也 需要39.2秒 。而 cuDF在GPU上只花了2.76秒。 14倍的加速!

快去试试吧!

—End—

量化投资与机器学习微信公众号,是业内垂直于 Quant MFE CST、AI 等专业的 流量化自媒体 。公众号拥有来自 公募、私募、券商、银行、海外 等众多圈内 18W+ 关注者。每日发布行业前沿研究成果和最新量化资讯。

你点的每个“在看”,都是对我们最大的鼓励


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK