• 踩坑3ubuntu caffe 环境配置


    caffe的编译比预想复杂很多,其中设计到多个依赖库的配置,在linux下花费了好久,遇到问题就google,百度,最终终于完成啦!

    1.安装caffe相关的依赖项

    参考caffe官方的网站在ubuntu<17.04下的环境配置   

    http://caffe.berkeleyvision.org/install_apt.html

    首先一般依赖项

    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

    CUDA

    通过apt-getNVIDIA.run软件包安装。NVIDIA 软件包倾向于遵循更新的库和驱动程序版本,但安装更加手动。如果从包安装,请分别安装库和最新的驱动程序与库捆绑的驱动程序通常已过时。对于仅 CPU 的安装,可以跳过这一步。

    BLAS

    OpenBLAS通过安装 ATLASsudo apt-get install libatlas-base-dev或通过 MKL 安装 OpenBLAS 以sudo apt-get install libopenblas-dev获得更好的 CPU 性能。

     是一个开源的矩阵计算库,包含了诸多的精度和形式的矩阵计算算法。就精度而言,包括float和double,两种数据类型的数据,其矩阵调用函数也是不一样。不同矩阵,其计算方式也是有所不同,(姑且认为向量也是一维矩阵),例如,向量与向量之间的计算,向量与矩阵之间的计算,矩阵与矩阵之间的计算。

     sudo apt-get install libopenblas-dev

    python

    安装默认python 版本

    sudo apt-get install python-dev
    

    ubuntu 需要使用CUDA8.0

    2.环境配置异常记录

    1.google库提示未安装,

    从而无法安装protobuf(pip可以通过python 安装也可以通过conda安装)

    sudo pip install google
    # 然后再安装protobuf
    sudo pip istall protobuf

    2.numpy python算法没有安装

    pip install numpy
    

    3.glog以及gflags、lmdb,level

    glog是谷歌的google开发的日志实用库,提供基于c++标准输入输出流的接口。

    gflags在cafe中主要进行命令行的解析。

    lmdb和leveldb在caffe中主是是用于图像数据的存储,所有输入的图像都会转成该格式,以便于统一,另外可以提高磁盘的IO利用率。

    4。编译过程报错统计

    首先git clone caffe 源码

    mkdir build
    cd build
    cmake ..
    make all
    make install
    make runtest
    

     编译过程遇到问题总结

    1.虽然之前安装了boost,但是在cmake 时候提示无法找到boost 以及opencv ,后来发现是ubuntu 系统没有更新

    参考

    https://blog.csdn.net/harbor1981/article/details/86064888

     在软件更新中勾选可从互联网下载,然后

    sudo apt-get update
    sudo apt-get upgrade #获取可更新软件
    

    2.ModuleNotFoundError: No module named 'google' 问题解决方案

    https://blog.csdn.net/zhuquanfu/article/details/105445065

    sudo  pip install google
    sudo  pip install protobuf
    

     3.//usr/lib/x86_64-linux-gnu/libSM.so.6:对‘uuid_unparse_lower@UUID_1.0’未定义的引用

    解决libapr-1.so.0:对‘uuid_generate@UUID_1.0’未定义的引用

    https://www.codeleading.com/article/87512571131/

    解决conda和ros库不兼容问题,libapr-1.so.0:对‘uuid_generate@UUID_1.0’未定义的引用https://yangbenbo.github.io/2020/11/10/%E8%A7%A3%E5%86%B3libapr-1-so-0%EF%BC%9A%E5%AF%B9%E2%80%98uuid-generate-UUID-1-0%E2%80%99%E6%9C%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E5%BC%95%E7%94%A8/

    1. locate第二个关键字属于的库:locate libuuid.so.1

      /home/ct/anaconda3/lib/libuuid.so.1
      /home/ct/anaconda3/lib/libuuid.so.1.0.0
      /home/ct/anaconda3/pkgs/libuuid-1.0.3-h1bed415_2/lib/libuuid.so.1
      /home/ct/anaconda3/pkgs/libuuid-1.0.3-h1bed415_2/lib/libuuid.so.1.0.0
      /home/ct/research/projects/libuuid-1.0.3/.libs/libuuid.so.1
      /home/ct/research/projects/libuuid-1.0.3/.libs/libuuid.so.1.0.0
      /lib/x86_64-linux-gnu/libuuid.so.1
      /lib/x86_64-linux-gnu/libuuid.so.1.3.0
      
    2. 这些就是第二个关键字的库的所有位置,我们想让ros使用系统的库/lib/x86_64-linux-gnu/libuuid.so.1,但是由于anaconda的存在,使用的却是/home/ct/anaconda3/lib/libuuid.so.1
      可以分别查看这两种库使用的版本:

      $ ll /lib/x86_64-linux-gnu/ |grep uuid
      lrwxrwxrwx  1 root root      16 10月 10 17:34 libuuid.so.1 -> libuuid.so.1.3.0
      -rw-r--r--  1 root root   18976 10月 10 17:34 libuuid.so.1.3.0
      
      $ ll /home/ct/anaconda3/lib/ |grep uuid
      -rw-rw-r--  2 ct   ct      26398 1月  12  2018 libuuid.a
      -rwxrwxr-x  1 ct   ct        950 11月 28 09:09 libuuid.la*
      lrwxrwxrwx  1 ct   ct         16 11月 28 09:09 libuuid.so -> libuuid.so.1.0.0*
      lrwxrwxrwx  1 ct   ct         16 11月 28 09:09 libuuid.so.1 -> libuuid.so.1.0.0*
      -rwxrwxr-x  2 ct   ct      18472 1月  12  2018 libuuid.so.1.0.0*
      
    3. 可以看出系统库使用的实际是1.3.0版本,而anaconda使用的是1.0.0版本

    4. 最后一步就是把anaconda中的库链接到系统的库(这种方法不一定是最好的,但是比较简单)

      sudo rm /home/ct/anaconda3/lib/libuuid.so.1
      sudo ln -s /lib/x86_64-linux-gnu/libuuid.so.1 /home/ct/anaconda3/lib/libuuid.so.1

    4.搭建caffe环境时“error: hdf5.h”找不到的解决方法

    https://blog.csdn.net/goofysong/article/details/52116265?%3E

    搭建caffe环境时,在最后进行 ”$make all” 操作时,报错找不到 “hdf5.h”,找了半天原因,是因为在安装 “hdf5” 的时候使用的指令是

    $ sudo apt-get libhdf5-serial-dev
    

    所以相应的需要更改"Makefile.config"文件中的包含目录
    ctrl+f 找到

    INCLUDE_DIRS:=$(PYTHON_INCLUDE) /usr/local/include

    然后在后面加上"serial"的包含目录,即:

    INCLUDE_DIRS:=$(PYTHON_INCLUDE) /usr/local/include/usr/include/hdf5/serial/

    接着需要更改相应的"Makefile"文件,找到

    LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
    

    更改最后两项为:

    LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
    

    就可以了,继续make了。
    5 nvcc fatal : Unsupported gpu architecture 'compute_20'

    仔细查看了一下 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.0所以把下面这两行删除就可以了

    -gencode arch=compute_20,code=sm_20 \
    -gencode arch=compute_20,code=sm_21 \
    

     6.caffe编译遇到的问题(持续更新) 

    https://blog.csdn.net/m0_37407756/article/details/70789271

    7.Ubuntu下caffe 配置(总结踩过的坑)

    https://www.cnblogs.com/zwjhq/p/9258432.html

    3.配置成功,cmake  ->make all ->install ->runtest 结果

     

    cmake  gen完成

    make all

    //usr/lib/x86_64-linux-gnu/libSM.so.6:对‘uuid_generate@UUID_1.0’未定义的引用 解决之

    重新make all

    genrating ok

    make install

    make runtest

  • 相关阅读:
    内存溢出和内存泄露的概念,句柄泄露呢?句柄泄露造成的原因,待更新
    翻页查询的sql语句优化
    微服务下ELK统一日志系统搭建
    vscode添加自己的python虚拟环境
    【经验】如何成为培训师
    go并行编程1goroutine 孙龙
    简单说说物联网 孙龙
    golang恐慌和恢复panic/recover 孙龙
    golang监听rabbitmq消息队列任务断线自动重连接 孙龙
    rsync+inotifytools与rsync+sersync架构的区别 孙龙
  • 原文地址:https://www.cnblogs.com/codeAndlearn/p/15913156.html
Copyright © 2020-2023  润新知