Advertisement

ubuntu14.04+cuda8.0+cudnn5.1+caffe+anaconda完整安装指南

阅读量:

本人所用机器的配置为i7 7700+GTX1060 6g

具体可以分为以下步骤:
1、在Windows 7系统中安装双系统版本的Ubuntu 14.04操作系统。
2、进入系统后,按照要求依次安装SSH协议栈以及Caffe相关的依赖库。
3、随后,在系统中依次安装CUDA 8.0版本及CUDNN 5.1版本的开发套件。
4、接着,在环境中添加Anaconda 2虚拟环境以优化软件管理流程。
5、最后,在配置完成后进行caffe的安装过程以确保一切设置正确无误。


1、在win7上安装ubuntu14.04的双系统

具体安装方法详见:http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html

本人在安装过程中设置“安装启动引导器的设备”时选择了/boot分区。这表示在后续的Ubuntu系统中遇到问题时处理会更加便捷。有关如何通过easyBCD修改BIOS的相关教程可以在网上查找并按照指导操作。

(1)在win7上分出空闲硬盘时出现的问题及解决

当在安装Windows 7系统时尝试创建分区时

格式化你要压缩的分区,然后就可以想分多时就分多少。

问题本质应该是你每个分区中的数据存储不是连续的。

(2)本人在安装过程中的存储空间分配如下:

总共空闲硬盘大小200GB

挂载点(主分区) / :44000MB

交换空间(逻辑分区) swap :8192MB

挂载点(逻辑分区) /boot :200MB

用户空间(逻辑分区) /hoom :剩余全部

Note: 在执行分区操作时, 当在一个分区完成之后, 原本应为空闲的区域却被标记为不可用的状态, 解决这个问题的最佳方法通常是先创建逻辑分区再创建主存储区.


2、进入系统,安装ssh和caffe依赖库

复制代码
    一般如果刚装了ubuntu系统,系统会使用自带的Nouveau驱动,画面显示会有问题,所以第一步是改变NVIDIA显卡驱动,如下图所示选择后应用更改就可以了。(同时也省去了禁用nouveau的步骤)
改变显卡驱动

按ctrl+alt+T进入终端
(1)安装ssh

复制代码
    sudo apt-get install ssh

(2)安装依赖库
1)一般依赖项

复制代码
    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

2)BLAS依赖项

复制代码
    sudo apt-get install libatlas-base-dev

或者安装

复制代码
    sudo apt-get install libopenblas-dev

3)python依赖项
安装python及其头文件

复制代码
    sudo apt-get install python
    sudo apt-get install python-dev

安装cython和easydict

复制代码
    sudo pip install cython
    sudo pip install easydict

安装python的其他依赖

复制代码
    sudo apt-get install python-numpy
    sudo apt-get install ipython
    sudo apt-get install ipython-notebook
    sudo apt-get install python-sklearn
    sudo apt-get install python-skimage
    sudo apt-get install python-protobuf
    sudo apt-get install python-devpython-pip

4)谷歌glog和gflags和lmdb依赖项

复制代码
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

请通过访问该网站获取OpenCV 3.0.0版本的软件包,并将其解压后放置在主文件夹中。

在~目录下,终端中输入 unzip opencv-3.0.0.zip 解压

安装cmake: sudo apt-get install cmake
编译: cmake .

注意):当遇到提示需要下载ippicv_linux_20141027.tgz时,请直接从网站https://ncu.dl.sourceforge.net/project/opencvlibrary/3rdparty/ippicv/ippicv_linux_20141027.tgz下载完成后。随后将文件复制到/home/nbj2017/opencv-3.0.0/3rdparty/ippicv/downloads/linux文件夹中。请重新运行cmake命令以完成配置。之后执行make all命令生成所需文件。

复制代码
    if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改为

复制代码
    if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

然后再次运行make all)

su命令进入root
make install
等待安装完成。


3、安装cuda8.0和cudnn5.1

请各位用户在另外一台Windows系统的电脑上使用迅雷下载这两个包,并确保下载完成后使用U盘将这两个文件复制至"主文件夹"中备用。

cuDav8.0的获取途径是访问https://developer.nvidia.com/cuda-downloads这个链接,并选择本地安装包格式。

下载cuda8.0

cudnn5.1下载地址:https://developer.nvidia.com/cudnn

cudnn5.1下载

在安装cudnn之前应完成注册步骤,并确保已注册。在安装cudnn前一个步骤应在终端环境中运行g++命令以获取编译器;如果不进行操作将导致无法完成安装。

