安装编译Caffe-GPU & 升级源码里的cudnn

2023-05-16

Caffe原生版本下载地址https://github.com/BVLC/caffe 。后面开发者根据自己需要添加的功能,会在原生caffe文件夹里添加自己的layer,变成衍生版的caffe。一台电脑里可以同时安装多个版本的caffe,如原生caffe, caffe-enet, caffe-segnet等,只需要放在不同的文件夹,分别进行编译即可。卸载只需要删除相应的文件夹即可。具体安装步骤:

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
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get update
sudo apt-get upgrade

若使用python接口,还需要安装caffe/python/requirements.txt文件里需要的依赖项。conda list查看已经安装的包后发现缺少的包并安装:

conda install leveldb
conda install protobuf

 

2、Makefile.config文件的修改:

Shortcut: 链接中下载已经修改好的makefile.config文件 https://download.csdn.net/download/cxiazaiyu/10635167 ,放在caffe路径下即可。

普通方法:按照下面的操作一一修改。

sudo cp Makefile.config.example Makefile.config

sudo gedit Makefile.config

根据自己的情况,将如下项前的#去除:

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1

# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3

# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1

若使用anaconda,则下面的部分也注释掉:

# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.

ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
          $(ANACONDA_HOME)/include/python3.6m \
          $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include \

# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib

# Uncomment to use Python 3 (default is Python 2)
PYTHON_LIBRARIES := boost_python3 python3.6m

 

并在文件末尾加上:

LINKFLAGS := -Wl,-rpath,$(HOME)/anaconda3/lib

注意:用anaconda的话不要再把下面的部分取消注释啦!!!

# Uncomment to use Python 3 (default is Python 2)
#PYTHON_INCLUDE := /usr/include/python3.5m \
#                 /usr/lib/python3.5/dist-packages/numpy/core/include \

 

    # Whatever else you find you need goes here.

      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

参考:Dark_Miro的博客:caffe编译安装( Ubuntu16.04.3+cuda8.0+opencv3.3.0+anaconda3)和 xunan003的博客: caffe利用anaconda配置python接口(cpu版可视化工具)

3、Makefile文件的修改:

sudo gedit Makefile

  NVCCFLAGS += -ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)

   改成:

    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

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

4、Caffe根目录下的python文件夹加入到环境变量:

sudo gedit ~/.bashrc

在文件末尾加入(文件路径根据自己的情况确定):

export PYTHONPATH=/home/yly/ENet/caffe-enet/python:$PYTHONPATH

更新配置:

sudo ldconfig

 

5、编译caffe:

若曾经编译失败过,想重新编译,需要先执行:

    sudo make clean 

 然后执行:

make pycaffe -j$(nproc)
make all -j$(nproc) -Wno-deprecated-gpu-targets
make test -j$(nproc) -Wno-deprecated-gpu-targets
make runtest -j$(nproc) -Wno-deprecated-gpu-targets

其中-j$(nproc)表示使用最大可利用的多线程执行,一般6核cpu可以直接写-j12。这里若在make pycaffe前加入sudo 可能报错。

若显示PASSED则安装成功。

注意:本文是使用makefile方式进行编译的,也可以使用cmake编译,二者选一种即可。

参考: Ryan的博客:环境配置5-Ubuntu下安装Caffe和YOLO 和 yhao的博客: Ubuntu16.04 Caffe 安装步骤记录(超详尽)。
 


 

6、升级源码里的cudnn:

很多时候遇到开源代码是基于旧版本的cudnn开发的(cudnn2,cudnn5.1等),而自己配置的环境是新版本的cudnn (cudnn6)。不可能总去根据代码修改cudnn的配置环境,这种情况下可以升级caffe源码里的cudnn文件,即通过github下载新版本的caffe,用里面的cudnn相关文件替换旧版本caffe源码里cudnn文件。具体方法:

  • caffe/src/caffe/layers里所有的cudnn*.cu和cudnn*.cpp文件,如cudnn_lcn_layer.cu, cudnn_lrn_layer.cu, cudnn_conv_layer.cu, cudnn_lcn_layer.cpp等。
  • caffe/src/caffe/util里的cudnn.cpp
  • caffe/include/caffe/layers里所有的cudnn*.hpp文件,如cudnn_conv_layer.hpp, cudnn_deconv_layer.hpp等
  • caffe/include/caffe/util中的cudnn.hpp文件

