自2012年AlexNet横空出世以来,GPU用于为矩阵运算进行加速开始在工业界和研究人员中获得了广泛关注。尤其是近来推出的各种深度学习框架,如mxnet、TensorFlow等,GPU加速更是不可或缺,成了提升运算速度的法宝。 然而,作为在Python中占据基础地位的numpy却始终没能提供这一功能,我们无法灵活地使用GPU为numpy的矩阵运算进行加速。不过,近来,作为mxnet的开发者,dmlc在mxnet的基础上,进一步开发了minpy,其为矩阵运算提供了GPU加速,而且可以做到与numpy近乎完美兼容;甚至有时,不需改动一行代码,只需在程序的开头将import numpy as np改为import minpy.numpy as np即可实现GPU加速,可谓十分省事儿方便。

首先需要注意的是,以下内容是基于Ubuntu进行描述的,如果是其他操作系统,可能需要作相应的修改。 其次,因为要用GPU加速运算,自然要确保你的计算机上有NVIDIA的GPU,而且安装好GPU的诸如CUDA和cudnn驱动。 minpy是基于mxnet进行运算的,所以它离不开mxnet。安装minpy之前,需要先安装mxnet。现在的深度学习框架,再也不像早期的caffe那样毫无人性了,安装都十分方便快捷。具体来说,只需首先执行如下命令进行编译:

sudo apt-get update

sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev

git clone –recursive -b engine https://github.com/apache/incubator-mxnet

cd mxnet;

cp make/config.mk .

echo “USE_CUDA=1” >>config.mk

echo “USE_CUDA_PATH=/usr/local/cuda” >>config.mk

echo “USE_CUDNN=1” >>config.mk

make -j$(nproc)

编译完mxnet之后,可以直接设置一下路径(假设mxnet在home目录~下):export PYTHONPATH=~/mxnet/python:$PYTHONPATH,即可使用。 当然,也可以在编译完之后,cd到mxnet目录的python目录下,运行sudo python setup.py install将mxnet安装到系统目录下,这跟使用pip安装其他包的方式一样,安装完,即可以直接使用了。 安装完mxnet之后,再安装minpy则是极其简单的事情了,只需sudo pip install minpy即可。

2. 使用minpy

相比安装时的简单方便来说,使用minpy可能更为简单。无非如前所述,在程序的最开头将import numpy as np替换为import minpy.numpy as np。 下面以一个例子来说明一下。

使用numpy:

import numpy as np

import numpy.random as random

import time

x= random.rand(1024, 1024)

y= random.rand(1024, 1024)

st = time.time()

for i in xrange(10):

z= np.dot(x, y)

print(‘time: {:.3f}.’.format(time.time()-st))

使用minpy:

import minpy.numpy as np

import minpy.numpy.random as random

import time

x= random.rand(1024, 1024)

y= random.rand(1024, 1024)

st = time.time()

for i in xrange(10):

z= np.dot(x, y)

z.asnumpy()

print(‘time: {:.3f}.’.format(time.time()-st))

两个例子在我的计算机(GPU为Titan X)的运行时间对比: 直接使用numpy,即CPU进行运算,时间为:0.350s左右; 使用minpy,即GPU进行加速,时间为:0.040s左右。 从上对比可以看到使用minpy时,GPU对矩阵运算的加速效果。

3. 不足之处和注意事项

虽然使用minpy.numpy取代numpy可以灵活地在有GPU时实现加速,无GPU时正常使用CPU进行计算,但它也有自己的不足之处,具体来说,包括以下几点:

1. 不支持inplace操作

比如对minpy的ndarray a:a.transpose()会报错;但可以使用a = a.transpose()来实现。 另,如a[1, 2] = 12这样的操作虽然可以运行,但作为深度学习的autograd对这种操作将不能正常运行。

2. 使用numpy或minpy要保持连续性

即最好不要同时在一个程序的一部分使用numpy,另一部分又使用minpy,这可能会导致你得到预期之外的结果。

