Numpy使用GPU加速

在跑完mnist的KNN分类后,跑的挺慢,突然想有没有GPU的numpy的呢,上网查了查,才知道原生的numpy没有实现(不应该啊。。。),结构查到了minpy,花了10分钟左右配好了环境,写个日志记录一下。

安装minpy:

我的机器是Ubuntu 16.04的,minpy需要cuda,cudnn,由于这俩我早就装好了,就不说了。 minpy是基于mxnet进行运算的,所以需要安装mxnet,官方链接添加链接描述 反正我用的最简单的方式,没从git源码安装

sudo pip install mxnet-cu80  // 我cuda8.0的

(必须和cuda对应,第一次装了9.0的了,就报错了) 然后再

sudo pip install minpy

就OK了,是不是很easy(当然我们的easy是建立在大牛的肩膀上,感觉开发者们).

使用:

import  minpy.numpy as np

我使用我KNN中的代码测试,平均CPU:0.8s,GPU:0.4s,只提速了0.4s左右(因为涉及的矩阵运算少)。

如下,使用高维矩阵点乘连乘做测试

import numpy as np
import numpy.random as random
#import minpy.numpy as np
#import minpy.numpy.random as random
import time

a = random.rand(3000,2000)
b = random.rand(2000,4000)
c = random.rand(4000,3000)
begin = time.time()
for i in range(100):
    np.dot(np.dot(a,b),c)
end = time.time()
print(end-begin)

提升4倍左右,一个200s,一个50s左右。 (同时发现一个问题打印时间和GPU调用应该不是同线程的,因为没得到结果时间就打印出来了,手动计的时) 参考:minpy安装手册