基于CUDA的Theano GPU加速tomcat环境变量配置配置 GPU没有反应.求解答

CNNdroid:在Android上利用GPU加速执行CNN(卷积神经网络)
CNNdroid:在Android上利用GPU加速执行CNN(卷积神经网络)
雷锋网按:本文原载于简书,作者ID为“小包July”。雷锋网已授权转载。原文地址:链接在下周二(2月28日)雷锋网硬创公开课栏目将会推出一期专门介绍 CNN 的公开课:《深度学习之经典卷积神经网络的技术浅析》(),欢迎大家报名!点击了解详情摘要智能设备和可穿戴设备都将受益于深度学习算法(比如CNN)的准确性和可扩展性。然而,性能和能耗等现实的问题使得在移动端设备上这类密集计算的算法变得非常受限。我们开发了CNNdroid这个GPU加速库,可以在Android设备上实现CNN网络的训练。通过实验,CNNdroid在移动设备上实现了60倍速的提升,以及130倍速的节能。CNNdroid这个库已经开源在Github上,可以从下载。Github项目页面关键词Deep Learning, Deep Convolutional Neural Network (CNN), Mobile GPU, Performance Optimization, Low Energy Con- sumption, Open Source Software, Android, RenderScript1.介绍智能手机、可穿戴设备、微型机器人、物联网等越来越多的移动平台都在深度学习的领域找到了相应的应用方向(如图1)。例如在移动设备上,语音识别和图像识别等许多App都受益于机器学习的本地算法。如果允许将模型等数据直接放在客户端,就可以避免和服务器的上下行数据交互而导致的网络延迟等体验的问题。CNN卷积网络在预测的精确性和可扩展性上都取得了很先进的成果,然而像此类密集计算型的网络结构必须依赖硬件级加速才可能在移动设备上得到广泛的应用。图1:CNN在移动设备上的应用许多基于深度学习的硬件加速平台都有相应的解决方案了,IBM也正在开发一种用于神经网络的CMOS的芯片,用于在移动设备和物联网设备上。与此同时,类似的解决方案依然处于早期的研发阶段,也并没有商用到现有的移动设备上。和基于硬件的加速平台不同的是,GPU已经大规模的商用到现在的移动设备上了,同时在软件层面的编码支持也做的非常完善了。利用GPU现成的并行计算能力去实现CNN神经网络在移动端设备上的计算加速是完全可行的。现存的GPU加速方案的深度学习CNN的开源库有很多种,都是基于服务器和桌面平台的[见附录的6, 7, 8, 9, 10, 11, 12].然而,由于平台架构的差异,简单的把这些开源库移植到移动端上,在某些Case下效果是欠佳的(见2.2节)。目前在移动端上,据我们所知,并没有相应的带有GPU加速的深度学习计算框架的开源库,这些库 [见附录的13, 14, 15, 16]仅仅能够利用移动设备的CPU多核计算能力,而这样局限性很大。如今,我们提供一个支持GPU加速的开源库,称为“CNNdroid”,可以在Android平台用来通过训练数据集的方式设计和优化CNN的网络。以下是CNNdroid的几个主要亮点。1. 支持几乎所有的CNN的Layer Type(Section 3.1)2. 兼容Caffe[6]、Torch[7]、Theano[8]这些开源框架在PC平台、服务器平台上已经训练好的模型(Section 3.2)3. 现有的Android App可以快速的加入这个库,无需额外的软件依赖(Section 3.3)4. 开发者可以指定最大的内存消耗(Section 3.4)5. CNN Layer的GPU和CPU加速均支持(Section 3.5)6. 自动的硬件条件检测(Section 3.6)7. 在移动设备上超过60倍的性能提升以及减少130倍的能耗(Section 4)背景知识以及相关介绍2.1移动设备的GPU和桌面平台的GPU的区别现代图形处理单元(GPU)不仅仅能做图形计算,也能够被用来做可编程的通用计算。台式机的GPU长期以来都是可编程的,近期移动设备上的GPU也开放了通用计算的硬件级支持。但受限于GPU的尺寸和功耗,移动GPU和桌面GPU设备还是有很大的差异。现代移动GPU的Shader Cores(SC)通常成为若干可编程并行计算单元。每个Shader Core都是由若干个ALU并行组成。比如,三星的Exynos 5433芯片是由ARM A53/A57 CPU和Mali T-760 GPU组成(见图2)。T-760 GPU中的每一个SC都具有两个VLIW格式的128位ALU。每个128位ALU能够执行SIMD操作,即并行的两个64位,四个32位或八个16位操作[17]。与桌面平台GPU相比,移动设备的并行ALU架构在并行线程的有效执行中更多地依赖于软件和编译器,而不是动态硬件调度器。图2: Exynos 5433 mobile processor with ARM A53 / A57 CPU and Mali T-760 GPU(SC: Shader Core, VLIW: Very Long Instruction Word, SIMD: Single Instruction Multiple Data更重要的是,在桌面GPU中广泛应用的线程块快速内存共享机制在移动GPU中并不可用,同时许多基于CUDA的桌面平台的Library在移动GPU上也不可以用。更不幸的是,在软件层面这两端的差异也是巨大的。比如Android提供的RenderScript[18]是一个用于并行计算的库,但是并发线程的机制并不可用。另外,并行线程和并行线程使用的内存中的数据部分必须是一对一的关系。2.2 CNNdroid 和桌面平台相关库的比较在服务器和桌面端,已经有很多现成的基于GPU加速的并行计算框架可用于CNN网络,诸如Caffe[6],Torch [7], Theano [8],Tensor- Flow [9], cuDNN [10], cuda-convnet [11],,and Velesnet [12],然而由于两端的硬件和软件的差异,这种加速和并行计算的方法并不能直接的被移植到移动设备上。比如说,Caffe[6]中的卷积操作被展开并转换为矩阵乘法,这些操作对内存的要求比较高,这在移动设备上是不现实的。再举一个例子,Theano [8]中的并行算法虽然与CNNdroid类似,但是在移动GPU中没有使用SIMD单元(详见Section 3.5)。更不幸的是,桌面的计算库利用桌面GPU和CUDA框架提供的线程管理功能,如快速共享内存和线程同步,这些在移动GPU和Android提供的RenderScript中均不可用。2.3 CNNdroid和移动平台相关库的比较在移动设备上,就目前所知的支持CNN深度学习的框架只有[13,14,15,16]。包括了Caffe Mobile[13]和Torch Mobile[14],均受限于多核的CPU计算能力,而只有CNNdroid支持CPU和GPU(详见Section 3.5)。另外,CNNdroid还兼容Caffe[6]、Torch[7]、和Theano[8]训练出来的CNN模型,方便快速将模型部署到移动设备上(详见Section 3.2)。开发环境上,不需要安装Android NDK,只需要安装Android SDK即可。<Ndroid库3.1 CNNLayer TypesCNNDroid库支持几乎大部分的CNN Layers,比如说卷积层,max/mean池化层,全链接层,ReLu(Rectified Linear Units)激活函数,LRN(Local Response Normalization)层,Softmax等。相关的描述和每一层的参数设置在开源库中的文档里有说明[1]。由于库的开源特性,其它的层也可以随时加入。3.2 模型的准备模型转换脚本:图3展示了如何将训练好的模型部署到移动端CNNdroid库提供了一系列的脚本,可以把不同框架训练的库转成CNNdroid格式的模型,目前已经支持Caffe[6],Torch[7],Theano[8],因此可以使用以上框架训练模型然后转为CNNdroid库支持的格式,最终运行在Android移动设备上。当然你也可以模仿这些脚本写出其它平台的转换脚本,CNNdroid使用MessagePack序列化和存储模型中不同层的参数。具体的细节可以参考开源库的说明文档[1]。图3:CNNdroid的模型部署流程NetFile:开发者需要准备一个名为NetFile.txt的文本文件,类似于Caffe的.prototxt配置文件,NetFile.txt文件用于配置已经训练好的模型的层次,比如说,CNN Layer的各层的顺序,卷积层中的Padding和Stride的值。图4是一个该文件的样例,更详细的细节可以参考说明文档[1]。NetFile中也可以配置如下参数,allocated_ram:用于指定本框架可以分配的最大内存上线(见Section 3.4),execution_mode:用于指定是采用并行模式还是串行模式(见Section 3.5),auto_tuning:用于指定auto-tuning是否默认开启(见Section 3.6)。图4:NetFile示例,如何配置AlexNet[20]的三层网络结构, 以及allocated_ram, execution_mode,auto_tuning参数的配置3.3模型的执行一旦将训练好的模型和相应的NetFile文件上传到了移动设备后(图3),这个模型可以被所在的Android App轻易的调用(图5),具体的有如下几个步骤:第一步,在自己的App中依赖CNNdroid库,CNNdroid库只依赖Android SDK,而不需要安装Android NDK的,也就是说,不依赖其他的第三方库。第二步,构造RenderScript和CNNdroid对象(图5所示的Steps 2和3)。CNNdroid的构造函数需要提供NetFile文件作为输入,并会自动的创建相应的网络层次。最后,compute函数负责利用训练好的模型,计算传入的单个图像或者批量图像并返回结果。图5: 使用CNNdroid库的几个关键调用步骤,详细的使用方法可以参见开源库中的说明文档 [1].3.4 内存分配我们将已经训练好的CNN模型,上传到手机的SD卡上,这些模型中包含了矩阵式的各层参数。在执行每一层前,在compute函数里(图5,step5),相应层的矩阵参数被自动的从SD卡上加载内存里,这会导致大量的内存开销。为了减少这种内存开销,CNNdroid采用的方法是:保持一部分的层长期驻留在内存中,而其他的层每次都会被创建和销毁。该选择过程开发者无需关心,在CNNdroid构造函数中自动完成(图5,step3)。选择器从最大的层开始,让尽量多的层进入选择器,直到达到NetFile中allocated_ram参数指定的内存上限。注意:allocated_ram参数不宜设置的过大,比如说,Android 5.0在系统层就会限制每个App的内存上限为512MB。3.5 加速的方法在CNNdroid中,不同的层有不同的加速方法。比如数据并行的卷积层和需要大量密集计算的全连接层,就需要用到RenderScript的框架来实现移动端的GPU加速。这两层的大部分计算可以表示为点积。具体地来说,在卷积层中kernels与input frames进行卷积;而在全连接层中,计算可以表示为矩阵和向量的乘法。在移动设备上使用GPU的SIMD单元可以高效的进行点积的计算。因此,我们分离了大量的向量,并且使用基于RenderScript框架的预定义点积函数来完成运算。也就是说,我们在软件层面体现了这种计算的并行性,而不像是基于CUDA的桌面计算框架库那样把这类问题交给GPU的硬件调度程序。相对于卷积层和全连接层,其它层的密集型计算相对较少。因此,它们通过多线程并发在多核CPU上进行加速。比较特殊的是,由于ReLU层通常出现在卷积层或全连接层之后,所以把它嵌入到之前的层中,可以在将多个图像传输时提高CNNdroid的性能。除了上述并行计算的实现之外,CNNdroid还包括所有层的单线程顺序执行的实现。可以通过配置NetFile中的execution_mode参数,指定执行将是顺序模式还是并行模式(图4)。3.6 自动调整为了能够在移动设备上达到最好的性能,CNNdroid框架的GPU并行加速算法支持在每个GPU线程上执行自动配额,比如说调配该GPU线程的工作量以及SIMD ALUs的工作量。配额的参数调整决定了并行的粒度。如果在NetFile(图4)中打开了auto-tuning,那么auto-tuner就会在Android App首次启动时执行。auto-tuner会记录该移动设备上多个预定义的情景下CNN模型的运行时长,用于调整最佳的配额参数。因此,首次启动App需要花费较长的时间。为了公平性以及更清晰的表述我们的实验,在第4节中,我们将关掉auto-tuning。4.实验评估我们在三星的Galaxy Note 4和HTC One M9进行了实验。采用的模型是几个标准的CNN网络:LeNet network for MNIST dataset [21],Alex Krizhevsky’s network for CIFAR-10 (Alex’s CIFAR-10) [22], Alex Krizhevsky’s network for ImageNet 2012 dataset (AlexNet) [20].基准CNN的层设置如图6所示。当移植到CNNdroid格式时,我们还统计了文件大小和内存占用。具体的结果如图7所示。我们的实验环境是将手机充满电,同时进入飞行模式并且将屏幕亮度调为最低。以下的实验中,并没有每次都从SD卡加载配置和模型,因为在第一次运行时候就加载到内存中了。每次我们都会将16张图片作为输入传给CNNdroid App,接下来测量输出的准确性以及运行耗时和耗电量。图6: 三种标准的CNN网络的层次图7: 在CNNdroid格式下使用三种标准CNN网络的文件大小以及内存消耗4.1准确度为了测量CNNdroid的准确度,我们同时使用了CNNdroid和Caffe作对比实验。结果显示两者的结果方差是10的-12次方,也就意味着CNNdroid的准确度和Caffe几乎一样。4.2性能图8显示了仅使用CPU的线性运行CNN的运行耗时以及使用GPU加速的运行耗时和加快的倍速。报告显示的值是十次运行结果的平均值。图8:(a)是CNN运行的平均耗时和加速的速率,(b)是整个CNN中最耗时的卷积层的耗时和加速速率4.3能耗我们使用“Qualcomm Trepn Profiler”应用程序[25]测量HTC One M9手机基于AlexNet网络结构的每一幅图像的功耗和能耗。GPU加速执行时,消耗约523 mW功率和0.4 J能量,而仅仅使用CPU执行时消耗2338 mW功率和51.6 J能量。 因此,GPU加速执行消耗的电池消耗减少51.6÷0.4 = 129X。值得注意的是,我们的测量中有大约20%的波动。5.结论我们介绍了CNNdroid:一个在Android平台上基于GPU加速CNN网络的开源库。经过实验评估证明该库可以提升60倍速,以及130倍的能耗节省。相关的代码以及说明文档都已经开源并发布在Github上[1]。6. 相关引用[1] CNNdroid open source GPU-accelerated library./ENCP/CNNdroid[2] Inchul Song, Hyun-Jun Kim, and Paul Barom Jeon. Deep learning for real-time robust facial expression recognition on a smartphone. In IEEE International Conference on Consumer Electronics, pages 564–567, Jan 2014.[3] Yu-Hsin Chen, Tushar Krishna, Joel Emer, and Vivienne Sze. 14.5 eyeriss: an energy-e cient reconfigurable accelerator for deep convolutional neural networks. In IEEE International Solid-State Circuits Conference, pages 262–263, Jan 2016.[4] Mohammad Motamedi, Philipp Gysel, Venkatesh Akella, and Soheil Ghiasi. Design space exploration of fpga-based deep convolutional neural networks. In Asia and South Pacific Design Automation Conference, pages 575–580, Jan 2016.[5] Paul A Merolla, John V Arthur, Rodrigo Alvarez-Icaza, Andrew S Cassidy, Jun Sawada, Filipp Akopyan, Bryan L Jackson, Nabil Imam, Chen Guo, Yutaka Nakamura, Bernard Brezzo, Ivan Vo, Steven K Esser, Rathinakumar Appuswamy, Brian Taba, Arnon Amir, Myron D Flickner, William P Risk, Rajit Manohar, and Dharmendra S Modha. A million spiking-neuron integrated circuit with a scalable communication network and interface. Science, 345(–673, 2014.[6] Yangqing Jia, Evan Shelhamer, Jeff Donahue, Sergey Karayev, Jonathan Long, Ross Girshick, Sergio Guadarrama, and Trevor Darrell. Caffe: Convolutional architecture for fast feature embedding. arXiv preprint arXiv:, 2014.[7] Torch. . Accessed .http://torch.ch/[8] James Bergstra, Olivier Breuleux, Fr ed eric Bastien,Pascal Lamblin, Razvan Pascanu, Guillaume Desjardins, Joseph Turian, David Warde-Farley, and Yoshua Bengio. Theano: a CPU and GPU math expression compiler. In Proceedings of the Python for Scientific Computing Conference, 2010.[9] TensorFlow. . Accessed .https://www.tensorflow.org[10] Nvidia cuDNN. . Accessed ./cudnn[11] cuda-convent. . Accessed ./p/cuda-convnet/[12] Velesnet. . Accessed .https://velesnet.ml/[13] Caffe Android Library.. Accessed ./sh1r0/caffe-android-lib[14] Torch-7 for Android.. Accessed ./soumith/torch-android[15] A convolutional neural network for the Androidphone.awesome-cnn-android-python. Accessed ./radiodee1/[16] Facial attractiveness prediction on Android. . Accessed ./eldog/fmobile[17] ARM. Mali-T600 Series GPU OpenCL, Version 1.1.0,Developer Guide. Accessed .[18] Android RenderScript Developers Guide.renderscript/compute.html. Accessed ./guide/topics/[19] Messagepack. http://msgpack.org/index.html.[20] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E.Hinton. Imagenet classification with deep convolutional neural networks. In Advances in Neural Information Processing Systems, 2012.[21] Y. Lecun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11):, Nov 1998.[22] Alex Krizhevsky. Learning multiple layers of features from tiny images. Technical report, University of Toronto, 2009.[23] Trepn power profiler. ./software/trepn-power-profiler本文编译自:CNNdroid: GPU-Accelerated Execution of Trained Deep Convolutional Neural Networks on Android雷锋网相关阅读:图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法深度学习全网最全学习资料汇总之模型介绍篇一文读懂 CNN、DNN、RNN 内部网络结构区别
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 雷锋网——关注智能与未来!
作者最新文章Win7配置CUDA并搭建基于Theano框架的GPU加速环境
& & & &&今天终于买回来了一块算是较好的显卡,渴望已久的GPU加速终于实现了,于是进行了下面的一系列配置。
一、&& 硬件环境信息
& &&& &&台式电脑:ThinkCentre M8400t(i7 3770/32GB/1TB),CPU 3.4GH 四核8线程
& &&& &&显卡:NVIDIA GEFORCE GTX 970
注意:机器原来的显卡是AMD Radeon HD 7450,不支持CUDA加速,所以这次花了点小血本买了一块NVIDIA的显卡(如图A),由于新购的NVIDIA GEFORCE GTX 970显卡功率有W,需要单独供电,而原来的主机电源功率比较弱,所以还一并换了一个的Antec 700W超静音主机电源(如图B)。拿到电源与显卡后,突然发现ThinkCentre
M8400t这款电脑主板也是比较鸡肋,居然是Intel Q77(这款主板的电源线是14P的,如图D),而新电源只支持20P或24P(如图C),顿时石化了。跑遍了中关村电子市场都没有买到20P或24P转14P的转接线,最后在万能的淘宝上面花了15?买到了一根转接线,为主机成功装上了电源和显卡。
图A NVIDIA GEFORCE GTX 970显卡
图B Antec 700W超静音主机电源
图C Antec电源线20P或24P
图D 装好后的整机内部
二、&& 软件环境信息
& &&& &&【1】操作系统:Windows 7 (64位)Professional旗舰版。
& &&& &&【2】Python环境及相关依赖包:Anaconda-1.9.2-Windows-x86_64。
& &&& &&【3】Theano包安装:直接利用pipinstall theano命令即可完成安装。
& &&& &&【4】检查电脑显卡是否支持GPU加速。如果显卡不支持GPU加速,到此就没有必要进行下面两步配置操作了。
& &&& &&【5】C&#43;&#43;环境安装:直接安装微软的VisualStudio环境。
& &&& &&【6】并行计算架构安装:直接安装CUDA。
三、&& 详细配置流程
& &&& &&GPU加速环境的配置流程可以简单总结为:配置开始→操作系统安装→Python环境及相关依赖包→Theano包安装→检查显卡是否支持GPU加速→C&#43;&#43;环境安装→并行计算架构安装→配置结束,总共可计6个主要步骤。下面就对每个步骤进行详细描述。
【1】&&&& 操作系统安装
& &&& &&一般情况下大家都已经安装了操作系统,这一步基本都不用多大麻烦,这里的配置过程描述均是基于Windows操作系统。但须得注意自己的操作系统是32位还是64位,以下【2】—【6】步骤的配置过程所对应的软件最好是与操作系统的位数保持一致,对于没有保持一致的配置过程没有亲自尝试过。若有同学能够配置成功可以告诉一下。以下的配置过程均是采用的Windows7(64位)Professional旗舰版操作系统。
【2】&&&&&Python环境及相关依赖包安装
& &&& &&目前Python的版本主要分为Python 2.x和Python 3.x,至于这两种版本的区别在此处就不用过多介绍,可以找度娘。
& &&& &&由于Theano采用的Pyhton 2.x进行编写的,所以在这里安装Python环境的时候建议安装Python2.x,至于具体的何种Python 2.x,建议安装较高的2.x即可。除了安装最基本的Python环境,还应该安装一些其他的依赖包以供Theano使用。在安装Python环境极其相关依赖包的过程中,如果一个一个的安装其他依赖包,这样显得较为麻烦,这里建议安装一个Python集成开发包,Python集成开发包种类较多,我这里安装的Anaconda(版本为Anaconda-1.9.2-Windows-x86_64,下载地址:,该地址包含了所有的Anaconda历史版本),用起来没有任何问题,对Theano的支持很好。在安装Anaconda时建议直接安装在盘的根目录下,如D:\Anaconda。
& &&& &&在安装完Python后,打开控制台,输入&&python命令,即可看到所安装Python版本及其相关信息,这表明Python已经正确安装。如果没有看到任何信息,怎添加环境变量path = D:\AD:\Anaconda\Scripts即可。
& &&& &&注意:本人第一次安装了个Anaconda-2.2.0(当时最新版),发现没有MinGW,然后自己另外单独安装了MinGW,但是配置了很久都没有配置成功(如有配置成功的可以告诉我),于是换成了Anaconda-1.9.2版本(自带MinGW)。因为theano的运行需要gcc,所以才会去折腾安装一个MinGW,如果在Linux平台上就不用折腾这一番了。有了Anaconda,其里面的Python包已经足够支持theano的运行了。
【3】&&&&&深度学习框架Theano安装
& &&& &&在确保第【2】步中Python环境已经正确配置后就可以安装Theano了。由于Anaconda中的Python依赖包集中已经有了pip工具包,因此在安装Theano时,只需保证网络畅通的前提下,打开控制台,然后输入&&pipinstall
theano命令并回车,然后稍等片刻即可自动安装上最新版的Theano深度学习框架。这时可到D:\Anaconda\Lib\site-packages目录下查看是否已经有theano和Theano-0.7.0-py2.7.egg-info两个文件夹,若有则表明已经安装成功。一般情况下,这一步不会出错,很容易操作。
& &&& &&安装结束后,检查当前用户目录下是否有.theanorc.txt文件(这是theano的一些初始设置信息文件,如不知道当前用户目录位置,可以打开控制台窗口,该窗口里面第一个命令提示行所示的目录位置就是当前用户目录位置,如图1所示中的C:\Users\Mag即为当前用户目录),如果没有可以手动创建一个,然后在文件里面写入下面内容:
& &&& &&[global]
& &&& &&openmp = False
& &&& &&[blas]
& &&& &&ldflags =
& &&& &&[gcc]
& &&& &&cxxflags = -IC:\MinGW\include
& &&& &&输入完毕后保存.theanorc.txt文件即可。
& &&& &&现在检查theano是否配置成功,只需打开控制台,然后输入:python回车,再输入import theano回车,若没有其他错误信息输出这表明theano配置正确。如下图1所示。
图1 theano配置正确运行截图
& &&& &&注意:我这里由于已经配置好了CUDA,所以输入import theano回车后有信息输出,在没有配置CUDA之前,输入import theano回车后是没有信息输出的。
至此,大家就可以利用theano框架来编写深度学习的代码,在CPU上面运行了。
【4】&&&&&检查电脑显卡是否支持GPU加速
& &&& &&这一步至关重要,在确定了电脑显卡支持GPU加速后,再进行后面【5】【6】步操作,不然费时费力而且还没有结果。就目前而言,&#20284;乎只有NVIDIA的GF8级别以上的显卡才能支持physx物理加速(即GPU加速,这里所说的GPU加速均默认是CUDA编程),ATI的显卡不支持。
& &&& &&如何确认自己电脑的GPU是否支持CUDA编程?在设备管理器中找到显示适配器(Display adapters),找到自己电脑的显卡型号,然后到所示)中进行比对,若在列表中则支持CUDA编程,否则就利用Theano框架所编写深度网络就只能在CPU上面运行了。
图2 支持CUDA编程的显卡型号
【5】&&&&&C&#43;&#43;环境安装
& &&& &&在电脑显卡支持GPU加速(即CUDA编程)后,就可以进行【5】和【6】步操作了。
& &&& &&C&#43;&#43;环境的安装,建议直接安装一套微软的Visual Studio环境,建议Visual Studio 2010或更高版本。本人安装Visual Studio 2010与Microsoft Visual Studio 2012两个版本,均能够支持CUDA编程。不过MicrosoftVisual Studio 2012,这一版本的VS体积太过于庞大了,完全安装后有10G&#43;。如果大家不从事其他语言开发,可以考虑在安装VS的时候只选择C&#43;&#43;,其他语言如VB,C#,F#都可以不用安装(已试过,没有任何问题,因为CUDA只需C&#43;&#43;的支持),这样就能够减少硬盘的使用量。至于VS的具体安装过程这里就不再论述了,有问题找度娘。
【6】&&&&&并行计算架构CUDA的安装
& &&& &&在安装CUDA之前最好检查一下自己电脑的显卡驱动版本,版本过老的话,需要更新。有时候安装完毕CUDA之后,运行CUDA所提供的案例程序中的deviceQuery会出错,请优先考虑显卡驱动的问题。这里建议安装NIVDIA官方发布的针对自己显卡型号的驱动。安装CUDA的详细步骤如下:
& &&& &&(1)&&&&&下载NVIDIA& CUDA toolkit,SDK等软件包,由于CUDA 5.0以上版本已经将ToolKit和SDK等整合在一起了,因此只需下载一个安装文件即可。在显卡型号允许的条件下,建议下载CUDA 5.0以上版本,这样比较省事。本人安装的是CUDA
6.5版本。CUDA各版本下载地址:。注意,下载的时候有些版本需要区分desktop(台式机)和
notebook(笔记本)。
& &&& &&(2)&&&&&&下载好了后就可以直接安装了,CUDA的默认安装目录为:C:\Program Files\NVIDIA GPU Computing Toolkit\ 这里推荐使用默认的安装路径,不需更改。安装过程和普通软件没有什么区别。在安装结束时将会出现一个界面(如图3),这表明已经成功安装,从图3可以看出&#20284;乎CUDA 6.5至少都需要Visual Studio 2010的C&#43;&#43;环境。
图3 CUDA6.5成功安装结束界面
& &&& &&(3)&&&&&检查是否安装正确。在安装结束后,你会发现在系统环境里面新添加了两个环境变量:CUDA_PATH_V5_0和CUDA_PATH。
现在,打开cmd控制台命令行,输入命令nvcc –V回车(注意是大写V哟)就可以参考版本信息,如果安装正确则出现图4所示的结果。
图4 nvcc –V命令执行结果
& &&& &&在测试CUDA是否能够正确运行时,进入到下面所述目录下,双击运行其目录下的.exe程序即可。不同的版本估计运行案例的路径有所差异,不过可以通过搜索关键字“CUDASamples”或者“particles.exe”就能够找到案例所在目录。
& &&& &&&1& WindowsXP平台:
& &&& &&& &&& &&C:\Documents and Settings\All Users\ApplicationData\NVIDIA Corporation\CUDASamples\v5.0\C\bin\win32\Release
& &&& &&&2& WindowsVista, Windows 7, Windows 8, Windows Server 2003, and Windows Server2008平台:
& &&& &&& &&& &&C:\Program Files\NVIDIACorporation\Installer2\CUDASamples_6.5\bin\win64\Release
& &&& &&如果CUDA安装正确,则所有案例都是能够运行的。在本人电脑上,大部分案例都是一闪而过,只有particles.exe这个案例才能看得到绚丽的动画,如图5所示。
图5 particles.exe案例运行结果
& &&& &&(4)&&&&&如果案例运行正确,可以考虑手动配置环境变量。在系统环境变量中新建如下项(针对win32平台上的CUDA 5.0):
& &&& &&CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDASamples\v5.0\common
& &&& &&CUDA_LIB_PATH = %CUDA_PATH%\lib\Win32
& &&& &&CUDA_BIN_PATH = %CUDA_PATH%\bin
& &&& &&CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\Win32
& &&& &&CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\Win32
& &&& &&然后在系统环境变量Path 后添加内容:;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%
& &&& &&当然不同版本的CUDA,估计路径有所差异,上述配置信息是win32版本的CUDA,仅仅作为参考。本人在配置过程中,没有进行这一步手动配置环境变量。
& &&& &&(5)&&&&&CUDA配置结束。若以上案例都运行正常,说明CUDA安装成功。现在就可以利用Theano框架编写深度学习代码,并将代码进行GPU加速了。
【7】&&&& 测试Theano框架是否可以利用所安装的CUDA6.5进行GPU加速
& &&& &&在前面第【2】步中,已经通过安装Anaconda将python环境装好,其中Anaconda本身自带了一个称作Spyder的图形界面IDE(如图6所示)。在进行Theano GPU加速测试之前,还得需要配置一下.theanorc.txt文件里面的信息,红色字体信息是为了实现GPU加速而增加的配置信息,如下:
& & & &&[global]
& & & &&openmp = False
& & & &&device = gpu
& & & &&floatX = float32
& & & &&allow_input_downcast=True
& & & &&[blas]
& & & &&ldflags =
& & & &&[gcc]
& & & &&cxxflags = -IC:\MinGW\include
& & & &&[nvcc]
& & & &&flags = -LC:\Anaconda\libs& &&#此处一定要和你安装的Python的路径保持一致
& & & &&compiler_bindir = D:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin &&#此处一定要和你安装的VS的路径保持一致
& & & &&fastmath = True
& & & &&flags =& -arch=sm_30& &&#这里最初设置为sm_52报错,后设为30或50都没问题,不清楚这是干啥的,有谁知道了可以告诉我
& &&& &&现在可以启动Spyder,输入表1中的Theano GPU加速测试案例代码并运行,将会出现图7所示的运行结果,其中有一条“Used the gpu”信息输出,表明Theano GPU加速测试成功。
图6 Anaconda自带Python图形界面IDE
fromtheanoimport function, config, shared, sandbox
importtheano.tensorasT
importnumpy
importtime
vlen =<span style="color:#*<span style="color:#*<span style="color:#8&#
10 x #cores x # threads per core
iters =<span style="color:#00
rng = numpy.random.RandomState(<span style="color:#)
x = shared(numpy.asarray(rng.rand(vlen),
config.floatX))
f = function([], T.exp(x))
print f.maker.fgraph.toposort()
t0 = time.time()
for iinxrange(iters):
&&& r= f()
t1 = time.time()
print'Looping%d times took'%
iters, t1- t0,'seconds'
print'Result is', r
if numpy.any([isinstance(x.op,
T.Elemwise)for xin
f.maker.fgraph.toposort()]):
&&& print'Used the cpu'
&&& print'Used the gpu'
表1 Theano GPU加速测试代码
图7 Spyder IDE
【8】&&&&&到此,基于CUDA的Theano GPU加速环境已经配置成功。
四、&&&测试GPU加速与没有GPU加速时的算法执行速度
& &&& &&利用Theano框架构建一个深度网络,其层次结构为:Layers = [784, , 500, 10];训练配置:Input_Layer =784,Out_Put = 10,Batch_Size = 500,Epoch = 150,网络每一层详细训练速度对比如表2所示。
无GPU加速(单位:分钟)
有GPU加速(单位:分钟)
加速比(单位:倍)
预训练(Pre-training)
全局调优(Finetunning)
[784, , 500, 10]
表2 GPU加速对比
五、&&&总结
& &&& &&GPU加速果然名不虚传,终于找到提升算法速度的又一大神器啊….
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?}

我要回帖

更多关于 猫咪换了新环境的反应 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信