四月份的时候就已经搭建了一次Deepnet框架,只是当时也没有运行成功例子就那样搁浅了。现在是因为发现神经网络利用hadoop并行不太可能,就果断放弃搞了近一个月的hadoop,转向GPU了。但是学习hadoop搭建环境也是搞了大概两天吧,后来也是看视频学习等,现在至少搭建环境没问题了。所以说还是有收获的。
现在来完整地说说这个框架的搭建过程及遇到的问题及解决方法吧。
我的环境ubuntu 旗舰版 16.0.4 +cuda-8.0+protobuf-3.2 +Anaconda2
首先 介绍一下
这个框架deepnet是多伦多大学计算机系机器学习组开发的一个神经网络工具包,可以进行以下计算:
1. Feed-forward Neural Nets
2. Restricted Boltzmann Machines
3. Deep Belief Nets4. Autoencoders
5. Deep Boltzmann Machines6. Convolutional Neural Nets
主要的成果是其中的DBM,可用于多模态建模。论文是“Multimodal Learning with Deep Boltzmann Machines” 框架比较冷门,所以安装资料比较少,但是在各位高手的帮助下还算是搭建成功了吧。
两篇安装经验推荐
http://blog.youkuaiyun.com/wspba/article/details/53363066
http://blog.youkuaiyun.com/llx1990rl/article/details/41699351
首先安装python ,建议安装 Anaconda2 ,因为那个numpy不知道怎么回事就是安装不成功,还是安装简洁的Anaconda2吧。
安装Anaconda2;
darcy@darcy-pc:~$ bash Anaconda2-4.3.0-Linux-x86_64.sh
Welcome to Anaconda2 4.3.0 (by Continuum Analytics, Inc.)
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
输入Enter回车, 下面让你看License,直接往下翻到最后
================
Anaconda License
================
Copyright 2016, Continuum Analytics, Inc.
All rights reserved under the 3-clause BSD License:
...
cryptography
A Python library which exposes cryptographic recipes and primitives.
Do you approve the license terms? [yes|no]
>>>
Please answer 'yes' or 'no':
>>> yes
输入yes;
Anaconda2 will now be installed into this location:
/home/darcy/anaconda2
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
[/home/darcy/anaconda2] >>>
输入Enter回车, 安装到默认目录;
PREFIX=/home/darcy/anaconda2
installing: python-2.7.13-0 ...
...
installing: anaconda-4.3.0-np111py27_0 ...
installing: ruamel_yaml-0.11.14-py27_1 ...
installing: conda-4.3.8-py27_0 ...
installing: conda-env-2.6.0-0 ...
Python 2.7.13 :: Continuum Analytics, Inc.
creating default environment...
installation finished.
Do you wish the installer to prepend the Anaconda2 install location
to PATH in your /home/darcy/.bashrc ? [yes|no]
[no] >>> yes
输入yes, 添加路径到配置文件;自动添加的
执行 如下命令,激活配置环境
darcy@darcy-pc:~$ source ~/.bashrc
darcy@darcy-pc:~$ python
Python 2.7.13 |Anaconda 4.3.0 (64-bit)| (default, Dec 20 2016, 23:09:15)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>>
>>> exit()
安装Protocol Buffers(不建议按照博客那里解压然后分别放到include 和lib文件夹下)
官网下载,我使用protobuf-2.6.1.tar.gz。
cd至下载路径
解压
$ tar zxvf protobuf-2.6.1.tar.gz
进入解压目录
$ cd protobuf-2.6.1
安装源码,配置、编译、编译检查、安装
$ ./configure
$ make
$ make check
$ make install
增加环境变量
$ sudo vi .bashrc
#在最下面加上
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
测试
$ protoc --version
protoc: error while loading shared libraries: libprotoc.so.8: cannot open shared
错误原因:
protobuf的默认安装路径是/usr/local/lib,而/usr/local/lib 不在Ubuntu体系默认的 LD_LIBRARY_PATH 里,所以就找不到该lib
解决方法:
1). 创建文件 /etc/ld.so.conf.d/libprotobuf.conf,在该文件中输入如下内容:
/usr/local/lib
2). 执行命令
sudo ldconfig
这时,再运行protoc --version 就可以正常看到版本号了
执行 sudo ldconfig
显示符号连接错误
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 不是符号连接
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 不是符号连接
原因:
系统找的是一个符号连接,而不是一个文件。
解决方法:
sudo mv /usr/lib/
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1
不建议deb方式安装,因为会出现驱动的问题,具体还是看官网介绍吧。
sudo apt-get purge nvidia-* //删除现有关于cuda的东西
sudo apt-get install nvidia-375 //nvidia-后面的数字是版本号 兼容大部分的GPU型号
sudo reboot //重启
重启后,终端输入:
nvidia-smi //或者
nvidia-settings
如果没出错,则驱动安装成功
cuda 8.0 Downloads下载cuda 8.0 的 runfile安装包。
cd切换到下载的文件目录下进行安装:
sudo sh cuda_8.0.44_linux.run
启动安装程序,一直按空格到最后,输入accept接受条款
输入n不安装nvidia图像驱动,之前已经安装过了 (只要是提示安装驱动,不要选,最关键的一步在这儿了)
输入y安装cuda 8.0工具
回车确认cuda默认安装路径:/usr/local/cuda-8.0
输入y用sudo权限运行安装,输入密码
输入y或者n安装或者不安装指向/usr/local/cuda的符号链接
输入y安装CUDA 8.0 Samples,以便后面测试
回车确认CUDA 8.0 Samples默认安装路径,该安装路径测试完可以删除
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ sudo gedit /etc/profile
在打开的文件末尾加入:
export PATH=/usr/local/cuda/bin:$PATH
保存之后,创建链接文件:
sudo gedit /etc/ld.so.conf.d/cuda.conf
在打开的文件中添加如下语句:
/usr/local/cuda/lib64
然后执行
sudo ldconfig
测试
cd 到 粗大examples
~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
这样就安装成功了cuda;
接下来
编译cudamat。
一般会遇到 nvcc-03错误
编译cudamat之前修改makefile。因为CUDA是8.0,需要去掉:
- 1
- 1
然后加上:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
这里修改的35 50这些数字要和查询设备里的一致,而且makefile里上下两段都要改,我原来只改了上面的可没少走弯路 。 这样后面运行时就不会出现CUDA error。
接下来运行样例 测试DeepNet。下载MNIST数据集,下载地址:http://www.cs.toronto.edu/~nitish/deepnet/mnist.tar.gz
cd到deepnet/deepnet/examples目录下运行:
结果出现
错误 from google.protobuf import descriptor ImportError:No module named google.protobuf
又搞了好久,
cd到解压后的protobuf文件夹下的python文件夹,执行
显示没有setuptools 就下载
2. 安装
$ tar -zxvf setuptools-0.6c11.tar.gz
$ cd setuptools=0.6c11
$ python setup.py install
然后执行
- sudo python setup.py build
- sudo python setup.py install
最后
执行conda install -c conda-forge protobuf=3.2.0
选择yes
居然成功了,原来可能还是依赖哪里没有弄好。
也问了一个博主
他说 sudo apt-get install python-protobuf
这种方案我没有试过,不过应该也可以。
还可能遇到 No GPU 的问题
去这里
http://blog.sina.com.cn/1988joey