3. minpy支持的功能仍然有限

因为numpy的庞杂,minpy暂时还不能支持numpy的所有子模块。

参考文献

python调用gpu运算_使用GPU加速numpy运算相关推荐

  1. python如何使用gpu_如何使用GPU加速numpy运算

    GPU用于为矩阵运算进行加速开始在工业界和研究人员中获得了广泛关注.尤其是近来推出的各种深度学习框架,如mxnet.TensorFlow等,GPU加速更是不可或缺,成了提升运算速度的法宝. 然而,作为 ...

  2. python计算密集型提速_利用Cython加速计算密集型python任务

    何为计算密集型任务 下面贴上网上找到的描述计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等,全靠CPU的运算能力.这种计算密集型任务虽然也可以用多任务完成 ...

  3. python调用dll函数_从Python调用DLL函数

    我想从Python调用DLL中的函数.但我有个错误:"Attribute Error function not found" 这是我的代码:import os import cty ...

  4. python调用摄像头转向_教你如何利用python调用摄像头

    这篇文章主要介绍了python调用摄像头的示例代码,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 一.打开摄像头 import cv2 import numpy as np def v ...

  5. python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法

    0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...

  6. python 有限域函数库_深入比特币之有限域运算

    这是深入比特币系列文章,主要是面向想深入理解比特币原理的开发者. 椭圆曲线加密(elliptic curve cryptography)是比特币交易工作的核心.比特币交易的签名验证离不开椭圆曲线加密. ...

  7. python调用手机摄像头_教你如何利用python调用摄像头

    这篇文章主要介绍了python调用摄像头的示例代码,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 一.打开摄像头 import cv2 import numpy as np def v ...

  8. python调用js接口_最全总结!聊聊 Python 调用 JS 的几种方式

    原标题:最全总结!聊聊 Python 调用 JS 的几种方式 作者 | 星安果 来源 | AirPython 1. 前言 日常 Web 端爬虫过程中,经常会遇到参数被加密的场景,因此,我们需要分析网页 ...

  9. python科学计算三剑客_机器学习三剑客之Numpy

    NumpyNumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好 ...

最新文章

  1. 拥有“上帝视角”是怎样的体验?高分多模卫星首批影像成果发布
  2. Windows 8.1 重复数据删除
  3. chrome无法登陆账号,显示操作超时的解决方案
  4. ubuntu 14.04使用devstack安装openstack mitaka版本
  5. sql 注入神器sqlmap 源码分析之调试sqlmap
  6. swift解析html数据类型,ios-Swift:以标签或textVi显示HTML数据
  7. 操作系统——文件基本概念
  8. Activity生命周期方法的调用顺序project与測试日志
  9. python 清华镜像pip install
  10. 高通:2 亿像素手机 2020 年诞生!
  11. 记录一次使用ghidra逆向分析斐讯K3官改固件web登录验证的经历
  12. 前端安全机制集合(不定期更新) -- 戴向天
  13. 利用python requests库在百度图库上下载图片
  14. 通过一个大型项目来学习分布式算法(3)
  15. mqtt 传文件断开连接的原因_MQTT系列 | MQTT的连接和断开
  16. Solr6适配自定义升级版mmseg4j
  17. PPT文件带有打开密码怎么解决
  18. 小米手机彻底关闭广告经验分享
  19. 2022年宜昌市高新技术企业申报奖励政策以及认定条件要求汇总!
  20. ssh登录windows

热门文章

  1. day02-SpringCloud
  2. 最简单版B站视频下载
  3. Code - Windows Overlapped
  4. Linphone的相关入门
  5. Android URLEncoder
  6. 大学所有专业都要学c语言吗,是不是大学里的所有专业都会学一些计算机基础内容...
  7. 解决H5中背景音乐无法自动播放问题
  8. DPA——差分能量分析(Differential Power Analysis)
  9. Atomikos 分布式事务的使用
  10. 微信号码检测助手技术完整版介绍