复制代码
     sudo apt-get install g++

按照NVIDIA官方网站提供的指导,请依次键入(第一条命令后的文件即为你已下载并保存的相应文件名)。

复制代码
    sudo dpkg -i cuda-repo-ubuntu1404-8-0-local-ga2_8.0.61-1_amd64.deb
    sudo apt-get update
    sudo apt-get install cuda

等待完成后,检查是否安装完成,输入

复制代码
    ls /dev/nvidia*

若创建 4 至左右以 NVIDIA 命名的文件夹或文件,则表示此步骤已完成并安装成功。当前系统已配置好显卡驱动和 CUDA 8.0 版本。(第二步:设置环境变量)

复制代码
    sudo gedit /etc/bash.bashrc

进入bashrc后在最后加上两行:

复制代码
    export PATH=/usr/local/cuda-8.0/bin:$PATH
    
    export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

保存并退出,环境变量配置完成

(3)安装cudnn 您已成功获取 cudnn-8.0-linux-x64-v5.1.tgz 包,并将其放置于家庭目录中($ cd ~)。 请依次按照以下步骤输入代码块

复制代码
    cd ~
    sudo tar xvf cudnn-8.0-linux-x64-v5.1.tgz
    cd cuda/include
    sudo cp *.h /usr/local/include/
    cd ../lib64
    sudo cp lib* /usr/local/lib/
    cd /usr/local/lib
    sudo chmod +r libcudnn.so.5.1.10
    
    sudo cp ~/cuda/lib64/lib* /usr/local/cuda-8.0/lib64/
    sudo cp ~/cuda/lib64/lib* /usr/local/cuda-8.0/lib64/
    sudo cp ~/cuda/include/cudnn.h /usr/local/cuda-8.0/include/
    cd /usr/local/cuda/lib64/
    sudo chmod 777 libcudnn*

注意 :查看lib64目录下的libcudnn.so文件时,请注意其后缀数字通常与安装包的小版本号不一致。建议检查一下位于 '~/cuda/lib64' 目录中的 libcudnn.so 文件。相应的步骤进行修改。完成复制后,请对所有包含 'libcudnn*' 的文件或目录设置权限为 777。否则无法继续编译。在编译过程中可能会遇到无法找到 'Libcudnn.so' 或 'libcudart.so.8.0' 文件的问题。

复制代码
    cuda-install-samples-8.0.sh ~/cuda_sample

注意:这里到底是8.0还是7.5你要看你自己下的cuda版本,本文采用cuda8.0所以为8.0.


4、安装anaconda2

我安装的是Anaconda2-4.3.1-Linux-x86_64.sh(同样是从其他win7电脑上使用迅雷下载并复制到主文件夹)

复制代码
    bash Anaconda2-4.3.1-Linux-x86_64.sh

一路回车,yes即可
然后添加路径

复制代码
    sudo gedit ~/.bashrc

看看里面有没有

复制代码
    added by Anaconda2 4.3.1 installer
    
    export PATH="/home/nbj2017/anaconda2/bin:$PATH"

如果缺省情况下没有,则需要手动进行安装并保存退出程序以避免数据丢失的问题。


5、安装caffe

建议你如果身处国内的话,请不要想着用git下载 caffe的源码。因为祖国的长城(也就是中国的网络安全屏障)已经很好地保护了国家的安全与稳定。老老实实地去寻找一台兼容性较好的Windows 7电脑,并从 https://github.com/BVLC/caffe下载一份zip格式的作品集存放在主文件夹下解压即可。(尝试搭建服务器上的镜像并使用加速梯子的方法耗时一个下午仍无法成功搭建完整架构,请问为什么要这么执着呢?哈哈)

为安装caffe所需的Python依赖库,请按照以下步骤操作:
首先,在终端(bash)运行命令时,请将 anaconda 安装包路径加入到 PYTHONPATH 环境变量中。 请在 HOME 下的 nbj2017 目录中创建一个 nbj2017.anaconda2 目录,并将该目录设为 soft link 到 Anaconda 2 的 root 目录。
所以提取后的文件名为 caffe-master。
然后将该主文件夹中的 caffe 目录加载到 home/nbj2017/caffe-master 目录下的 python 子目录中。

复制代码
    cd caffe-master/python

然后执行下面命令安装依赖库

复制代码
     for req in $(cat requirements.txt); do pip install $req; done

