It's our wits that make us men.

caffe配置:Ubuntu16.04_64+CUDA8.0

Posted on By WANG T.F.

电脑配置:

  • 系统: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

CUDA8.0支持列表

检测内核版本: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

CUDA下载

这里选择的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,需要注册一个账号才能下载。

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