7、Caffe编译可能遇到的bug及解决办法:

  • Cannot find -lboost_python3,建立软链接:
sudo ln -s  /usr/lib/x86_64-linux-gnu/libboost_python-py35.so  /usr/lib/x86_64-linux-gnu/libboost_python3.so 

具体libboost_python-py35.so中py后面的版本要根据自己文件下的版本修改。

  • fatal error: pyconfig.h: No such file or directory #include "pyconfig.h"

locate pyconfig.h发现在/usr/include/python2.7

将此位置加入到Makefile.config文件中的PYTHON_INCLUDE搜索路径中:

ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                  $(ANACONDA_HOME)/include/python2.7 \
                  $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
                  /usr/include/python2.7
  •  /anaconda3/lib/libpng16.so.16: undefined reference to 'inflateValidate@ZLIB_1.2.9' 

在Makefile.config加入

LINKFLAGS := -Wl,-rpath,$(HOME)/anaconda3/lib

  • 注意: 建议使用Cuda8.0+CuDNN6.0的版本,因为新版的caffe中说明了:cuDNN for GPU acceleration (v6)。

若使用Cuda8.0+CuDNN5.1的版本, 在make runtest 时会出现如下问题:

CuDNNDeconvolutionLayerTest/3.TestSimpleCuDNNDeconvolution
F0802 14:55:42.177832 22003 cudnn.hpp:128] Check failed: status == CUDNN_STATUS_SUCCESS (3 vs. 0)  CUDNN_STATUS_BAD_PARAM
*** Check failure stack trace: ***
    @     0x7f66be7be5cd  google::LogMessage::Fail()
    @     0x7f66be7c0433  google::LogMessage::SendToLog()
    @     0x7f66be7be15b  google::LogMessage::Flush()
    @     0x7f66be7c0e1e  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f66b85fdd18  caffe::CuDNNDeconvolutionLayer<>::Reshape()
    @           0x483cf0  caffe::Layer<>::SetUp()
    @           0x6b4d3d  caffe::CuDNNDeconvolutionLayerTest_TestSimpleCuDNNDeconvolution_Test<>::TestBody()
    @           0x952603  testing::internal::HandleExceptionsInMethodIfSupported<>()
    @           0x94bc1a  testing::Test::Run()
    @           0x94bd68  testing::TestInfo::Run()
    @           0x94be45  testing::TestCase::Run()
    @           0x94d11f  testing::internal::UnitTestImpl::RunAllTests()
    @           0x94d443  testing::UnitTest::Run()
    @           0x47096d  main
    @     0x7f66b783b830  __libc_start_main
    @           0x4788c9  _start
    @              (nil)  (unknown)
Makefile:532: recipe for target 'runtest' failed

