怎么让theano gpu配置利用多个GPU

&>&&>&&>&&>&Ubuntu14.04-DeepLearning和Theano下配置GPU简便方法
Ubuntu14.04-DeepLearning和Theano下配置GPU简便方法
上传大小:117KB
经过查看Theano and DeepLearning文档之后,总结出了使用Ubuntu14.04系统来配置GPU的简便方法
综合评分:5(1位用户评分)
所需积分:1
下载次数:67
审核通过送C币
创建者:nigelyq
创建者:nana_han
创建者:doomlord
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
Ubuntu14.04-DeepLearning和Theano下配置GPU简便方法
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
xjtlusocpan
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:Reference.
说明一下:我的配置环境是Windows 7,显卡类型NVIDIA GeForce GTX 960M,Python版本为64位的2.7.11, CUDA版本为7.5.1,Visual Studio版本为VS2012
天才第一步:检查一下你的电脑是否有NVIDIA系列的显卡,没有的话就别往下看了。深度学习的GPU加速只支持NVIDIA系列的显卡。
检查步骤:右键计算机-属性-设备管理器(左上角)-显示适配器
用GPU的理由很简单,就是快,特别是深度学习的实验,用CPU的话一天两天的在那儿训练,根本没办法愉快地调参,用GPU的话可能就几个小时完事儿了。
1.1 下载安装Theano
参考这个:
简单来说就是先把Python(我用的是)安装好,然后在Anaconda Prompt命令行中输入pip install theano,回车,接着输命令conda install
mingw libpython,回车。然后。。
按照1.2.3做,Theano就安装好喽
1.2 下载CUDA
从&下载驱动、工具包、软件开发包,按顺序安装。最后一项的CUDA安装请看1.3 CUDA安装!!!
按顺序安装!
1.3 CUDA安装
1.3.1 cuda的安装文件
  直接双击exe文件,弹出后,首先会监测一下你的运行环境,如果找不到Nividia对应的显卡设备,他会提示你是否要继续安装。这里面nvidia的显卡,最起码也是8800以上的,要不是无法编写CUDA的。千万不要电脑上面是intel或者AMD的显卡,却要编写cuda,除非你有钱买一个cuda-x86这个编译器。
