首先在阅读这篇文章前要做好心理准备:
一.caffe是最难安装的软件,没有之一,所以你要做好出现各种问题的准备。
二这篇文章本身不短,所以请耐心仔细读下去,如果出现问题欢迎跟博主讨论.
准备工作:
1.1首先查看自己的电脑的显卡是否支持nvidia驱动:(看看这个表里有没有你的驱动)
1.2如果提示你安装依赖的问题,则有可能是Ubuntu源的问题,需要更换源,
1.3禁用unouven的驱动:
原因:unouven是ubuntu系统自带的驱动,专门用来驱动nvidia显卡的,如果不禁用可能会对后面下载nvdia驱动产生冲突
命令行输入以下代码:
lsmod | grep nouveau
如果有信息显示则代表nouveau存在。
1.3.1Ubuntu的nouveau禁用方法:
在 /etc/modprobe.d 中创建文件 blacklist-nouveau.conf ,
创建文件方法:进入到/etc/modprobe.d目录下
终端命令:
sudo touch blacklist-nouveau.conf
sudo chmod a+w+r blacklist-nouveau.conf (给文件权限)
sudo gedit blacklist-nouveau.conf
在文件最后面写入以下代码:
blacklist nouveau
options nouveau modeset=0
保存退出
打开终端,运行命令:
sudo update-initramfs -u
重启电脑
在终端输入以下命令:
lsmod | grep nouveau
检查是否禁用成功,如果不显示任何信息,则代表禁用成功。
二.单独安装nvidia驱动再安装cuda或者是只安装cuda(因为cuda里有自带nvidia驱动):
2.1单独安装nvidia驱动再安装cuda:
可选选项:你可以单独下载驱动,但是一般cuda自带有驱动,(驱动版本与显卡型号最好对应否则可能出现不兼容的问题,在这里查对应的驱动显卡驱动查询),如果是单独下载驱动(就在显卡查询那个链接下载),选择的安装方式一定要是.run安装而不是.deb的安装方法,
原因:因为.deb相当于一个命令行就可以直接安装了,中间你不需要做任何操作,但是他会默认下载opengl这个软件包(opengl到底为什么会影响循环登录?..这个博主查了很多暂时没查询到,如果有知道的可以回答一下)(opengl会造成你重启电脑后的lightdm login loop-登录循环,也就是你进不去ubuntu界面),
这里是nvidia官方给出的解释,为什么选择.run而不是.deb的安装方式:官方解释
方法:
(1)选用.run安装包方式最好,去nvdia官网下载(就在显卡查询那个链接下载),选择适合你显卡的驱动安装,下载结束后,
(2)按ctl+alt+F1进入字符界面(什么是init3和init5模式?init3是字符界面,init5是图形界面),
(3)然后登录你的用户名和密码,输入命令行,sudo service lightdm stop,(为什么一定要执行,博主不清楚,有知道的小伙伴可以分享一下)然后cd到下载目录(这个目录你应该能很轻松找到把),执行.run安装包
(4)输入: bash nvdia.run -no-opengl-files(表示不下载opengl)命令,文件名不同命令则不同,然后进入提示界面,如果提示你是否修改xorg,config(这个文件里包含了你各种硬件信息,例如,鼠标,键盘,显卡等等),文件,点否,接下来按照提示安装就行了,安装完毕后,sudo reboot 重启后,进入shell输入:nvidia-smi会显示nvidia显卡驱动的信息,则表明安装成功。
安装过程中所碰到的一些基本名词知识:
lightdm:显示管理器:就是管理图形界面的一个东西,所以sudo service lightdm stop的意思就是关闭显示管理器
X-server:我简单的理解是输入输出系统,x客户端是按照用户输入操作完成指令的图形系统。简单的讲x服务器就是显示图形给你看,接受你输入的部分。而x客户端则是执行操作的部分,比如打开某个菜单。 那么x客户端负责去找那个目录并找到那个菜单程序执行。 x服务器则接受你鼠标输入。并负责将x客户端的结果在显示器上划出图形显示出来。(这一部分转载于:https://zhidao.baidu.com/question/389677211.html)
窗口管理器:管理窗口的一个东西,简而言之,比如你窗口的排列形式,你窗口的缩小打开方式
gnome:是一个软件,提高桌面环境,比如前面讲到的窗口管理器,显示管理器都集成在gnome中,kde是另一种版本的gnome。
2.2安装cuda:
如果你在这之前已经安装了nvidia驱动,在如下第二步的时候,提示你是否安装driver一定要点击否。
这里也是选择.run的安装方法,而不是.deb,因为.deb相当于一个命令行就可以直接安装了,中间你不需要做任何操作,但是他会默认下载opengl这个软件包(opengl会造成你重启电脑后的lightdm login loop-登录循环,也就是你进不去ubuntu界面),
方法:
(1):首先去官网下载cuda版本https://developer.nvidia.com/cuda-toolkit-archive,选择你适合的cuda的.run文件安装包版本,我这里是cuda8.0。
注:(我一直想知道是否不同的驱动所要求的cuda版本也不同,后来找不到,我自己的思考与理解是显卡版本与cuda没有什么特别大的要求,但是显卡对驱动有要求,而cuda又是自带驱动的,所以如果安装号cuda后,如果出现不兼容问题,很有可能是cuda自带的驱动与显卡不匹配,这时候就需要重新单独安装驱动,把之前都卸载了)
(2):下载完毕后,按ctrl+alt+F1,进入字符,登录你的用户,然后输入命令行,sudo service lightdm stop,cd到下载目录,输入bash cuda8.0.run -no-opengl-libs(表示不下载opengl,这里的执行.run文件命令根据你自己下载的cuda版本不同.run文件名而不同,),然后根据提示安装,如果你之前像我说的已经单独安装了nvidia的驱动,那么这提示你是否要安装driver的时候,选择否,如果之前没有单独安装nvidia驱动,则选择是,然后提示你是否可以修改Xorg.config的配置文件你选择,否,然后安装完毕后,重启电脑,就可以了。
(3).重启电脑后,nvcc -V检查cuda是否安装成功,检查Device Node Verification。 检查路径~/dev下 有无存在名为nvidia*(以nvidia开头)的多个文件(device files) 如果没有的话,可以参考官方文档里的指导步骤,进行添加。
(4)
a)在home下创建一个文档,命名位modprobe,不要后缀,文档的内容如下:
#!/bin/bash
/sbin/modprobe nvidia
if [ "$?" -eq 0 ]; then
# Count the number of NVIDIA controllers found.
NVDEVS=`lspci | grep -i NVIDIA`
N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`
N=`expr $N3D + $NVGA - 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i
done
mknod -m 666 /dev/nvidiactl c 195 255
else
exit 1
fi
/sbin/modprobe nvidia-uvm
if [ "$?" -eq 0 ]; then
# Find out the major device number used by the nvidia-uvm driver
D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`
mknod -m 666 /dev/nvidia-uvm c $D 0
else
exit 1
fi
b)将该文件复制到/etc/init.d目录下
终端输入: $ sudo chmod 755 /etc/init.d/modprobe
- 1
- 2
d)执行如下命令将脚本放到启动脚本中去。
终端输入: $ cd /etc/init.d
$ sudo update-rc.d modprobe defaults 95
- 1
- 2
- 3
注意:数字95其实可以随便设置的。
e)关机然后重新启动,去~/dev下面查看,不出意外此时应该有nvidia*系类文件了。
说明:很有必要说一下不管怎么搞我的nvidia*文件总是出现不了,所以我放弃,不过好像并没有太大的影响。这一点根据情况大家自己试试吧。
. 设置环境变量。
终端中输入 $ sudo gedit /etc/profile
- 1
- 2
在打开的文件末尾,添加以下两行:
export PATH=/usr/local/cuda-8.0/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64/:$LD_LIBRARY_PATH
- 1
- 2
- 3
添加完后:source /etc/profile
注意:上面的路径设置根据你cuda版本不同而修改
重启电脑,检查上述的环境变量是否设置成功。
终端中输入 : $ env
- 1
- 2
基本名词知识:
CUDA:是Nvidia推出的只能用于自家GPU的并行计算框架。只有安装这个框架才能够进行复杂的并行计算。主流的深度学习框架也都是基于CUDA进行GPU并行加速的,几乎无一例外。还有一个叫做cudnn,是针对深度卷积神经网络的加速库。
错误:如果提示你确保有足够的空间来安装
解决:你首先查看硬盘是否有足够的空间来安装,如果空间足够还出现这样的错误那就换一个cuda安装包,这个问题好像是nvidia官方的漏洞。
这里是nvidia官方给出的解释:出现这错误的官方解释
安装完cuda和显卡驱动之后,接下来安装matlab,opencv,caffe
以下安装参考:http://blog.csdn.net/qq_38731633/article/details/78319508
一.MATLAB安装 :
(1).下载linux版本的matlab2014链接:http://pan.baidu.com/s/1pLsS35x 提取密码so9j
下载完成后一个Crack文件和两个压缩包,分别解压两个压缩包,需要执行以下命令sudo 7z x 文件名.rar ,pat2解压时直接覆盖pat1,解压后会得到一个镜像文件MATHWORKS_R2014A.iso。
所以最后就是一个Crack文件和一个ISO文件。
(2).挂载
文件一般都是放在用户目录桌面,需要挂载到系统路径。在系统路径下创建空文件。
sudo mkdir /usr/local/matlab_iso
挂载:sudo mount -o loop MATHWORKS_R2014A.iso /usr/local/matlab_iso
matlab_iso文件里出现很多文档。
(3).安装
cd /usr/local/matlab_iso
sudo ./install
a、选择”install manually without using the internet”项进行安装
b、输入”file installation key”:12345-67890-12345-67890(随便都行)
c、在安装过程中有一项是在/usr/local/bin创建快捷方式,记得勾选,这样就可以在terminal直接输入matlab启动了(桌面右键打开终端,输入matlab即可启动)
(4).激活并破解
选择”license_405329_R2014a.lic”文件进行激活(在Crack文件夹下面)
将Crack/Liunx/libmwservices.so复制到/usr/local/MATLAB/R2014a/bin/glnxa64中:(在crack 文件中找到libmwservices.so,在找个文件夹下打开终端输入以下命令)
$ sudo cp libmwservices.so /usr/local/MATLAB/R2014a/bin/glnxa64/libmwservices.so
(5).OK,终端输入matlab即可打开matlab
我是直接按照上面安装的,没有出现问题,,命令行输入matlab即可打开matlab了
(6)编译matlab
-
编译
make matcaffe -j8
(编译成功后生成文件./matlab/+caffe/private/caffe_.mexa64
供matlab使用。) -
测试
make mattest -j8
(1)make matcaffe :错误:Caffe Problem: make matcaffe 'matlab/+caffe/private/caffe_.mexa64' failed
解决:在Makefile里面,大约第410行那一句话CXXFLAGS += -MMD -MP下面添加CXXFLAGS += -std=c++11,最后是这样
CXXFLAGS += -MMD -MP
CXXFLAGS += -std=c++11
然后在caffe根目录下make clean,make all
(2)make mattest:错误
make mattest:错误:Invalid MEX-file '/home/manager/caffe/matlab/+caffe/private/caffe_.mexa64':libcudart.so.8.0: cannot open shared object file: No such file or directory
方法1: 解决办法是将一些文件复制到/usr/local/lib文件夹下:
#注意自己CUDA的版本号!
sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig
二.opencv的安装:
(1).安装相关的依赖(必须要,否则会出错!)
sudo apt-add-repository universe
sudo apt update -y && sudo apt upgrade -y
sudo apt-get install -y build-essential make cmake cmake-curses-gui g++ libavformat-dev libavutil-dev libswscale-dev libv4l-dev libeigen3-dev libglew-dev libgtk2.0-dev pkg-config libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev libavcodec-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran python2.7-dev python-pip python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libjasper-dev libdc1394-22-dev ffmpeg
注:ffmpeg安装失败的话可以如下操作:
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update
sudo apt-get install ffmpeg2.下载opencv3.1和opencv_contrib
(2).下载链接:http://pan.baidu.com/s/1nvOKBjj 密码:xzkt
把他们放在/usr/local里面便于安装。
解压: unzip opencv.zip
unzip opencv_contrib.zip
得到两个文件夹。
进去并创建一个空文件夹
cd opencv
sudo mkdir build && cd build
(3).编译:cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DOPENCV_EXTRA_MODULES_PATH=/usr/local/opencv_contrib/modules -DWITH_CUDA=ON -DCUDA_ARCH_BIN=”5.3” -DCUDA_ARCH_PTX=”” -DBUILD_EXAMPLES=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DCUDA_FAST_MATH=ON ..
注意:路径很关键,最后两点前有空格,DCMAKE不用空格。
如果make的时候卡在ippicv_linux_20151201.tgz ,则从上面链接里的文件ipp…替换opencv/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/下的同名文件,再次cmake,make clean并且make -j7&& make install
遇到的问题:
1解压压缩包的时候,没有解压成功,是因为没有用sudo权限,
2make -j7&& make install时最好su -到root用户下,不然他会提示你cmake没有权限,即时你在使用的是 sudo make -j7&& make install(我的是这样你们的可以自己之后尝试)
3 安装过程中时间比较长,它在100%会停留一段时间,不要着急,等它自动结束 回到用户再进行下一步操作,不要人为中断。
4.错误: No rule to make target /usr/lib/x86_64-linux-gnu/libGL.so', needed by
lib/libopencv_core.so.2.4.11’. Stop.
解决方法,删除旧的,然后,重新定向
ln -s /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/libGL.so.1
三.cudnn安装
Install cudnn v6 for cuda 8
tar -zxvf cudnn-8.0-linux-x64-v6.0.tgz
cd cuda
sudo cp cuda/include/*.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/lib64/libcudnn*
cd /usr/local/cuda/lib64
sudo ldconfig -v
caffe没有说要安装opencv,这个是需要安装的,可以在所以安装完毕后,安装opencv。
四.caffe的安装:
(1).安装相关依赖
sudo apt-get install libprotobuf-dev protobuf-compiler gfortran libboost-dev cmake libleveldb-dev libsnappy-dev libboost-thread-dev libboost-system-dev libatlas-base-dev libhdf5-serial-dev libgflags-dev libatlas-dev libboost-all-dev libprotobuf-dev libgflags-dev libhdf5-dev libleveldb-dev liblmdb-dev libsnappy-dev python-pip libgoogle-glog-dev liblmdb-dev gcc-4.7 g++-4.7 python-numpy -y
(2)下载caffe
git clone https://github.com/BVLC/caffe.git && cd caffe
sudo cp Makefile.config.example Makefile.config
(3)编辑Makefile.config文件
sudo gedit Makefile.config # Change below status
以下几行需要改,具体更改方式网上有很多可以自行查找
注:首先按个人需求修改Makefile.config配置文件
USE_CUDNN :=1 # Line 5
MATLAB的路径需要正确如以下的形式:
/usr/local/…/bin
注:注:在opencv版本那一栏直接填写2或者3就行了,不用具体到opencv3.1.2这种,因为这样做会报错
(4).编译caffe
sudo make -j4 all # Some warning message is OK, don’t worry!
sudo make -j4 test
sudo make -j4 runtest # Optional, take long time
sudo make py caffe
这个-j后面的数字是指用几个线程(线程的定义详见操作系统)去编译。
make runtest报错
error while loading shared libraries: libcudart.so.8.0
在bashrc中添加如下环境变量即可:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64/
make时出现的问题:
(1).build_release/lib/libcaffe.so: undefined reference to google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)’
设置环境变量:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH,将/usr/lib/x86_64-linux-gnu/放在最前面
(2)/cudnn.hpp:8:34: fatal error: caffe/proto/caffe.pb.h: No such file or directory
make all -j8有问题,make all没问题。可能是多核编译的问题。
最后用手写数字集测试
mnist Test
sh data/mnist/get_mnist.sh
sh examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh
问题: 1安装完caffe,修改配置文件,他会提示你没有定义的cv::什么函数,两种方法 1,将Opencv版本那一行只写3就行,2下面有一行那个1注释去掉,
问题2,make的时候 提示你没有什么可以为pycaffe可做的,你make clean一下或者重启一下 重新make,
注:make clean以后 你之前所有编译的opencv matlab神码的都得重新编译!
参考:http://blog.csdn.net/u010480194/article/details/54287335