准备步骤:安装ssh远程登录,以方便两台电脑通过FileZilla传输文件。我的所有资料都存在windows的电脑上(不是双系统),没有该需要的可忽略此步骤。
ubuntu系统中默认没有安装ssh程序,可通过以下命令安装:
sudo apt-get install openssh-client
sudo apt-get install openssh-server
ssh的端口号一般为22.在windows上开启FileZilla,设置如图:
连接成功,即可直接传输文件。
一、安装caffe配置依赖项
sudo apt-get install libprotobuf-dev protobuf-compiler libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-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 libgflags-dev libgoogle-glog-dev liblmdb-dev
配置一些基本的环境变量
vim ~/.bashrc 在最后加入:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
二. 安装NVIDIA驱动
可直接按照NVIDIA官网上的安装方法安装,由于我安装的时候,总是失败,本文记录的方法是唯一成功的方法。
搜索计算机->附件驱动
更改后重启后即可验证:nvidia-smi,出现下图信息即为成功
如果出现了你的GPU列表,则说明驱动安装成功了。另外也可以通过
nvidia-settings
查看自己机器上详细的GPU信息,本人机器的信息如下:
三. 安装CUDA
CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。
(1)下载CUDA
首先在官网上(https://developer.nvidia.com/cuda-downloads)下载CUDA:
(2)安装CUDA
下载完成后执行以下命令:
sudo sh cuda_8.0.27_linux.run
注意:执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia361驱动时,一定要选择否,因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可(选择是会出错)
(3)环境变量配置
打开~/.bashrc文件:
sudo vim ~/.bashrc
将以下内容写入到~/.bashrc尾部:
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}}
这一步可使环境变量生效,也可在下一步配置玩cudnn之后再生效
(生效方法:切换到root用户下,source ~/.bashrc,ctrl+D退出root用户,输入sudo updatedb)
四、 配置cudnn
cuDNN是GPU加速计算深层神经网络的库。
首先去官网(https://developer.nvidia.com/rdp/cudnn-download)下载cuDNN,可能需要注册一个账号才能下载。我选择的下载版本号如下图:
下载cuDNN5.1之后进行解压,cd进入cuDNN5.1解压之后的include目录,在命令行进行如下操作:
sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
再将cd进入lib64目录下的动态文件进行复制和链接:
sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库
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 #生成软链接
上一步配置之后,可不用再重新配置,也可两部分都配置
然后设置环境变量和动态链接库,在命令行输入:
sudo gedit /etc/profile
在打开的文件末尾加入:
export PATH = /usr/local/cuda/bin:$PATH
保存之后,创建链接文件:
sudo vim /etc/ld.so.conf.d/cuda.conf
按下键盘i进行编辑,输入链接库位置:
/usr/local/cuda/lib64
然后按esc,输入:wq保存退出。并在终端输入:
sudo ldconfig
使链接立即生效
测试cuda的samples
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
如果看到一些GPU的信息说明安装成功,如下图:
五、 编译opencv3.1
A.首先安装opencv依赖项
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libtbb-dev
B.编译opencv
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D INSTALL_PYTHON_EXAMPLES=ON -D WITH_TIFF=ON -D BUILD_TIFF=OFF -D OPENCV_EXTRA_MODULES_PATH=/home/july/software/opencv_contrib-3.2.0/modules ..
C. 安装
sudo make install –j4
编译安装完成后,将编译好的python里的库cv2.so copy至anaconda2/lib/python2.7/site-packages内即可在python中使用,如下图:
此步出现的问题:
1./home/july/software/opencv-3.2.0/build/opencv_lapack.h:2:45:fatalerror:LAPACKE_H_PATH-NOTFOUND/lapacke.h: 没有那个文件或目录
**解决方法:**sudo apt-get install liblapacke-dev checkinstall
六、安装Anaconda2
从官网下载所需的linux版本的可执行文件,执行如下命令:
bash Anaconda2-4.2.0-Linux-x86_64.sh
后面就根据提示执行就可以了,最后一步添加环境变量的部分选择是,它会自动添加到用户环境变量文件~/.bashrc文件中,不要手动添加到/etc/profile这个系统环境变量中,因为anaconda有几个链接库和系统链接库文件类似,如果添加到/etc/profile文件中,有可能会造成冲突,导致意外错误。安装完成后,为了防止编译caffe时文件冲突造成的一些错误,需替换掉anaconda包内的ibstdc++,libgomp这几个4.x版本的gcc编译动态库软连接:
rm -rf /home/your_path/anaconda2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/lib/libstdc++.so.6
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /home/your_path/anaconda2/lib/libstdc++.so.6
ln -s /home/your_path/anaconda2/lib/libstdc++.so.6 /home/your_path/anaconda2/lib/libstdc++.so
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6
ln -s /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so.6 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libstdc++.so
rm -rf /home/your_path/anaconda2/lib/libgomp.so
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so
rm -rf /home/your_path/anaconda2/lib/libgomp.so.1
rm -rf /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1
ln -s /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 /home/your_path/anaconda2/lib/libgomp.so.1
ln -s /home/your_path/anaconda2/lib/libgomp.so.1 /home/your_path/anaconda2/lib/libgomp.so
ln -s /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1
ln -s /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so.1 /home/your_path/anaconda2/pkgs/libgcc-4.8.5-2/lib/libgomp.so
注意:在第一步时安装了libprotobuf-dev protobuf-compiler,到此步骤为止,conda list列表内不能有任何关于protobuf的文件,不然编译caffe时会因文件冲突而报错(一次性的解决方法在最后会给出)。
七:安装编译caffe
(1)从github上获取caffe:
git clone https://github.com/BVLC/caffe.git
(2)进入caffe目录,并复制出所需的Makefile.config文件
sudo cp Makefile.config.example Makefile.config
(3)修改Makefile.config文件
vim Makefile.config
需要修改的地方
#USE_CUDNN := 1 修改成: USE_CUDNN := 1
#OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 3
注释掉原来的PYTHON_INCLUDE,使用ANACONDA的配置
ANACONDA_HOME := $(HOME)/anaconda
修改为:
ANACONDA_HOME := $(HOME)/anaconda2
# PYTHON_INCLUDE := /usr/include/python2.7 \
# /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
#PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
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
(4)然后修改makefile文件
415行
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
然后再大概181行的地方做修改
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
替换为
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui
(5)编辑/usr/local/cuda/include/host_config.h (119行)
#error-- unsupported GNU version! gcc versions later than 5 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 5 are not supported!
更改完文件,保存。
(6)编译caffe
mkdir build
cd build
cmake ..
make all –j4
编译过程中会可能会出现的错误:
a、usr/local/lib/libopencv_imgcodecs.so.3.2.0对‘TIFFReadRGBATile@LIBTIFF_4.0’未定义的引用
解决方法:编译opencv的时候,需要加上-D WITH_TIFF=ON -D BUILD_TIFF=OFF 参考链接:http://www.cnblogs.com/taopanpan/p/4263951.html 还需要删除anaconda/lib/下面的libtiff*
b、/usr/lib/x86_64-linux-gnu/libx264.so.142:对‘__exp_finite@GLIBC_2.15’未定义的引用
解决方法:如果你装了anaconda包的话,删除anaconda/lib/下面的 libm* 命令:sudo rm -rf libm*
(7)编译caffe的python接口
sudo make pycaffe
编译完成后,添加路径到环境变量
sudo gedit ~/.bashrc
添加上caffe的路径:
export PYTHONPATH=/home/july/software/caffe/python:$ PYTHONPATH
保存后在root用户下执行source ~/.bashrc,按ctrl+D切换出root用户,执行sudo updated 使更改的环境变量生效
(8)测试能否正常使用
根据本文安装方式,一定会出现此种错误,因为anaconda环境里没有任何关于protobuf的内容,解决方法:
再次进行测试:
到此为止,caffe安装成功,可在anaconda的python包中正常使用。
八、测试mnist数据集
在终端上执行:
cd ~/caffe/
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
可以查看下载的数据:
继续执行:
./examples/mnist/train_lenet.sh
关于protobuf的问题:
如果在编译caffe之前,安装了libprotobuf-dev protobuf-compiler,在anaconda中也安装了protobuf,会因冲突出现错误:
../lib/libcaffe.so: undefined reference to ‘google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char*)
可用本文中规避的方法安装,但测试后anaconda中安装了protobuf,如果再因需要编译caffe的话,可能会因为忽略这个问题而在此踩坑。嫌麻烦的可采用一次性解决方法,安装anaconda2后,将之前安装的libprotobuf-dev protobuf-compiler卸载,直接下载protobuf包,自己重新编译(方法百度可得),排除冲突即可。
关于import cv2报错的问题
装了anaconda和OpenCV,但import cv2报错:no module named cv2
要把opencv编译出来的cv2.so拷贝到anaconda的lib目录下 ,然后就好了
但这时在其他路径运行时还是报错 no module cv2 :需要在bashrc里面添加anaconda的路径
写在最后的话:本文的步骤是一步一步经过操作实现过的,需要参考的童鞋,要根据自己的实际情况进行配置,切勿完全照搬,可留言或加群交流:521370281