本文内容比较多,参考了很多博客,主要如下:
https://www.cnblogs.com/go-better/p/7161006.html
https://blog.csdn.net/a_z666666/article/details/72853346
https://blog.csdn.net/u012033124/article/details/61200524
https://blog.csdn.net/lernering/article/details/78615464
https://blog.csdn.net/kemgine/article/details/78781377
原本在Ubuntu下配置过一个无GPU版本的,相对简单很多,这次由于需要,必须配置cuda的caffe,踩了很多坑,浪费了大半天,所以把整个过程记录下来。
本人的硬件配置为i7 4720HQ + GTX 960M系统为Win10 + Ubuntu16.04;装过很多回双系统,原以为没什么问题,但是在装好双系统后在win下面用easyBCD设置启动项后,Linux的启动项启动失败,原因没有找着,最后在BIOS中直接设置的是Ubuntu优先启动。(若有哪个大神知道这方面的原因,希望周知一下,谢谢)
Ubuntu系统最开始一些配置:
1.在右上角的设置中,点击system settings,后选择Software&Update
勾选source code ,点开Download from,选择other,在里面选择中国的源,例如aliyun。
2.
sudo dpkg -i mentohust***.deb #本人校园网,所使用mentohust登录锐捷 sudo apt-get install vim #比较常用的一个编辑器 #安装搜狗输入法 http://pinyin.sogou.com/linux/?r=pinyin #根据自己需要去更改系统主题什么的,和需要的各种软件
安装caffe的相关依赖项
这一部分相对比较简单,应该都不会有什么问题
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev 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
安装NVIDIA驱动
这一部分与网上多数安装方式相比复杂很多,但是我是照着参考的几篇博客方式出现错误(在登录桌面是反复要求输入密码)才用的这种方式。大家要是出现同样的问题可以用一下
这一部分参考:https://blog.csdn.net/lernering/article/details/78615464
1.输入命令
sudo nvidia-smi
看一下是否有装好的驱动?
2.没有驱动就先去官网 http://www.nvidia.com/Download/index.aspx?lang=en-us 查看适合自己显卡的驱动并下载:驱动文件后缀名应当是以.run结尾的。注意系统的位数,我下载的文件是NVIDIA-Linux-x86_64-390.48.run
3.删除原有驱动(这一步是笔者在装失败了一次之后重新装的)
sudo apt-get remove --purge nvidia*
4.禁用nouveau驱动:(Ubuntu自带的显卡驱动)
编辑 /etc/modprobe.d/blacklist.conf 文件,添加以下内容:
blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv blacklist nvidiafb
新建blacklist-nouveau.conf文件,
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
并在文件中输入一下命令,保存并退出
blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0 alias nouveau off alias lbm-nouveau off
sudo reboot 重启,再查看一下nouveau模块是否被加载,如没输出就可以
lsmod | grep nouveau
5.开始装驱动,解决问题根本之处在于添加参数: –no-opengl-files
sudo service lightdm stop #关闭图形界面 sudo ./NVIDIA-Linux-x86_64-xxx.run --no-opengl-files sudo service lightdm start #开启图形界面
6.sudo reboot 重启,就可以了
可以再用nvidia-smi 来查看GPU输出信息
安装CUDA
1.首先从官网(https://developer.nvidia.com/cuda-downloads)下载CUDA我用的是9.1版本的
2.安装
sudo chmod 777 cuda_9.1.85_387.26_linux.run sudo ./cuda_9.1.85_387.26_linux.run
由于后续内容很长,必须一致摁住enter才可以一致往下看,在最后的地方有安装的配置说明。
执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia驱动时,一定要选择否:Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 ***?
3.环境变量配置
sudo gedit ~/.bashrc
将以下内容写入到~/.bashrc尾部:
export PATH=/usr/local/cuda-9.1/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} 注意:以上需要添加的部分会在cuda安装完成后有路径输出
4.在/etc/profile文件中添加CUDA环境变量:
sudo gedit /etc/profile
在结尾加上:
PATH=/usr/local/cuda-9.1/bin:$PATH export PATH
source /etc/profile #使环境变量立即生效
5.同时添加lib库路径,在 /etc/ld.so.conf.d/新建文件 cuda.conf
sudo gedit /etc/ld.so.conf.d/cuda.conf
在文中加入下面内容:
/usr/local/cuda-9.1/lib64
执行下列命令使之立刻生效:
sudo ldconfig
6.测试CUDA的samples
cd /usr/local/cuda-9.1/samples/1_Utilities/deviceQuery make #如果权限不够,用 sudo make sudo ./deviceQuery
如果能过显示一些关于GPU的信息,则说明安装成功
注:有几篇博客在配置环境变量是只改变了~/.bashrc文件,大家可以参考一下:
https://blog.csdn.net/a_z666666/article/details/72853346
配置cuDNN
这一部分我弄的出了些差错,如果搞定了我再补一下。
配置Opencv2.4.13
到官网http://opencv.org/downloads.html下载压缩包,在/home目录本地解压1.进入OpenCV2.4.13所在的文件夹
cd /home/opencv-2.4.13
2.安装依赖库和cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev sudo apt-get install cmake
3.安装完cmake之后执行命令
cmake . sudo make
之后就是漫长的编译过程
4.开始安装
sudo make install
5.执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些
OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到:
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加:/usr/local/lib
然后保存退出,执行如下命令使得刚才的配置路径生效
sudo ldconfig
6.配置bash,执行如下命令
sudo gedit /etc/bash.bashrc
在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,然后执行如下命令使得配置生效
sudo source /etc/bash.bashrc
之后更新database
sudo updatedb
至此,Linux\Ubuntu16.04环境下配置OpenCV已经全部完成,下面用一个简单的程序进行测试
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat srcImage = imread("mayuyu.jpg"); imshow("srcIMage",srcImage); waitKey(0); return 0; }
并在相同目录下存放一张mayuyu.jpg编译OpenCV程序命令为:
g++ pkg-config opencv --cflags opencv.cpp -o opencv pkg-config opencv --libs
编译没有错误运行 ./opencv
配置caffe
1.从GitHub上https://github.com/BVLC/caffe下载caffe
下载完成后,会在家目录下的下载里找到caffe-master.zip,用unzip命令解压到家目录下,然后重命名为caffe
2.复制Makefileconfig
sudo cp Makefile.config.example Makefile.config
3.根据需求修改配置文件
sudo gedit Makefile.config
a.若使用cudnn,则将
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
b.若使用的opencv版本是3的,则
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
c.若要使用python来编写layer,则
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
d.重要的一项 :
将# Whatever else you find you need goes here. 下面的
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 2 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial 2 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文件
打开caffe文件夹下makefile文件,
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
后面还有根据安装opencv3以上的版本所做的修改:可以参考:
https://www.cnblogs.com/go-better/p/7161006.html
5编译和测试
make all -j8 make test -j8 make runtest -j8 #使用CPU多核同时进行编译
注:在make all之后,由于cuda的版本与caffe config文件中的需求版本不大相同,会出现如下错误
nvcc fatal : Unsupported gpu architecture 'compute_20'
处理方式如下:
仔细查看了一下 /caffe/Makefile.config 中 CUDA_ARCH 设置未按规定设置: # CUDA architecture setting: going with all of them. # For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility. # For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility. # For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility. CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \ -gencode arch=compute_20,code=sm_21 \ -gencode arch=compute_30,code=sm_30 \ -gencode arch=compute_35,code=sm_35 \ -gencode arch=compute_50,code=sm_50 \ -gencode arch=compute_52,code=sm_52 \ -gencode arch=compute_60,code=sm_60 \ -gencode arch=compute_61,code=sm_61 \ -gencode arch=compute_61,code=compute_61 因为我装的是CUDA9.1所以把下面这两行删除就可以了 -gencode arch=compute_20,code=sm_20 \ -gencode arch=compute_20,code=sm_21 \
编译pycaffe
在caffe根目录的python文件夹下,有一个requirements.txt的清单文件,上面列出了需要的依赖库,按照这个清单安装就可以了。
在安装scipy库的时候,需要fortran编译器(gfortran),如果没有这个编译器就会报错,因此,我们可以先安装一下。
首先回到caffe的根目录,然后执行安装代码:
1 cd ~/caffe 2 sudo apt-get install gfortran 3 cd ./python 4 for req in $(cat requirements.txt); do pip install $req; done
安装完成以后,再次回到caffe根目录我们可以执行:
1 cd .. 2 sudo pip install -r python/requirements.txt
就会看到,安装成功的,都会显示Requirement already satisfied, 没有安装成功的,会继续安装。
编译python接口:
make pycaffe -j8
配置环境变量,以便python调用:
sudo gedit ~/.bashrc
将
export PYTHONPATH=/home/caffe/python:$PYTHONPATH
添加到文件中
最后