电脑配置:
- 系统:Ubuntu16.04 - 64位
- GPU:NVIDIA GTX980 Ti
需要安装:
- NVIDIA显卡驱动
- CUDA
- cudnn
- python 或 matlab(这里只安装python,且在ubuntu16.04中已默认安装2.7版本)
-
opencv3.1
官方指导https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide —
1 安装
1.1 安装相关依赖项
在Terminal中安装依赖项
sudo apt-get update sudo apt-get upgrade sudo apt-get install -y build-essential cmake git pkg-config sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install -y libatlas-base-dev sudo apt-get install -y --no-install-recommends libboost-all-dev sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev # (Python general) sudo apt-get install -y python-pip # (Python 2.7 development files) sudo apt-get install -y python-devsudo apt-get install -y python-numpy python-scipy #opencv3.1依赖库 sudo apt-get install --assume-yes build-essential cmake git sudo apt-get install --assume-yes build-essential pkg-config unzip ffmpeg qtbase5-dev python-dev python3-dev python-numpy python3-numpy sudo apt-get install --assume-yes libopencv-dev libgtk-3-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev sudo apt-get install --assume-yes libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev sudo apt-get install --assume-yes libv4l-dev libtbb-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev sudo apt-get install --assume-yes libvorbis-dev libxvidcore-dev v4l-utils
1.2 安装NVIDIA驱动
BIOS选择自由选择显卡。如果电脑有集成显卡,并只想用集成显卡显示图像,BIOS中要选择优先使用集成显卡,并且不要安装nvidia驱动,直接安装cuda。 安装之前先卸载已经存在的驱动版本:
sudo apt-get remove --purge nvidia*
查看哪一个专有驱动是推荐安装的
sudo ubuntu-drivers devices
sudo add-apt-repository ppa:graphics-drivers #添加官方源
sudo apt-get update #刷新软件库
sudo apt-get install nvidia-367 #这里选择推荐的驱动
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev
也可以在界面安装或去官网查看适合自己显卡的驱动*
安装成功后需要重启生效,并通过命令nvidia-smi
检测是否安装成功
也可以在界面安装或去官网查看适合自己显卡的驱动
安装成功后需要重启生效,并通过命令
nvidia-smi
检测是否安装成功
1.3 安装CUDA
CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。 官方安装指导见NVIDIA CUDA Installation Guide for Linux
1.3.1 检查需要的版本
NVIDIA CUDA INSTALLATION GUIDE FOR LINUX
检测内核版本:uname -r
检测gcc版本:gcc -v
检测libc版本:apt-cache show libc6
这个博客可以将默认的gcc-5.4改为5.3
wget http://mirrors.concertpass.com/gcc/releases/gcc-5.3.0/gcc-5.3.0.tar.gz
tar -zxvf gcc-5.3.0.tar.gz
cd gcc-5.3.0 //进入解包后的gcc文件夹
./contrib/download_prerequisites //下载依赖项
cd .. //返回上层目录
mkdir gcc-build-5.3.0
cd gcc-build-5.3.0
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j8 //时间较长
sudo make install
sudo reboot now //可能需要重启
gcc --version //检查确认
g++ --version
# 如有多个gcc版本需要切换,用命令sudo update-alternatives --config gcc
1.3.2 下载CUDA
首先在官网下载CUDA(建议使用local run文件安装,deb安装会重装nvidia驱动),或:
wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run
wget下载后可能需要改名字
mv cuda_8.0.61_375.26_linux-run cuda_8.0.61_375.26_linux.run
这里选择的run安装包
1.3.3 安装CUDA
此时电脑如果有双显卡:Intel 的集成显卡 + Nvidia 的独立显卡。要想两个显卡同时运行,需要关闭 lightdm 服务。 在BIOS设置里选择用Intel显卡来显示或作为主要显示设备 进入Ubuntu后按 ctrl+alt+F1 或直接远程登陆,登入自己的账号,然后输入以下命令
sudo service lightdm stop
安装,执行以下命令:
sudo chmod +x ./cuda_8.0.61_375.26_linux.run
sudo ./cuda_8.0.61_375.26_linux.run
安装过程中,在询问是否安装openGL的时候选择no。 安装完成后需要在/etc/profile中添加环境变量, 在文件最后添加:
PATH=/usr/local/cuda-6.5/bin:$PATH
export PATH
然后使其生效
source /etc/profile
在 /etc/ld.so.conf.d/加入文件 cuda.conf, 内容如下
/usr/local/cuda-8.0/lib64
然后运行
sudo ldconfig
然后重新启动 sudo reboot now
或 直接启动图形界面 sudo /etc/init.d/lightdm start
1.3.4检测CUDA
检查cuda是否配置好,在命令行中执行以下命令。
nvcc --version #会提示安装toolkit,
然后重启系统 安装samples测试,也可以跳过
cd /usr/local/cuda-8.0/samples/
sudo make all -j16
cd bin/x86_64/linux/release
./deviceQuery
如果现实一些关于GPU的信息,则说明安装成功。
1.4 配置cuDNN
cuDNN是GPU加速计算深层神经网络的库。 首先去官网下载cuDNN,需要注册一个账号才能下载。
下载cuDNN5.1之后进行解压和复制
mv cudnn-8.0-linux-x64-v5.1.solitairetheme8 cudnn-8.0-linux-x64-v5.1.tgz
tar -xvf cudnn-8.0-linux-x64-v5.1.tgz
cd ./cuda/include
sudo cp cudnn.h /usr/local/cuda-8.0/include/ #复制头文件
cd ../lib64
sudo cp libcudnn.* /usr/local/cuda-8.0/lib64/ #这里只复制了一个文件,因为复制软连接时报错
cd /usr/local/cuda-8.0/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 #生成软链接
sudo chmod a+r /usr/local/cuda-8.0/include/cudnn.h
sudo chmod a+r /usr/local/cuda-8.0/lib64/libcudnn* #通常已经有r权限
sudo ldconfig
1.5 安装opencv3.1 (3.2会在编译到40%的时候报错,未能解决)
请确认已经安装了前面提到的opencv依赖项,如没有安装请现在安装官网下载的不支持CUDA8.0,从 https://github.com/opencv/opencv 下载Opencv,并将其解压到你要安装的位置,假设解压到了/home/opencv。 安装前准备,创建编译文件夹:
sudo git clone https://github.com/daveselinger/opencv #这个网页提供了可使用cuda8.0的opencv3.1
sudo git checkout 3.1.0-with-cuda8 #这步没有操作也编译通过了
cd opencv/
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
sudo make -j $(($(nproc) + 1))
以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:
sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo apt-get update
然后重启系统
1.6 配置caffe
1.6.1 下载
在 https://github.com/BVLC/caffe 上下载,解压到合适位置,如根目录
git clone https://github.com/BVLC/caffe.git #下载
cd ~/caffe #进入下载好的目录
cp Makefile.config.example Makefile.config
sudo vim Makefile.config
对Makefile.config文件进行修改
USE_CUDNN := 1
PYTHON_INCLUDE := /usr/include/python2.7 /usr/lib/python2.7/dist-packages/numpy/core/include
WITH_PYTHON_LAYER := 1
CUDA_DIR := /usr/local/cuda-8.0
OPENCV_VERSION := 3
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
对Makefile文件进行修改
#将409行:NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) 替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
对/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!
# 解决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
安装python依赖项(非必需)
cd python
for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done
然后编译
cd .. #进入caffe主目录
make all -j $(($(nproc) + 1))
make test # 报错也不影响使用
make runtest # 报错也不影响使用
make pycaffe
make distribute
将caffe加入python的路径
sudo vim ~/.bashrc
#添加
export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH # 改成自己的路径
source ~/.bashrc
2 测试
下载数据预处理和重建lmdb文件
cd $CAFFE_ROOT
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh #测试
3 可能会出现的问题
3.1 “fatal error: hdf5.h: 没有那个文件或目录”
解决办法:
- step1:在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。
将: INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 替换为: INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
- stept2:在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。
将: 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
3.2 “libcudart.so.8.0 cannot open shared object file: No such file or directory”
解决办法是将一些文件复制到/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