赞
踩
Numpy已经成为Python社区的礼物。它允许数据科学家,机器学习从业人员和统计学家以简单高效的方式处理矩阵格式的大量数据。
就速度而言,即使单独使用,Numpy也已经是Python的重要一步。每当您发现Python代码运行缓慢时,尤其是在看到大量for循环的情况下,将数据处理移至Numpy并使其向量化以最快的速度进行工作总是一个好主意!
即使这样,Numpy仍仅在CPU上运行。对于通常具有8个或更少内核的消费类CPU,并行处理量以及因此可以实现的加速量受到限制。
那就是我们的新朋友CuPy进来的地方!
什么是CuPy?
CuPy是一个库,可利用CUDA GPU库在Nvidia GPU上实现Numpy数组。通过该实现,由于GPU具有许多CUDA内核,因此可以实现卓越的并行速度。
CuPy的界面是Numpy的镜像,在大多数情况下,可以用作直接替换。只需将您的Numpy代码替换为兼容的CuPy代码,即可实现GPU加速。CuPy将支持Numpy进行的大多数数组操作,包括索引,广播,数组数学以及各种矩阵转换。
我的测试硬件配置
i7 6700K CPU
1080 Ti GPU
首先安装好cudatoolkit和cudnn,我的版本为cudatoolkit=10.0.130,cudnn=7.6.5,然后对应安装
pip install cupy-cuda100 -i https://pypi.tuna.tsinghua.edu.cn/simple
如果是cudatoolkit=10.1,则为
pip install cupy-cuda101 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成如下:
测试代码为:
import numpy as np
import cupy as cp
import time
# Numpy and CPU
x_cpu = np.ones((1000, 1000, 1000))
# CuPy and GPU
x_gpu = cp.ones((1000, 1000, 1000))
# Numpy and CPU
s = time.time()
x_cpu *= 5
x_cpu *= x_cpu
x_cpu += x_cpu
e = time.time()
print(e - s)
# CuPy and GPU
s = time.time()
x_gpu *= 5
x_gpu *= x_gpu
x_gpu += x_gpu
cp.cuda.Stream.null.synchronize()
e = time.time()
print(e - s)
结果为:
1.9570183753967285
0.14597082138061523
可以看出cupy处理的更快,但如果数据计算不大,数据不大,用numpy也慢不了多少,至于用cupy还是numpy可以两者多试试。
本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/weixin_45092662。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。