设备:
Ubuntu 16.04
python 2.7(anaconda) python —version
cuda 9.0 nvcc -V
cuDNN 7101 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
openCV 2.4.9.1 pkg-config --modversion opencv
caffe主页:
http://caffe.berkeleyvision.org/installation.html#compilation
主要步骤:
安装依赖包
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
2. 安装CUDA
官方:https://developer.nvidia.com/cuda-downloads
参考: https://blog.csdn.net/u012235003/article/details/54575758/
2.1 检查GPU的信息
lspci | grep -i nvidia
2.2 检查是否安装gcc
gcc - - version
2.3 检查kernel版本
sudo apt-get install linux-headers-$(uname -r)
2.4 禁用nouveau 第三方显卡驱动
2.4.1 检查nouveau运行状态
lsmod | grep nouveau
2.4.2 在/etc/modprobe.d 中创建黑名单blacklist-nouveau.conf
sudo touch blacklist-nouveau.conf
sudo chmod a+w+r blacklist-nouveau.conf (给文件可读可写的权限)
vim blacklist-nouveau.conf
文件内容是:
blacklist nouveau
options nouveau modeset=0
2.4.3 运行命令
sudo update-initramfs -u
2.4.4 重启设备
2.4.5 检查nouveau运行状态
2.5 下载CUDA
https://developer.nvidia.com/cuda-downloads
选择runfile下载[注:之后可以按照官网安装方式安装CUDA]
2.6 安装依赖包
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
2.7 开始安装
2.7.1.重启电脑 在进入到登录界面时候,按住Ctrl+Alt+F1,进入到text mode,登录账号 2.7.2.关闭图形界面 终端命令:
sudo service lightdm stop
2.7.3.切换到cuda文件目录 cd到下载好的cuda目录,例如我的cuda包在/home/tony/cuda中 再ls查看cuda名字 2.7.4.给cuda可执行的权限
sudo chmod a+x cuda_7.5.18_linux.run
2.7.5.安装步骤
sudo sh cuda_7.5.18_linux.run
(a)会先有个阅读声明,一直按D即可,然后accept (b)第一个选项install nvidia accelerated Graphics Driver (y) (c)第二个选项install the OpenGL libraries 双显卡(指的是集成显卡+独立显卡)选n,单卡(如果没有集成显卡,只有一个或多个支持GPU的显卡)选y。双显卡选y的话,会出现黑屏或登录界面无限循环的问题。 (d)后面的选项都是yes,或者按默认路径即直接按回车即可。
2.7.6.若出现下列显示 上面无警告和报错
Driver :Installed
Toolkit :Installed in /usr/local/cuda-7.5
Samples :Installed in /home/tony
即安装暂时成功。
2.7.7.输入
sudo service lightdm start
重新启动图形化界面 Alt + ctrl +F7,返回到图形化登录界面,输入密码登录。 如果能够成功登录,则表示不会遇到循环登录的问题,基本说明cuda的安装成功了。
2.7.8.搭配环境 终端输入
echo 'export PATH=/usr/local/cuda-7.5/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
重启ubuntu
2.8 测试cuda安装结果
2.8.1.检查路径 ~/dev 下 有无存在名为 nvidia* (以nvidia开头)的多个文件(device files) 若无,安装错误,见解决篇。
2.8.2.检查 CUDA Toolkit是否安装成功 终端输入 :
nvcc -V
会输出CUDA的版本信息(V要大写)
2.8.3.编译samples例子 进入到Samples安装目录,然后在该目录下终端输入make,等待十来分钟。
2.8.4.编译完成后测试 可以在Samples里面找到bin/x86_64/linux/release/目录,并切换到该目录 运行deviceQuery程序,sudo ./deviceQuery 查看输出结果,重点关注最后一行,Pass表示通过测试
3 安装BLAS
conda install blas
4 安装些奇怪的东西(gflag, glog, lmdb)
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
# glog
wget https://github.com/google/glog/archive/v0.3.3.tar.gz
tar zxvf v0.3.3.tar.gz
cd glog-0.3.3
./configure
make && make install
# gflags
wget https://github.com/schuhschuh/gflags/archive/master.zip
unzip master.zip
cd gflags-master
mkdir build && cd build
export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
make && make install
# lmdb
git clone https://github.com/LMDB/lmdb
cd lmdb/libraries/liblmdb
make && make install
5 下载Caffe
https://github.com/BVLC/caffe
6 编译Caffe
cp Makefile.config.example Makefile.config
# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
make all
make test
make runtest
7 遇到的典型问题汇总
7.1 Compile Caffe 时vcc fatal : Unsupported gpu architecture 'compute_20'
解决办法:
将Makefile.config中不支持的CUDA_ARCH注释掉
7.2 cannot find hdf5
解决办法:
在Makefile.config中
将
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/includeLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serialLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
//这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径然后:
cd /usr/lib/x86_64-linux-gnu
软链接:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
7.3 在make runtest 的时候遇到段错误 core dumped
查看warning信息:
Warning! ***HDF5 library version mismatched error***
The HDF5 header files used to compile this application do not match the version used by the HDF5 library to which this application is linked.Data corruption or segmentation faults may occur if the application continues.
This can happen when an application was compiled by one version of HDF5 but linked with a different version of static or shared HDF5 library.
You should recompile the application or check your shared library related settings such as 'LD_LIBRARY_PATH'.
You can, at your own risk, disable this warning by setting the environment variable 'HDF5_DISABLE_VERSION_CHECK' to a value of ‘1'. Setting it to 2 or higher will suppress the warning messages totally. Headers are 1.10.2, library is 1.8.16
故障分析:
由于安装了anaconda,在安装包的过程中,出现了两个版本的HDF5,发生冲突。
解决办法:
step 1.给anaconda赋权,(一开始由于未赋予足够权限,导致了删除、更新包过程出现错误),
sudo chmod -R 777 anaconda2/
step 2. 将anaconda中hdf5版本改变到系统对应版本
conda install -c anaconda hdf5=1.8.16
即更新下列包:
h5py: 2.8.0-py27h989c5e5_3 --> 2.6.0-np111py27_1
hdf5: 1.10.2-hba1933b_1 --> 1.8.16-0
numpy: 1.15.1-py27h1d66e8a_0 --> 1.11.3-py27hcd700cb_6
pytables: 3.4.4-py27ha205bf6_0 --> 3.2.2-np111py27_4
scipy: 1.1.0-py27hfa4b5c9_1 --> 1.1.0-py27hd20e5f9_0
【注】论坛https://www.cnblogs.com/platero/p/4077934.html提供的解决方案是错的
Error-7.3 差不多花了我5个小时,中间解决思路错了,多费了很多无用功,好在最后Mission Complete!