在跑完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安装手册