本人研究生的方向是计算机视觉和机器学习,因最近需要学习深度学习,并在caffe平台上训练模型,自己捣鼓了一段时间,总算在windows10和ubun16.04上把caffe配置好了。因在ubuntu上配置比windows10上麻烦一点,这里只给出了在ubuntu上的配置过程。
ps:该过程笔者在两台电脑上均配置成功,这里以在台式电脑上配置为例(其实过程都一样,就是感觉用笔记本跑caffe有点吃不消)
1. 配置环境
- linux(ubuntu 16.04)
- caffe-master
- opencv-2.4.13
- NVIDIA GTX 1050TI
- Cuda-8.0
cuDNN-5.1
配置内容包括caffe主模块(即:caffe相关依赖库的安装和caffe-master的编译)和加速模块(即:CUDA和cuDNN加速模块的配置)。
本人在配置过程中主要参考了以下两篇教程:
http://www.linuxdiyf.com/linux/21717.html
http://www.linuxdiyf.com/linux/24659.html
这里强烈建议两点:
- 先配置主模块,等编译成功后再配置加速模块,要不然到最后遇到各种乱七八糟的错误都不知道是哪里出了问题。
- 有条件用GPU跑的就不要用CPU,因为速度真的不是一个级别的。
话不多说,下面进入配置过程。
2. 配置过程
Part 1. caffe主模块配置
1. 安装相关依赖库
# update
sudo apt upgrade
sudo apt update
# essential packages
sudo apt-get install build-essential
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install python-dev
sudo apt-get install python-numpy
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler libhdf5-serial-dev
2. 安装opencv
下载地址:http://opencv.org/downloads.html,下载界面如下,根据自己的情况选择下载。
经测验,opencv-2.4.13和opencv-3.1.0都能够兼容caffe,不过看到网上有人说3.0版本不支持,这里我也没试过,有兴趣的可以自己尝试一下。这里我以open-2.4.13为例。
1). 官网下载linux下的opencv-2.4.13包
假设这里我已经解压到:home/Software/opencv-2.4.13
2). 编译opencv-2.4.13
这步需要保持联网,因为需要下载一些依赖库。
# compile opencv
cd home/Software/opencv-2.4.13
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8
如果在执行cmake那一行系统提示没有cmake工具时,执行如下代码安装cmake工具再重新执行该步骤即可。
sudo apt install cmake
最后一步中的-j8表示我的电脑是8核的,如果电脑配置不高可以直接输入“make”就行,就是速度会慢一点,耐心等待到100%就好。
3). 安装opencv-2.4.13
sudo make install
以上几步配置成功后就可以先开始caffe(无GPU情况)的编译了。
3. 编译caffe(无GPU)
1). 下载好caffe-maste压缩包
这里假设我已经将文件解压到:home/Software/caffe-master
2). 修改配置文件
找到caffe-master目录下的Makefile.config.example文件,复制一份到当前路径并命名为Makefile.config(不要直接改源文件,因为你以后如何需要更改配置可以重新复制一份)找到并修改如下代码:
# CPU-only switch (uncomment to build without GPU support).
CPU_ONLY := 1
3). 编译caffe
在caffe-master根路径下打开terminal,输入如下代码:
mkdir build
cd build
cmake ..
make all -j8
同样,耐心等待到编译到100%,如果没有错误就OK 了,如果你电脑没有GPU那可以直接跑一下caffe自带的例子了(提示一下,速度有点慢,但你开心就好。)
Part 2. caffe加速模块的配置
对于那些追求速度的同志们来说,你们的路才走到一半,下面的配置才是最重要的也是最容易出现各种各样错误的,请提前做好心理准备。。。
1. 安装NVIDIA驱动
这里有两种方法,第一种简答,但不一定适用于所有的电脑,可以先试试:
方法一:
进入ubuntu系统的software & updates ,然后点击addtional drivers那一栏,如果系统能检测到相关的NVIDIA驱动,直接点击安装即可。
方法二:
1). 下载显卡驱动
从NVIDIA官网(http://www.nvidia.cn/)查询适合你系统的显卡驱动下载下来,如下图。假设这里已经保存到home/Downloads/NVIDIA-Linux-x86_64-xxx.xx.run(xxx.xx为驱动的版本,由自己的电脑决定)
2). 安装显卡驱动
在home/Downloads/下打开terminal,依次输入以下代码:
sudo init 3
chmod +x NVIDIA-Linux-x86_64-xxx.xx.run
sudo ./NVIDIA-Linux-x86_64-xxx.xx.run
sudo init 5
第一行和最后一行是切换ubuntu系统的工作模式,执行完第一行后,通过ctrl+alt+f1键进入命令行模式,然后再输入剩下的代码;
第二行是给.run文件权限,第三行是执行安装代码,按照提示输入命令就好;
安装成功后,通过第四行代码切换回图形界面(可以发现分辨率发生了变化),因为显卡驱动已经安装成功了,这是可以通过如下命令查看显卡版本信息:
sudo nvcc -V
2. 安装cuda
cuda是NVIDIA显卡的加速工具,有了它,我们跑caffe的速度可以翻几十倍(当然这取决于你的GPU有多给力)。
1). 下载cuda
进入 https://developer.nvidia.com/cuda-downloads,这里需要先注册一个账号,然后填一下问卷,一步步来就好,之后就可以选择cuda的版本,根据自己的系统来就好,如下图所示。
假设这里我已经下载并解压到home/Downloads/cuda_8.0.44_linux.run
2). 安装cuda
进入文件路径,执行如下代码:
chmod +x cuda_8.0.44_linux.run
sudo ./cuda_8.0.44_linux.run
这里会让你输入一些命令,先accept,之后让你选择是否安装图形显卡驱动时选no,因为之前已经安装过了,后面就是yes和默认就好。
3). 配置环境变量
打开.bashrc文件
# open the ".bashrc"
sudo vim ~/.bashrc
输入‘i’进入INSERT模式,然后在文件最后加入以下代码(注意等号前后不要有空格):
# add the following codes in the end of the file
export PATH=/usr/local/cuda-8.0/bin/${PATH:+:/${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64/${LD_LIBRARY_PATH:+:/${LD_LIBRARY_PATH}}
按‘esc’键推出INSERT模式,之后按:wq保存推出。
如果打开文件失败,是因为没有安装vim,通过如下代码安装即可:
# install "vim"
sudo apt install vim
4). 检测cuda是否安装成功
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery
如果看到cuda信息,说明安装成功,重启一下电脑。
3. 配置cuDNN
1). 下载cuDNN-5.1
假设这里已经下载并解压到:home/Software/cuda。(cuDNN压缩包解压后是一个cuda文件夹)
2). 拷贝头文件和库文件
进入解压后的路径:home/Software,打开终端,执行如下代码:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
3). 生成软连接
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so
在网上看到很多教程到这里就结束了,但其实cuDNN还没有配置成功,这一点体现在对caffe进行编译时,会出现cuDnn : NOT FOUND的配置信息(如下图),当然,整个过程中并不会报错,只是你不能享受到cuDnn带来的加速了。
在执行了下面的步骤后,可以成功解决此问题
4). 设置环境变量和动态链接库
打开/etc/profile文件
sudo gedit /etc/profile
在文件最后加入如下代码并保存退出:
export PATH=/usr/local/cuda/bin:$PATH
打开文件/etc/ld.so.conf.d/cuda.conf
sudo vim /etc/ld.so.conf.d/cuda.conf
在文件中输入如下代码,并保存退出:
/usr/local/cuda/lib64
在终端输入以下代码,让链接文件生效:
sudo ldconfig
在编译过程的时候发现系统能够检测到cuDNN了,如下图:
这里由于我是在两台不同的电脑上截的图,所以前后GPU arch(s)的信息会不一样,后来我测试了一下速度,用cuDnn加速cuda8.0在mnist数据集上的速度大约是只用cuda的4倍(当然,不同电脑有所差异)
4. 编译caffe(GPU+cuda+cuDNN)
(如需要配置python接口,请直接跳到第5步)
1). 修改Makefile.config配置文件
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1
2). 清除旧的编译文件
在caffe-master下打卡终端,输入如下代码:
make clean
3). 重新编译caffe
mkdir build
cd build
cmake ..
make all -j8
耐心等待吧,你的caffe即将配置完成!
5. 为caffe配置python接口(可选)
1). caffe的python环境配置
安装python的一些依赖包。进入caffe-master/python,在该路径下打开terminal,输入以下代码:
pip install -r requirements.txt
依赖包安装完成后,在命令行中输入如下代码:
sudo gedit /etc/profile
在文件最后添加一行代码(caffe/python的路径)
# vicky是我的电脑用户名
export PYTHONPATH=/home/vicky/Software/caffe-master/python:$PYTHONPATH
保存退出后,执行如下代码使刚刚的配置生效:
source /etc/profile
2). 修改Makefile.configure文件
要修改的代码如下:
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1
## 如果要用python,需要继续修改下面的代码
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib
# PYTHON_LIB := $(ANACONDA_HOME)/lib
# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1
# Whatever else you find you need goes here.
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/hdf5/serial/
3). 编译caffe
进入caffe-master根目录下,首先清除旧的编译文件:
make clean
编译全部文件:
make all -j8
编译pycaffe:
make pycaffe
编译无报错后即全部编译完成,可以在python环境下导入caffe模块,如下图:
3. 总结
回想本人在配置caffe过程中前前后后重新装了好几次ubuntu系统,总之遇到各种坑,遇到问题就去百度,一步步排除问题。
以上教程是本人亲自实践有效的,如果有感觉不合理的地方,欢迎指出。本人感激不尽!也希望能和同行的各位朋友相互交流,共同学习。
配置好之后,可以先学习一下caffe自带的例子,这一块网上教程很多,这里就不多废话了。有时间在下一篇博客中记录。