注意: 在运行上面的命令时,可能下载有些whl包会因为网速太慢而报错无法下载,你可以反复进行几次,如果实在不行就去win7的电脑上下载相应的whl文件,然后拷贝过来用pip安装。下面假设protobuf-3.3.0-cp27-cp27mu-manylinux1_x86_64.whl这个文件无法下载,那我从别的电脑拷贝过来之后放在“主文件夹”中,运行以下命令安装:

复制代码
    cd ~
    pip install protobuf-3.3.0-cp27-cp27mu-manylinux1_x86_64.whl

在caffe-master目录中复制Makefile.config.examples文件后,请运行以下命令:

复制代码
    cd ~/caffer-master/python
    for req in $(cat requirements.txt); do pip install $req; done
复制代码
    cd ~/caffe-master
    cp Makefile.config.examples Makefile.config

接着打开Makefile.config文件,并取消这两个变量前面的注释符号(USE_CUDNN := 1 和 WITH_PYTHON_LAYER := 1),之后保存并退出程序即可。网上有人提到需要调整一些路径设置(比如编译环境配置等),但按照教程中的步骤操作的话,则基本上不需要做任何修改。(例如安装MATLAB可能会带来额外的功能需求)

执行以下命令进行编译:

复制代码
    make all -j8
    make test
    make runtest -j8

经过短暂的时间后, 如果你在屏幕上观察到如图所示的界面, 则表示已经完成了咖啡机的配置过程.

成功配置caffe

(3)编译Python wrapper

复制代码
     make pycaffe

(4)配置Pycaffe
1)编译pycaffe

复制代码
    make pycaffe -j8

2)安装vim

复制代码
    sudo apt-get install vim

3)添加环境变量

复制代码
    vim ~/.bashrc

为了追加至文件中。

复制代码
    source ~/.bashrc

实现更改后的效果。
无需学习wim的使用方法。
第4步:测试pycaffe
在Python环境中运行测试代码import caffe时不会出现错误信息!

问题:

复制代码
    CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    .build_release/lib/libcaffe.so:��make: �*** [.build_release/tools/upgrade_net_proto_binary.bin] 错误 1
    
    �make: �cv*** 正在等待未完成的任务....
    
    ::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/upgrade_solver_proto_text.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/compute_image_mean.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/extract_features.bin] 错误 1
    
    make: *** [.build_release/tools/convert_imageset.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/upgrade_net_proto_text.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/examples/siamese/convert_mnist_siamese_data.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/caffe.bin] 错误 1
    
    nbj2017@RRL-Ubuntu:~/caffe$ make all -j8
    
    CXX/LD -o .build_release/tools/compute_image_mean.bin
    
    CXX/LD -o .build_release/tools/upgrade_net_proto_binary.bin
    
    CXX/LD -o .build_release/tools/caffe.bin
    
    CXX/LD -o .build_release/tools/extract_features.bin
    
    CXX/LD -o .build_release/tools/convert_imageset.bin
    
    CXX/LD -o .build_release/tools/upgrade_solver_proto_text.bin
    
    CXX/LD -o .build_release/tools/upgrade_net_proto_text.bin
    
    CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/upgrade_net_proto_binary.bin] 错误 1
    
    make: *** 正在等待未完成的任务....
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/upgrade_net_proto_text.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/compute_image_mean.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/extract_features.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/convert_imageset.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/examples/siamese/convert_mnist_siamese_data.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/upgrade_solver_proto_text.bin] 错误 1
    
    .build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
    
    .build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
    
    collect2: error: ld returned 1 exit status
    
    make: *** [.build_release/tools/caffe.bin] 错误 1

解决方法:

LIBRARIES += Google’s logging library GFlags Protocol Buffers LevelDB Snappy library LMDB database Boost System Library HDF5 High-Level API HDF5 Core Message Protocol (Protocol Buffers) OpenCV Core Module OpenCV GUI Module OpenCV Image Processing Module OpenCV Image Codecs

在接下来的操作中,请您执行以下步骤:首先使用make clean命令清除原始编译结果,并同时将caffe-master/build目录内的所有文件清空。请再次执行make all指令,并开启并行度为8的编译过程以完成构建。

注意:在修改上面语句时,语句的对齐要用空格而不是tab键,否则会报错


版权为NBJ所有,不得转载!


参考文献:

http://www.jianshu.com/p/网定69a10d0a24b9
<>
http://www.jianshu.com/p/网定a71866734d51
<>
<>
<>
<>

全部评论 (0)

还没有任何评论哟~