1.3.2 弹出的对话框直接OK就行,这个是CUDA的一些安装文件,无所谓的
1.3.3 他会监测你的电脑是否支持cuda的搭建,等待就行
1.3.4 系统检查:这儿会有可能报错哦
遇到报错的话请跳转到1.3.彩蛋,那儿有提供解决方法。
1.3.5 选择同意并继续
1.3.6 推荐先选择自定义安装
最主要的是cuda document\cuda Toolkit \cuda samples(SDK),Nsight\图形驱动程序,3D如果需要的话安装,不安装也无所谓。这里主要就是能看见都有什么,免得漏掉了,博主当初就因为选了精简安装,没安装上SDK。
1.3.7 安装的位置,推荐自己建三个好找的文件夹,不用他默认的路径,免得稍后配置环境变量麻烦。
默认的乱七八糟的安装位置,不要它们
这是我设的地址,反正就是简洁就好了
1.3.8 下一步安装就行了。至此,cuda的安装就搞定了
报错:NVIDIA installer cannot continue.
NVIDIA Installer cannot continue.
不要慌,这是个大问题。先去把你的NVIDIA显卡驱动更新一下,确保是最新的。
方法是:去设备管理器,找到显示适配器的NVIDIA那儿,右键,选择更新驱动程序软件
然后按照这个方法:,就可以解决这个错误了。
2. 配置文件
打开cmd命令行界面,输入nvcc -V,回车,如果出来这个版本号,说明前面的步骤成功啦。
然后可以看到cmd的默认地址
Paste_Image.png
我的是C:\Users\Administrator,去电脑上找到这个位置,新建一个txt文件,将它命名为“.theanorc.txt”,在里面要写一点代码,我目前写的是:
cxxflags = -IC:\MinGW\include
flags=-LC:\Users\Administrator\Anaconda2\libs
compiler_bindir=E:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
device=gpu
floatX=float32
解释一下:根据你的自身情况需要修改的是
cxxflags这句,“-I”保留,后面是MinGW\include的系统位置,对了,如果你没有装MinGW,那,,就赶紧装一个呀,下载地址:
摁这个下载,然后一直下一步下一步就好了
你会发现下载完的C:/MinGW/里面并没有include这个文件,那么就打开MinGW的安装管理界面,如下图
选中这里所有的框
将右侧所有的小方块全部选中(右击-&mark for install),然后选择Installation菜单的apple changes,等待下载安装完成即可,include文件就出来啦。
flags这句,路径指向你的anaconda的libs地址,当然如果你装的是python,那就指向python的libs地址。compiler_bindir这句,指向VS的bin,这儿不多说了。
我大概觉得这是在配置吧,反正当python导入theano的时候回去运行这个txt文件。你可以去Anaconda Prompt界面输入python,回车,import theano,回车,看看结果,应该会有显示用到了GPU。
然而并没有这么简单,我这儿开始报错了:
错误原因是:CUDA和Visual Studio的版本不符,我这儿测试通过的版本分别是
CUDA7.5.17和VS2012
你懂得,再装一个VS呗,哈哈,没那么简单,CUDA和VS的安装顺序呢,是先装VS,再装CUDA,因为在安装CUDA的时候会自动检测电脑里面的VS,如果你是后装的话,检测不到咯,白费。所以遇到了这个问题就先装一个版本对的VS,然后再装一遍CUDA。
刚刚试了一下GPU,快的吓了我一跳,这么说吧、
训练一趟2.8小时、
训练一趟89秒、
快的飞起、我去!
当然跟我的NVIDIA GeForce GTX 960M显卡、
也是分不开的。:)
祝一切顺利
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5611次
排名:千里之外
原创:11篇机器学习(182)
http://dataunion.org/20365.html
GPU因其浮点计算和矩阵运算能力有助于加速深度学习是业界的共识,Theano是主流的深度学习Python库之一,亦支持GPU,然而Theano入门较难,Domino的这篇博文介绍了如何使用GPU和Theano加速深度学习,使用更简单的基于Theano的&库。教程由多层感知器及卷积神经网络,由浅入深,是不错的入门资料。
基于Python的深度学习
实现神经网络算法的Python库中,最受欢迎的当属Theano。然而,Theano并不是严格意义上的神经网络库,而是一个Python库,它可以实现各种各样的数学抽象。正因为如此,Theano有着陡峭的学习曲线,所以我将介绍基于Theano构建的有更平缓的学习曲线的两个神经网络库。
第一个库是&。该库提供了一个很好的抽象,它允许你构建神经网络的每一层,然后堆叠在彼此的顶部来构建一个完整的模型。尽管这比Theano显得更好,但是构建每一层,然后附加在彼此顶部会显得有些冗长乏味,所以我们将使用&库,它在Lasagne库上提供了一个类似&风格的API,能够轻松地构建多层神经网络。
延伸阅读:&
由于这些库默认使用的不是Domino硬件,所以你需要创建一个requirements.txt文件,该文件内容如下:
-e git:///Theano/Theano.git#egg=Theano
-e git:///lasagne/lasagne.git#egg=lasagne
nolearn==0.5.0
配置Theano
现在,在我们导入Lasagne库和Nolearn库之前,首先我们需要配置Theano,使其可以使用GPU硬件。要做到这一点,我们需要在我们的工程目录中新建一个.theanorc文件,该文件内容如下:
[global] device = gpu floatX = float32 [nvcc] fastmath = True
这个.theanorc文件必须放置在主目录中。在你的本地计算机上,这个操作可以手工完成,但我们不能直接访问Domino机器的主目录,所以我们需要使用下面的代码将文件移到它的主目录中:
import os import shutil destfile = &/home/ubuntu/.theanorc& open(destfile,
'a').close() shutil.copyfile(&.theanorc&, destfile)
上面的代码会在主目录创建了一个空的.theanorc文件,然后复制我们项目目录下的.theanorc文件内容到该文件中。
将硬件切换到GPU后,我们可以来做一下测试,使用Theano文档中提供的测试代码来看看Theano是否能够检测到GPU。
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
vlen = 10 * 30 * 768
# 10 x #cores x # threads per core
iters = 1000
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print f.maker.fgraph.toposort()
t0 = time.time()
for i in xrange(iters):
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 x in f.maker.fgraph.toposort()]):
print 'Used the cpu'
print 'Used the gpu'
如果Theano检测到GPU,上面的函数运行时间应该需要0.7秒,并且输出“Used&the&gpu”。否则,整个过程将需要2.6秒的运行时间,同时输出“Used&the&cpu”’。如果输出的是后一个,那么你肯定是忘记将硬件切换到GPU了。
对于这个项目,我们将使用CIFAR-10图像数据集,它来自10个不同的类别,包含了6大小的彩色图像。
幸运的是,这些数据属于&格式,所以我们可以使用辅助函数来加载数据,将每个文件加载到NumPy数组中并返回训练集(Xtr),训练集标签(Ytr),测试集(Xte)以及测试集标签(Yte)。下列代码归功于&课程的工作人员。
import cPickle as pickle
import numpy as np
def load_CIFAR_file(filename):
'''Load a single file of CIFAR'''
with open(filename, 'rb') as f:
datadict= pickle.load(f)
X = datadict['data']
Y = datadict['labels']
X = X.reshape(1, 32).transpose(0,2,3,1).astype('float32')
Y = np.array(Y).astype('int32')
return X, Y
def load_CIFAR10(directory):
'''Load all of CIFAR'''
for k in range(1,6):
f = os.path.join(directory, &data_batch_%d& % k)
X, Y = load_CIFAR_file(f)
xs.append(X)
ys.append(Y)
Xtr = np.concatenate(xs)
Ytr = np.concatenate(ys)
Xte, Yte = load_CIFAR_file(os.path.join(directory, 'test_batch'))
return Xtr, Ytr, Xte, Yte
多层感知器
多层感知器是一种最简单的神经网络模型。该模型包括一个输入层数据,一个施加一些数学变换的隐藏层,以及一个输出层用来产生一个标签(不管是分类还是回归,都一样)。
图片来源:http://dms.irb.hr/tutorial/tut_nnets_short.php
在我们使用训练数据之前,我们需要把它的灰度化,把它变成一个二维矩阵。此外,我们将每个值除以255然后减去0.5。当我们对图像进行灰度化时,我们将每一个(R,G,B)元组转换成0到255之间的浮点值)。通过除以255,可以标准化灰度值映射到[0,1]之间。接下来,我们将所有的值减去0.5,映射到区间[&-0.5,0.5&]上。现在,每个图像都由一个1024维的数组表示,每一个值都在-&0.5到0.5之间。在训练分类网络时,标准化你的输入值在[-1,1]之间是个很常见的做法。
X_train_flat = np.dot(X_train[...,:3], [0.299, 0.587, 0.114]).reshape(X_train.shape[0],-1).astype(np.float32)
X_train_flat = (X_train_flat/255.0)-0.5
X_test_flat = np.dot(X_test[...,:3], [0.299, 0.587, 0.114]).reshape(X_test.shape[0],-1).astype(np.float32)
X_test_flat = (X_test_flat/255.0)-.5
使用nolearn的API,我们可以很容易地创建一个输入层,隐藏层和输出层的多层感知器。hidden_num_units&=&100表示我们的隐藏层有100个神经元,output_num_units&=&10则表示我们的输出层有10个神经元,并与标签一一对应。输出前,网络使用&函数来确定最可能的标签。迭代50次并且设置verbose=1来训练模型,最后会输出每次迭代的结果及其需要的运行时间。
net1 = NeuralNet( layers = [ ('input', layers.InputLayer), ('hidden',
layers.DenseLayer), ('output', layers.DenseLayer), ], #layers parameters:
input_shape = (None, 1024), hidden_num_units = 100, output_nonlinearity
= softmax, output_num_units = 10, #optimization parameters: update = nesterov_momentum,
update_learning_rate = 0.01, update_momentum = 0.9, regression = False,
max_epochs = 50, verbose = 1, )
从侧面来说,这个接口使得它很容易建立深层网络。如果我们想要添加第二个隐藏层,我们所需要做的就是把它添加到图层参数中,然后在新增的一层中指定多少个神经元。
net1 = NeuralNet( layers = [ ('input', layers.InputLayer), ('hidden1',
layers.DenseLayer), ('hidden2', layers.DenseLayer), #Added Layer Here ('output',
layers.DenseLayer), ], #layers parameters: input_shape = (None, 1024),
hidden1_num_units = 100, hidden2_num_units = 100, #Added Layer Params Here
现在,正如我前面提到的关于Nolearn类似Scikit-Learn风格的API,我们可以用fit函数来拟合神经网络。
net1.fit(X_train_flat, y_train)
当网络使用GPU训练时,我们可以看到每次迭代时间通常需要0.5秒。
另一方面,当Domino的硬件参数设置为XX-Large(32&core,&60&GB&RAM),每次迭代时间通常需要1.3秒。
通过GPU训练的神经网络,我们可以看到在训练网络上大约提速了3倍。正如预期的那样,使用GPU训练好的神经网络和使用CPU训练好的神经网络产生了类似的结果。两者产生了相似的测试精度(约为41%)以及相似的训练损失。
通过下面代码,我们可以在测试数据上测试网络:
y_pred1 = net1.predict(X_test_flat)
print &The accuracy of this network is: %0.2f& % (y_pred1 == y_test).mean()
最后,我们在测试数据上得到的精度为41%。
卷积神经网络是一种更为复杂的神经网络结构,它的一个层中的神经元和上一层的一个子集神经元相连。结果,卷积往往会池化每个子集的输出。
图片来源:&
卷积神经网络在企业和&中很受欢迎,因为它能灵活地学习不同的问题并且易扩展。
同样,在我们建立卷积神经网络之前,我们首先必须对数据进行灰度化和变换。这次我们会保持图像32×32的大小不变。此外,我已经修改了矩阵的行顺序,所以每个图像现在被表示为(color,x,y)格式。跟之前一样,我将特征的每个值除以255,再减去0.5,最后将数值映射到区间(-1,1)。
X_train_2d = np.dot(X_train[...,:3], [0.299, 0.587, 0.114]).reshape(-1,1,32,32).astype(np.float32)
X_train_2d = (X_train_2d/255.0)-0.5
X_test_2d = np.dot(X_test[...,:3], [0.299, 0.587, 0.114]).reshape(-1,1,32,32).astype(np.float32)
X_train_2d = (X_train_2d/255.0)-0.5
现在我们可以构造卷积神经网络了。该网络由输入层,3个卷积层,3个2×2池化层,200个神经元隐藏层以及最后的输出层构成。
net2 = NeuralNet(
layers = [
('input', layers.InputLayer),
('conv1', layers.Conv2DLayer),
('pool1', layers.MaxPool2DLayer),
('conv2', layers.Conv2DLayer),
('pool2', layers.MaxPool2DLayer),
('conv3', layers.Conv2DLayer),
('pool3', layers.MaxPool2DLayer),
(&hidden4&, layers.DenseLayer),
(&output&, layers.DenseLayer),
#layer parameters:
input_shape = (None, 1, 32, 32),
conv1_num_filters = 16, conv1_filter_size = (3, 3), pool1_pool_size = (2,2),
conv2_num_filters = 32, conv2_filter_size = (2, 2) , pool2_pool_size =
conv3_num_filters = 64, conv3_filter_size = (2, 2), pool3_pool_size = (2,2),
hidden4_num_units = 200,
output_nonlinearity = softmax,
output_num_units = 10,
#optimization parameters:
update = nesterov_momentum,
update_learning_rate = 0.015,
update_momentum = 0.9,
regression = False,
max_epochs = 5,
verbose = 1,
接着,我们再次使用fit函数来拟合模型。
net2.fit(X_train_2d, y_train)
与多层感知器相比,卷积神经网络的训练时间会更长。使用GPU来训练,大多数的迭代需要12.8s来完成,然而,卷积神经网络验证损失约为63%,超过了验证损失为40%的多层感知器。也就是说,通过卷积层和池化层的结合,我们可以提高20%的精度。
在只有Domino的XX-大型硬件层的CPU上,每个训练周期大概需要177秒完成,接近于3分钟。也就是说,用GPU训练,训练时间提升了大约15倍。
和前面一样,我们可以看到在CUP上训练的卷积神经网络与GPU上训练的卷积神经网络有着类似的结果,相似的验证精度与训练损失。
此外,当我们在测试数据上测试卷积神经网络时,我们得到了61%的精度。
y_pred2 = net2.predict(X_test_2d)
print &The accuracy of this network is: %0.2f& % (y_pred2 == y_test).mean()
建立卷积神经网络的所有代码都可以在ConvolutionNN.py这个&中找到。
最后,正如你所看到的,使用GPU训练的深度神经网络会加快运行加速,在这个项目中它提升的速度在3倍到15倍之间。无论是在工业界还是学术界,我们经常会使用多个GPU,因为这会大大减少深层网络训练的运行时间,通常能从几周下降至几天。
原文链接:&(译者/刘帝伟
审校/刘翔宇、朱正贵 责编/周建丁)
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:996293次
积分:12926
积分:12926
排名:第918名
转载:1925篇
评论:97条
(2)(45)(53)(56)(16)(22)(28)(42)(28)(46)(22)(31)(40)(45)(31)(34)(99)(140)(111)(126)(77)(40)(27)(54)(40)(65)(147)(126)(121)(15)(56)(115)(7)(1)(1)(1)(2)(4)(7)(1)(1)(4)(4)(1)(1)(3)(3)(9)怎么让theano利用多个GPU?【人工智能吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:54,643贴子:
怎么让theano利用多个GPU?收藏
我的系统是redhat,已安装theano,cuda7.5. 两块tesla k40. 在运行theano时提示Using gpu device 0: Tesla K40m (CNMeM is disabled, cuDNN not available)请问“Using gpu device 0:”是不是表示没有利用全部的两张显卡?如果没有利用两块卡该怎么配置?
百度众包可为您采集文字,图片,视频等多种类型数据.高效高质,获取训练数据好选择!作为人工智能或其他算法训练数据,为您构建有效数据模型提供有力数据支持!
theanorc配置如下:[global]
floatX=float32
device=gpu
root=/usr/local/cuda-7.5
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 keras theano gpu 的文章

 

随机推荐