本文主要是介绍Ubuntu16配置caffe和faster RCNN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
主要参考了这篇文章https://blog.csdn.net/yhaolpz/article/details/71375762和https://blog.csdn.net/sinat_30071459/article/details/51332084,写的很好,也是对下次再安装写一个说明书
硬件是GTX1060的显卡
1、安装依赖包
2、安装NVIDIA显卡驱动
3、切换GCC版本
4、安装CUDA 8.0
5、验证 CUDA 8.0 是否安装成功
6、安装 cudnn
7、安装 opencv3.1
9、安装 caffe
9、安装 pycaffe
10、配置faster R-CNN
第1步 安装依赖包
安装后续步骤或环境必需的依赖包,依次输入以下命令:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compilersudo apt-get install --no-install-recommends libboost-all-devsudo apt-get install libopenblas-dev liblapack-dev libatlas-base-devsudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-devsudo apt-get install git cmake build-essential
有一定几率安装失败而导致后续步骤出现问题,所以要确保以上依赖包都已安装成功,验证方法就是重新运行安装命令,如验证 git cmake build-essential是否安装成功共则再次运行以下命令:
sudo apt-get install git cmake build-essential
界面提示如下则说明已成功安装依赖包,否则继续安装直到安装成功。
yhao@yhao-X550VB:~$ sudo apt-get install git cmake build-essential
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
build-essential 已经是最新版 (12.1ubuntu2)。
cmake 已经是最新版 (3.5.1-1ubuntu3)。
git 已经是最新版 (1:2.7.4-0ubuntu1.1)。
下列软件包是自动安装的并且现在不需要了:lib32gcc1 libc6-i386
使用'sudo apt autoremove'来卸载它(它们)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 94 个软件包未被升级。
第2步 安装NVIDIA显卡驱动
安装好依赖包后需要禁用 nouveau,只有在禁用掉 nouveau 后才能顺利安装 NVIDIA 显卡驱动,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一条禁用命令,首先需要打开该文件,通过以下命令打开:
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
打开后发现该文件中没有任何内容,写入:
blacklist nouveau option nouveau modeset=0
保存时命令窗口可能会出现以下提示:
** (gedit:4243): WARNING **: Set document metadata failed: 不支持设置属性 metadata::gedit-position
无视此提示~,保存后关闭文件,注意此时还需执行以下命令使禁用 nouveau 真正生效:
sudo update-initramfs -u
修改后需要重启系统。确认下Nouveau是已经被你干掉,使用命令: lsmod | grep nouveau
然后下载NVIDIA显卡驱动:http://www.geforce.cn/drivers选择适合自己显卡的版本
重启系统至init 3(文本模式),也可先进入图形桌面再运行init 3进入文本模式,再安装下载的驱动就无问题,
首先我们需要结束x-window的服务,否则驱动将无法正常安装
关闭
X-Window
,很简单:sudo service lightdm stop
,然后切换到tty1控制台:Ctrl+Alt+F1
即可
接下来就是最关键的一步了:sudo ./NVIDIA.run
开始安装,安装过程比较快,根据提示选择即可
我安装的是NVIDIA-Linux-x86_64-390.25
最后安装完毕后,重新启动X-Window
:sudo service lightdm start
,然后Ctrl+Alt+F7
进入图形界面;
nvidia-smi
nvidia-settings
第三步 切换gcc 版本
需要注意的一点是ubuntu16.04的gcc版本是5.4,而cuda8.0在该系统中支持的gcc版本不超过5.3,所以第一步需要对GCC版本进行降级。
(1)下载gcc源码
wget ftp://mirrors.kernel.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz
(2)解压 tar -zxvf gcc-5.3.0.tar.gz
(3)下载编译所需依赖项:
cd gcc-5.3.0 //进入解包后的gcc文件夹
./contrib/download_prerequisites //下载依赖项
cd .. //返回上层目录
(4)建立编译输出目录: mkdir gcc-build-5.3.0
(5)进入输出目录,执行以下命令,并生成makefile文件:
cd gcc-build-5.3.0
../gcc-5.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
(6)编译: sudo make -j4
接下来就是等待了,整个过程大约40分钟左右。PS:最好不要在编译过程中再去做别的什么事,整个过程CPU都是满载的,要是莫名终止了,后面麻烦事也不少。
(7)编译结束以后,我们就可以执行安装了: sudo make install
(8)检查gcc和g++版本 gcc --version
g++ --version
第4步 安装 CUDA 8.0
第四步下载的1.4G的 CUDA中包含有 nvidia 显卡驱动,故此步骤 CUDA 的安装包括了 nvidia 显卡驱动的安装,此时注意你是否已经安装过 nvidia 显卡驱动,若无法保证已安装的 nvidia 显卡驱动一定正确,那就卸载掉之前安装的 nvidia 显卡驱动(卸载方法链接),然后开始安装 CUDA 8.0;若可以保证已安装正确的 nvidia 显卡驱动,则直接开始安装 CUDA 8.0,在安装过程中选择不再安装 nvidia 显卡驱动(我使用的是之前安装好的nvidia驱动)。
为了方便开始安装过程的路径查找,把下载的 CUDA 安装文件移动到 HOME 路径下,然后通过 Ctrl + Alt + F1 进入文本模式,输入帐号密码登录,通过 Ctrl + Alt + F7 可返回图形化模式,在文本模式登录后首先关闭桌面服务:
sudo service lightdm stop
然后通过 Ctrl + Alt + F7 发现已无法成功返回图形化模式,说明桌面服务已成功关闭,注意此步对接下来的 nvidia 驱动安装尤为重要,必需确保桌面服务已关闭。
Ctrl + Alt + F1 进入文本模式,然后运行 CUDA 安装文件进行安装,之前我们已经把 CUDA 安装文件移动至 HOME,直接通过 sh 命令运行安装文件即可:
sudo cuda_8.0.61_375.26_linux.run --no-opengl-libs
其中 cuda_8.0.61_375.26_linux.run 是我的 CUDA 安装文件名,而你需替换为自己的 CUDA 安装文件名,若此时忘记可直接通过 ls 文件查看文件名,这也是我建议把 CUDA 安装文件移动到 HOME 下的另一个原因。
执行此命令约1分钟后会出现 0%信息,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,然后让选择是否安装 nvidia 驱动,这里的选择对应第5步开头,若未安装则输入 “y”,若确保已安装正确驱动则输入“n”。
剩下的选择则都输入“y”确认安装或确认默认路径安装,开始安装,此时若出现安装失败提示则可能为未关闭桌面服务或在已安装 nvidia 驱动的情况下重复再次安装 nvidia 驱动,安装完成后输入重启命令重启:
reboot
重启后登录进入系统,配置 CUDA 环境变量,与第3步相同,使用 gedit 命令打开配置文件:
sudo gedit ~/.bashrc
在该文件最后加入以下两行并保存:
export PATH=/usr/local/cuda-8.0/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
使该配置生效:
source ~/.bashrc
第5步 验证 CUDA 8.0 是否安装成功
分别执行以下命令:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuerysudo make./deviceQuery
若看到类似以下信息则说明 cuda 已安装成功:
./deviceQuery Starting...CUDA Device Query (Runtime API) version (CUDART static linking)Detected 1 CUDA Capable device(s)Device 0: "GeForce GT 740M"CUDA Driver Version / Runtime Version 8.0 / 8.0CUDA Capability Major/Minor version number: 3.5Total amount of global memory: 2004 MBytes (2100953088 bytes)( 2) Multiprocessors, (192) CUDA Cores/MP: 384 CUDA CoresGPU Max Clock rate: 1032 MHz (1.03 GHz)Memory Clock rate: 800 MhzMemory Bus Width: 64-bitL2 Cache Size: 524288 bytesMaximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layersMaximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layersTotal amount of constant memory: 65536 bytesTotal amount of shared memory per block: 49152 bytesTotal number of registers available per block: 65536Warp size: 32Maximum number of threads per multiprocessor: 2048Maximum number of threads per block: 1024Max dimension size of a thread block (x,y,z): (1024, 1024, 64)Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)Maximum memory pitch: 2147483647 bytesTexture alignment: 512 bytesConcurrent copy and kernel execution: Yes with 1 copy engine(s)Run time limit on kernels: NoIntegrated GPU sharing Host Memory: NoSupport host page-locked memory mapping: YesAlignment requirement for Surfaces: YesDevice has ECC support: DisabledDevice supports Unified Addressing (UVA): YesDevice PCI Domain ID / Bus ID / location ID: 0 / 1 / 0Compute Mode:< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GT 740M
Result = PASS
我没有安装cuda他的NVIDIA驱动,所以
CUDA Driver Version = 9.1, CUDA Runtime Version = 8.0
不知道以后会有什么影响
PS:这个地方后来遇到问题了,一定要相同否则训练faster rcnn会报Check failed: error == cudaSuccess (30 vs. 0) unknown error这个错误。
解决方法就是重新安装显卡驱动,用nvidia-smi查看当前安装的显卡驱动,375的Driver Version是8.0版本,384是9.0版本,390是9.1版本。重装375显卡驱动就好了。
第6步 安装 cudnn
登录官网:https://developer.nvidia.com/rdp/cudnn-download ,下载对应 cuda 版本且 linux 系统的 cudnn 压缩包,注意官网下载 cudnn 需要注册帐号并登录,不想注册的可从我的网盘下载:https://pan.baidu.com/s/1c2xPVzy
下载完成后解压,得到一个 cudn 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include 路径下,然后进行以下操作:
sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
然后命令行进入 cudn/lib64 路径下,运行以下命令:
sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
这里需要先查看一下自己应该链接的是 libcudnn.so.5.1.10 还是 libcudnn.so.5.1.5 ,查看方法为下:
locate libcudnn.so
这里第三行链接命令视你的查看结果而定。
安装完成后可用 nvcc -V 命令验证是否安装成功,若出现以下信息则表示安装成功:
yhao@yhao-X550VB:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61
但此时查询cuda会出现问题
nvcc -V
问题是
The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt-get install nvidia-cuda-toolkit
但是我们已经安装了cuda,在 /usr/local 能够看到文件夹 cuda-8.0。 这需要如下设置
执行sudo gedit ~/.bashrc,在最后面,64位的话粘贴以下内容:
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
接着执行 source ~/.bashrc 使其立即生效
下面查询
nvcc -V
可见如下结果
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17
第7步 安装 opencv3.1
进入官网 : http://opencv.org/releases.html , 选择 3.1.0 版本的 source , 下载 opencv-3.1.0.zip
解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.1.0 目录下,
修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 文件内容,如图:
执行:
mkdir build # 创建编译的文件目录cd build
安装OpenCv 3.1
的过程中要下载ippicv_linux_20151201
,由于网络的原因,这个文件经常会下载失败。
解决的办法是手动下载:
- 先下载 OpenCV 3.1
Download MD5 sum: 6082ee2124d4066581a7386972bfd52a
Download size: 76 MB
Estimated disk space required: 1.8 GB
Estimated build time: 4.9 SBU
- 下载 ippicv_linux_20151201
解压OpenCV并进入其目录,运行下面的命令。
- 创建ippicv_linux_20151201的目录,带MD5.
ipp_file=../ippicv_linux_20151201.tgz &&
ipp_hash=$(md5sum $ipp_file | cut -d" " -f1) &&
ipp_dir=3rdparty/ippicv/downloads/linux-$ipp_hash &&mkdir -p $ipp_dir &&
cp $ipp_file $ipp_dir
- 编译OpenCV
mkdir build &&
cd build &&cmake -DCMAKE_INSTALL_PREFIX=/usr \-DWITH_XINE=ON \
-DBUILD_TESTS=OFF \
-Wno-dev ..
make -j8
或者更简单一点,在确保MD5是808b791a6eac9ed78d32a7666804320e的情况下:
在OpenCV源代码的根目录下创建目录: opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
将下载后的ippicv文件拷进去。
编译OpenCV:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..make -j8 #编译
一定要加上-j8,不然慢的出奇
编译成功后安装:
sudo make install #安装
安装完成后通过查看 opencv 版本验证是否安装成功:
pkg-config --modversion opencv
zyr@lab:~/cuda/opencv-3.1.0/build$ pkg-config --modversion opencv
2.4.9.1
然而最后显示2.4.9.1的版本,很费解
第8步 安装 caffe
首先在你要安装的路径下 clone :
git clone https://github.com/BVLC/caffe.git
进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :
sudo cp Makefile.config.example Makefile.config
复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。
然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:
sudo gedit Makefile.config
修改 Makefile.config 文件内容:
1.应用 cudnn
将
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
2.应用 opencv 版本
将
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
3.使用 python 接口
将
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
4.修改 python 路径
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
然后修改 caffe 目录下的 Makefile 文件:
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
- 1
- 2
- 3
- 4
然后修改 /usr/local/cuda/include/host_config.h 文件 :
将
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
OK ,可以开始编译了,在 caffe 目录下执行 :
make all -j8
这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。
编译成功后可运行测试:
sudo make runtest -j8
测试的时候会报错
.build_release/tools/caffe: error while loading shared libraries: libcudnn.so.5: cannot open shared object file: No such file or directory
Makefile:534: recipe for target 'runtest' failed
make: *** [runtest] Error 127
最后再加一句
sudo ldconfig /usr/local/cuda/lib64
因为cuda的路径可能设置错了,由于
安装CUDNN的时候吧cudnn放在了/usr/local/cuda/lib64目录下,而没有放在/usr/local/cuda8.0/lib64,目录下。有部分攻略在安装CUDA8.0会在~/.bashrc中声明export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}, 即为CUDA库函数地址。但这个路径是错误的,改成export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}},就不会出现:"libcudart.so.8.0 cannot open shared object file: No such file or directory"以及 "libcudnn.so.5 cannot open shared object file: No such file or directory"
9、安装 pycaffe
cd caffesudo make pycaffe -j8
以下是我编译 pycaffe 时出现的错误:
python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有那个文件或目录
解决方法:
sudo apt-get install python-numpy
10、配置faster R-CNN
但是执行 ./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc 的时候报错了
这是因为这里没取消掉注释
然后重新make
又出现一个错误
解决方案再下面一行
然后又出现一个错误
这里安装protobuf
https://blog.csdn.net/woainiwss/article/details/50585665
然后参考这个设置环境变量
https://www.cnblogs.com/darkknightzh/p/5993405.html
ps:顺便研究一下configure,make和make install的区别
https://blog.csdn.net/vivian187/article/details/51750639
以及/etc/profile 与 /etc/bashrc 的区别
首先,shell分为登录式shell和非登录时shell,两者的读取配置文件的顺序是不一样的.
登录式shell读取配置文件的顺序为 /etc/profile -> /etc/profile.d/*.sh -> ~/.bash.profile -> ~/.bashrc -> /etc/bashrc
非登录式shell读取配置文件的顺序为 ~/.bashrc ->/etc/bashrc -> /etc/profile.d/*.sh
/etc/profile 文件中设定的环境变量,运行的命令或脚本,针对所有用户有效
/etc/bashrc 文件中设定的本地变量,定义的别名,针对所有启动的shell程序的用户有效
这两个配置文件是全局的。
~/.bash_profile 作用跟/etc/profile是一样的,只不过针对的是某一个用户
~/.bashrc的作用跟/etc/bashrc也是一样的,只不过针对的也是某一个用户
下一个错误:
ImportError: No module named 'yaml'
输入pip install pyyaml
下一个错误
解决方案:再训练之前加sudo
sudo ./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
终于可以正常训练了!
这篇关于Ubuntu16配置caffe和faster RCNN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!