CPU靠边站!使用cuDF在GPU加速Pandas
标星★公众号
爱你们
♥
作者: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仍然只能在CPU上运行
。由大家的CPU通常有8个或更少的核,因此达到的加速是有限的。我们的数据集可能有多达数百万、数十亿甚至数万亿个,8核不足以解决这个问题。
幸运的是,随着GPU加速在机器学习领域的成功普及,将数据分析库应用到GPU上有了强大的推动力。
cuDF
库就是朝这个方向迈出的一步。
相关文章
3、71803倍!
超强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代码
。
我们首先安装库文件:
下面是我们测试电脑的配置参数:
- 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命令的速度。
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+
关注者。每日发布行业前沿研究成果和最新量化资讯。
你点的每个“在看”,都是对我们最大的鼓励