同样的问题也出现在: https://github.com/CMU-Perceptual-Computing-Lab/openpose/issues/10

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装编译Caffe-GPU & 升级源码里的cudnn 的相关文章

  • FBOSS

    https github com facebook fboss
  • 五款针对Ubuntu系统的最佳杀毒软件

    随着使用 Linux 作为主要桌面的用户越来越多 xff0c 很多黑手都伸向了这部分用户 虽然目前专门针对 Linux 的专有恶意软件还比较少 xff0c 但大家还是需要保持相当的谨慎才是才策 由于大部分 Linux 新手用户中 Ubunt
  • 解决www.github.com访问太慢的问题

    解决www github com访问太慢的问题 使用www github com的过程中 xff0c 有时候打开会特别的慢 xff0c 原因github com的域名被一堵伟大的墙挡在了外面 但是我们可以通过修改本机的hosts文件来修改这
  • 国内有哪些好的刷题网站?

    http www zhihu com question 25574458 Luau Lawrence xff0c Data Mining 弱鸡 PhD 64 NTU 温梦强 石一帆 知乎用户 等人赞同 Welcome To PKU Judg
  • 使用update命令来修改Mysql的root密码

    1 xff0c 使用update命令来修改Mysql的root密码 使用Mysql update命令既可以修改root的老密码 xff0c 也可设置root的密码为空 xff0c 如果使用update命令更改root的密码 xff0c 需要
  • 设置 java -jar 的进程显示名称

    有时候我们会用 nohup java jar xxx jar 来将一些可执行的java application挂在后台 xff0c 类似windows服务一样来运行 但是有一个不爽的地方 xff0c 在linux终端里用jps 显示时 xf
  • linux下修改hostid

    linux下修改hostid 网上有很多版本 xff0c 总结了这几点 1 gt 一个以16进制显示的int字符串 xff1b 2 gt 配置文件 etc hostid 如果有值 xff0c 输出 xff0c 结束 3 gt 从hostna
  • 21分钟学会写编译器

    本文来自网易云社区 知乎上有一种说法是 编译器 图形学 操作系统是程序员的三大浪漫 先不管这个说法是对是错 xff0c 我们假设一个程序员在国内互联网公司写代码 xff0c 业余时间不看相关书籍 那么三年之后 xff0c 他的这些知识会比在
  • 解决idea打包出现中文乱码的问题

    这主要是maven编译时编码问题导致的 在Intellij的settings中maven的runner配置中将原有的配置 DarchetypeCatalog 61 internal修改设置它的VM Options为 DarchetypeCa
  • 局部使用element-ui自定义主题实践

    背景 内部系统虽然使用了element ui xff0c 但同时又混杂了多种风格的样式和各自写的通用组件 xff0c 在参与新功能开发时 xff0c 产品经理的设计需要以绿色为主题色 xff0c 看到element官网有个自定义主题 xff
  • windows server 2012 R2 远程桌面授权模式尚未配置

    windows server 2012 R2 远程桌面授权模式尚未配置 xff0c 远程桌面服务将在120天内停止工作 如何破解这个宽限期 xff0c 目前企业7位协议号码均不包含2012 R2以上授权 那么只能蛋疼的 破解 咯 解决方法
  • LPAD

    语法 span class pln style color rgb 0 0 0 VARCHAR LPAD span span class pun style color rgb 102 102 0 span span class pln s
  • Python 之 sqlalchemy更新数据

    表结构 xff1a 代码 xff1a Author Kang import sqlalchemy from sqlalchemy import create engine from sqlalchemy ext declarative im
  • php curl 设置请求头headers和请求体body

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 啥也不说 xff0c 直接上代码 我这里是post请求 url 61 34 http www example com 34 headers数组内的格式 headers 61
  • 华为路由器双出口负载均衡+备份

    一个网段内 xff0c IP地址 xff08 末位奇数 xff09 走电信 xff0c IP地址 xff08 末位偶数 xff09 走联通 当某个运营商不可达时 xff0c 自动切换 通过NQA来确定运营商是否可达 xff0c 并与流行为
  • office2013VOL版下载资源链接

    office2013VOL版下载资源链接 软件名称 xff1a office2013VOL软件大小 xff1a 914 5 810 7 713 3 801 2 M 软件语言 xff1a 简中软件性质 xff1a 免费 xff08 需要mak
  • 使用 TRY/CATCH 语句解决 SQL Server 2005 死锁

    对于今天的 RDBMS 体系结构而言 xff0c 死锁难以避免 在高容量的 OLTP 环境中更是极为普遍 正是由于 NET 的公共语言运行库 CLR 的出现 xff0c SQL Server 2005 才得以为开发人员提供一种新的错误处理方
  • delphi之找色和色块

    找色和色块 xff0c 是模拟的重要基础 有时候 xff0c 需要确定某点是否出现某种颜色 xff0c 有时候需要判断色块是否出现在某位置 有时候 xff0c 需要看范围内是否出现色块 function IsColor bmp TBitma
  • 局域网组建(二) OpenWrt作为一般节点接入WireGuard组建的跨地域局域网

    本实验将OpenWrt作为一般节点 xff08 不提供网关功能的客户端 xff09 接入WireGuard组建的跨地域局域网 xff0c 实现与局域网内其他机器的通信 由于OpenWrt也具备NAT功能 xff0c 因此OpenWrt下的设
  • 简历上如果出现过于高大上的项目,反而过犹不及:再论如何通过项目引出技术...

    我看了前几天些的博文 xff0c 分析若干没面试机会和没体现实力的简历 xff0c 就想起了做技术面试官时的一些往事 我见过有些简历 xff0c 上面列出的项目描述非常高大上 xff0c 比如用到了xx机器学习技术 xff0c 或者在一个项

随机推荐