<返回更多

快来试试加速numpy的矩阵运算

2020-08-04    
加入收藏

numpyPython中常用的一个矩阵运算库,而且numpy的底层都是采用c实现的,所以执行效率和速度也是很快的,但numpy是利用CPU来进行矩阵运算的,如果遇到大数据的矩阵运算,你会发现numpy真的很慢。那有没有什么办法来加速呢?想到大矩阵的运算肯定会想多使用GPU来计算,就让我们来看看numpy的GPU版本cupy

快来试试加速numpy的矩阵运算

 

环境要求

操作系统

官方推荐安装环境是在linux操作系统下安装:

  • Ubuntu 16.04 / 18.04 LTS (64-bit)
  • centos 7 (64-bit)
    不确保能够在windowsmac OS下正常运行

其他

  • python版本:3.5.1+, 3.6.0+, 3.7.0+ 和 3.8.0+
  • cuda版本:8.0, 9.0, 9.1, 9.2, 10.0, 10.1 and 10.2
  • cudnn版本:v5, v5.1, v6, v7, v7.1, v7.2, v7.3, v7.4 和v7.5

安装cupy

  • 源码安装

pip install cupy

  • 从git安装最新版本

git clone https://github.com/cupy/cupy.git

cd cupy

pip install .

  • 直接通过whl文件安装

在安装之前需要先确定cuda的版本,以安装对应的版本,否则在后面使用cupy的是会出现一些错误

#查看cuda的版本

nvcc -V

#输出信息

#nvcc: NVIDIA (R) Cuda compiler driver

#Copyright (c) 2005-2017 NVIDIA Corporation

#Built on Fri_Sep__1_21:08:03_CDT_2017

#Cuda compilation tools, release 9.0, V9.0.176

#通过上面的信息,可以看出cuda的版本是9.0

#安装cuda为9.0版本的cupy

pip install cupy-cuda90

速度对比

下面我们通过一些例子来对比一下numpycupy的执行效率,cupy的函数接口和numpy基本上都是一样的

  • 矩阵点积运算

我们定义一个函数来统计numpy和cupy的矩阵运算时间

快来试试加速numpy的矩阵运算

 

对比100000×1024矩阵和1024×1矩阵的点积运算的消耗时间,计算10次统计最终的平均时间

num = 100000

test_dot_time(True,num)

#a time consume 0.18 sec

test_dot_time(False,num)

#a time consume 5.48 sec

通过对比可以发现,cupy要比numpy节省30倍的时间消耗,这里只是展示了一种运算,如果你的矩阵运算越多,矩阵越大使用cupy运算节省的时间会更加明显。

那么是不是以后我们可以使用cupy来替代numpy了呢?这也不一定,我们来看看当num较小时的情况,当num为10的时候会怎么样呢?

num = 10

test_dot_time(True,num,times=10)

# a time consume 0.20425036 sec

test_dot_time(False,num,times=10)

#a time consume 0.00120769 sec

这时候居然numpy要比cupy更快?这是为什么呢?

一方面是因为CPU<->GPU这里有一个数据传输,而且CPU中还有一个cache可以用来计算,这个计算速度要比GPU快,不过这个大小有限大概几十M。这就是为什么小数据CPU要比GPU快的原因。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>