Caffe安装 Ubuntu 18.04+CUDA 9.0+Anaconda2
一、 关于Caffe
Caffe是一个常用的深度学习框架,具有表达力强、速度快和模块化的思想,由伯克利视觉学习中心(Berkeley AI Research,BVLC)和社区贡献者开发。Yangqing Jia在加州大学伯克利分校攻读博士期间创建了这个项目。Caffe主要应用在视频、图像处理方面的应用上。
二、 安装环境
OS:Ubuntu 18.04 LTS
Python:Anaconda2-5.2.0-Linux-x86_64(Python 2.7)
NVIDIA Driver:390.48
CUDA:9.0(包括Patch 1-3)
cuDNN:v7.0.5
OpenCV:3.2.0
Boost:1.65
三、 安装步骤
1. 安装和配置Anaconda2
1.1 下载Anaconda2
下载地址:https://www.anaconda.com/download/#linux,选择Python 2.7版本下载,文件为.sh后缀
1.2 安装
进入到.sh文件的目录,打开终端运行:
bash Anaconda2-5.2.0-Linux-x86_64.sh
按Enter完成End User License Agreement的浏览,输入yes同意协议:
确认默认安装路径(/home/username/anaconda)或指定安装路径:
输入yes确认将Anaconda2添加到环境变量:
输入no跳过安装VSCode,完成安装:
1.3 切换默认Python为Anaconda2
运行以下命令,其中/usr/local/anaconda2为安装路径
sudo update-alternatives --install /usr/bin/python python /usr/local/anaconda2/bin/python2 100
sudo ldconfig
运行python可以看到已经切换为Anaconda2 Python:
注:该命令可以切换Python版本:
sudo update-alternatives --config python
2. 安装NVIDIA驱动
2.1 更新软件源
sudo apt-get update
sudo apt-get upgrade
2.2 安装驱动
通过以下命令查看待安装的驱动:
ubuntu-drivers devices
自动进行驱动安装:
sudo ubuntu-drivers autoinstall
重新启动完成安装:
sudo reboot
2.3 验证安装
运行命令以下命令,可以看到GPU信息:
nvidia-smi
3. 降级GCC版本
由于Ubuntu 18.04自带GCC 7.0版本过高,与CUDA 9.0可能存在兼容性问题,因此需要进行降级,具体步骤如下:
3.1 安装GCC 5.5.0
sudo apt-get install gcc-5 g++-5
3.2 切换默认GCC版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
3.3 验证GCC版本
gcc --version
4. 安装CUDA
4.1 安装依赖库
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev
sudo apt-get install libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
4.2 下载CUDA 9.0
下载Base Installer和3个Patch,下载地址:
https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1704&target_type=deblocal
4.3 安装
进入到下载完成的安装文件路径,依次运行以下命令:
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
如果出现以下错误:
The following packages have unmet dependencies:
cuda : Depends: cuda-9-0 (>= 9.0.176) but it is not going to beinstalled
E: Unable to correct problems, you have held broken packages.
原因可能为Ubuntu的源存在问题,可以进行以下步骤:
1) 备份原始源文件:
sudo cp /etc/apt/sources.list /etc/apt/sources_backup.list
2) 打开源列表:
sudo vim /etc/apt/sources.list
3) 在最后加入以下内容:
deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
4) 重新更新源和并安装CUDA:
sudo apt-get update
sudo apt-get install cuda
在/usr/local目录下可以看到cuda和cuda-9.0两个文件夹,表明安装成功。
4.4 环境变量配置
1) 打开环境变量文件:
sudo vim ~/.bashrc
2) 加入以下内容,其中CUDA_HOME为上一步所看到的路径:
export CUDA_HOME=/usr/local/cuda-9.0
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/extras/CUPTI/lib64:$LD_LIBRARY_PATHs
export PATH=/usr/local/cuda-9.0/bin:$PATH
3) 更新变量:
source ~/.bashrc
4.5 验证安装
运行以下命令,可以看到CUDA的版本:
nvcc -V
1)进入例子文件
cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
2)执行make命令
sudo make
3) 运行Demo
./deviceQuery
如果结果有GPU的信息,说明安装成功。
5. 安装cuDNN
5.1 下载cuDNN
下载与CUDA 9.0对应的Linux版本,下载地址:https://developer.nvidia.com/rdp/cudnn-archive
5.2 解压并安装
tar -xvzf cudnn-9.0-linux-x64-v7.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
6. 安装Caffe
6.1 安装依赖库
sudo apt install caffe-cuda
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
sudo apt-get install libhdf5-serial-dev protobuf-compiler
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 libgflags-dev libgoogle-glog-dev liblmdb-dev
6.2 下载Caffe
在将要安装Caffe的路径打开终端,运行:
git clone https://github.com/BVLC/caffe.git
6.3 配置Caffe
1) 进入Caffe目录,复制模板文件:
cd caffe
sudo cp Makefile.config.example Makefile.config
2) 对Caffe的Makefile.config进行修改:
sudo vim Makefile.config
3) 取消第5行注释,使用cuDNN:
4) 取消第21行注释,使用OpenCV 3:
5) 将37和38行内容注释,修改后为:
6) 将51行附近BLAS改为open:
7) 将70和71行附近的PHTHON_INCLUDE注释,修改下方ANACONDA_HOME为之前的安装路径,取消注释ANACONDA_HOME下方的PHTHON_INCLUDE,如下图所示:
8) 修改第87行附近的PYTHON_LIB:
9) 取消注释94行附近的WITH_PYTHON_LAYER:
10) 修改97和98行附近的变量为:
INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include
LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
11) 对Makefile进行修改:
sudo vim Makefile
12) 将第415行修改为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
13) 进入caffe的python目录
cd python
14) 运行以下命令,安装剩下的依赖(可能部分有错,可以尝试忽略)
for req in $(cat requirements.txt); do pip install $req; done
sudo pip install --upgrade pip
pip install python-dateutil==2.6.1
pip install argparse
pip install msgpack
注:如果遇到Import Error:cannot import name main,可以参考第四章第3节解决。
6.4 编译和安装Caffe
1)进入Caffe目录,依次运行以下命令(其中6为CPU的核心数,根据实际配置修改):
sudo make clean
2)编译
sudo make all -j6
3)编译测试
sudo make test -j6
4)拷贝库文件(其中HOME/anaconda2为Anaconda2的安装路径)
sudo cp $HOME/anaconda2/lib/libhdf5_hl.so.100.1.0 /usr/lib/
sudo cp $HOME/anaconda2/lib/libhdf5_hl.so.100.1.0 /usr/lib/x86_64-linux-gnu/
sudo cp -s $HOME/anaconda2/lib/libhdf5.so.101.1.0 /usr/lib/libhdf5.so.101
sudo cp -s $HOME/anaconda2/lib/libhdf5.so.101.1.0 /usr/lib/x86_64-linux-gnu/libhdf5.so.101
sudo ldconfig
6.5 验证安装
1)测试1:自带测试
在Caffe目录运行
sudo make runtest -j6
测试结果通过如下图所示:
2)测试2:基于数据集的测试
下载数据集:
sudo ./data/mnist/get_mnist.sh
转换数据格式:
sudo ./examples/mnist/create_mnist.sh
训练:
sudo ./examples/mnist/train_lenet.sh
在Caffe目录下创建文件,并修改内容:
touch test_lenet.sh
sudo vim test_lenet.sh
文件内容为:
./build/tools/caffe.bin test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100
测试:
sudo sh test_lenet.sh
测试正常的结果如下图:
6.6 安装和测试pycaffe
1)安装pycaffe
在Caffe目录运行:
sudo apt-get install python-numpy
sudo apt-get install graphviz
pip install pydot
sudo make pycaffe -j6
2)编辑环境变量
sudo gedit ~/.bashrc
3)将下面内容加入到打开文件的最后(其中/home/fan/Documents/caffe为caffe的路径)
export PYTHONPATH=/home/fan/Documents/caffe/python:$PYTHONPATH
4)刷新
source ~/.bashrc
5)测试1:自带测试
sudo make pytest
6)测试2:其他测试
python
import caffe
如果不报错即pycaffe安装正确
四、 其他
1. 常见错误:sudo ldconfig时出现“not a symbolic link”
如出现以下错误:
/sbin/ldconfig.real: /usr/lib/libhdf5_hl.so.100 is not a symbolic link
解决步骤:
cd /usr/lib
sudo mv libhdf5_hl.so.100 libhdf5_hl.so.100.org
sudo ln -s libhdf5_hl.so.100.org libhdf5_hl.so.100
sudo ldconfig
2. 常见错误:CUDACC_VER is no longer supported
主要原因:CUDA与Eigen3的版本不兼容,其中的变量名不一致
解决步骤:
1)打开Eigen的头文件
sudo vim /usr/include/eigen3/Eigen/src/Core/util/Macros.h
2)将第402行中的
defined __CUDACC_VER__ && __CUDACC_VER__ >= 80000
替换为
defined __CUDACC_VER_MAJOR__ && __CUDACC_VER_MAJOR__ >= 8
3)将第416行中的
defined(__CUDACC_VER__) && (EIGEN_COMP_CLANG || __CUDACC_VER__ >= 70500)
替换为
defined(__CUDACC_VER_MAJOR__) && (EIGEN_COMP_CLANG || __CUDACC_VER_MAJOR__ >= 7)
4)将第815行中的
defined(__CUDACC_VER__)
替换为
defined(__CUDACC_VER_MAJOR__)
5)完成后重新执行出错之前的命令
3. 常见错误:pip时Import Error: cannot import name main
可能的原因: pip更新后库里面的函数有所变动
解决步骤:
打开pip文件:
sudo vim /usr/bin/pip
将其中的:
from pip import main
if __name__ == '__main__':
sys.exit(main())
替换为:
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
4. 其他可能需要的依赖
pip install protobuf==2.6.1
5. 多GPU环境
需要安装NCCL,参考安装步骤:
https://zhuanlan.zhihu.com/p/33714726
五、 参考资料
[1] https://blog.csdn.net/cau_ayao/article/details/80578600
[2] https://blog.csdn.net/CAU_Ayao/article/details/80582900
[3] https://blog.csdn.net/cham_3/article/details/72141753