基于Anaconda编译caffe+pycaffe+matcaffe in Ubuntu[不用sudo权限]
caffe
编译
环境
- Ubuntu16.04
- CUDA10
- cuDNN
- gcc 5.4
- g++ 5.4
大前提!!
在服务器上面装,但是没有sudo权限,所以依赖的包都只能装在自己用户下的conda环境里
- 按理来说这个要求应该不少吧。。但是搜出来一大堆博客都是要sudo权限,动不动就卸载、升级。。做不到啊。。只能各种在conda里删删减减。。真的好艰难!!
github下载caffe源码
BVLC/caffe
依赖
anaconda3
装好之后,新建环境,最好用python2.7。下面都是装在这个新建的conda环境里,所以要注意先进入该环境!
在caffe/python目录下
pip install -r requirements.txt #requirements.txt
在conda的环境中装必要的包
我装的版本
python2,opencv3版本一致很重要!
conda install boost
conda install glog
conda install gflags
conda install libprotobuf
conda install hdf5=1.8.16 #[!重要]
conda install lmdb
conda install leveldb
conda install -c menpo opencv3 #[!重要 一定要指定好版本 用默认的命令会装最新的 之前用默认就装到了最新的4.1版 ...]
由于我是在conda环境下的,还是装一下cudatoolkit:
[!重要] 要和本机装的CUDA的版本一致!! 包括后面的子编号!我之前只看到conda装的cudatoolkit是10,本机的CUDA也是10,就认为一致,但其实本机的CUDA是10.0.x,conda默认装了最新的 cudatoolkit是10.1.x,后来卸载掉conda装的高版本,重新装10.0.x版本的cudatoolkit才行
- conda装 cudatoolkit 一般默认会装好cudnn,可以用 conda list | grep 'cu' 查看
装OpenBLAS
从源码安装
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make FC=gfortran -j $(($(nproc) + 1))
make PREFIX=/path/to/install install
echo 'export LD_LIBRARY_PATH=/path/to/install/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
[可选]如果要用matcaffe
装matlab,在linux下装完之后要激活,因为是用学校买的正版产品,需要用桌面环境打开安装程序。。
VNC用gnome桌面好难。。一直不出来terminal,最后还是改用xfce4桌面 照抄别人的配置。。终于激活上了!配置文件放在 ~/.vnc/xstartup
#!/bin/sh
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
session-manager & xfdesktop & xfce4-panel &
xfce4-menu-plugin &
xfsettingsd &
xfconfd &
xfwm4 &
修改源码的编译配置
修改Makefile.config,按照自身设备的条件
使用cuDNN,将USE_cuDNN 这一句的注释去掉
使用opencv3,将OPENCV_VERSION := 3 的注释去掉
BLAS 改为 open ,并且设置具体的include和lib路径,要具体到include文件夹 \ lib文件夹!
ANACONDA_HOME 这一句的注释去掉,改为自己的conda环境的路径
PYTHON_INCLUDE 和 PYTHON_LIB:把原本路径在系统下的那句注释掉,去掉ANACONDA_HOME下PYTHON_INCLUDE PYTHON_LIB 的注释
WITH_PYTHON_LAYER 这一句的注释去掉
使用matcaffe,把 MATLAB_DIR 这一句的注释去掉,改为MATLAB所在路径
LIBRARY_DIRS 添加 /usr/lib/x86_64-linux-gnu
根据CUDA版本注释一些 arch
修改Makefile
报错
tips
caffe源码的github仓库下的issue是个好东西,关键字search用起来! https://github.com/BVLC/caffe/issues
不用CMAKE,直接MAKE
[LATEST!!]
make all -j32
报错要用c++11
- 解决:在Makefile里,不仅要改CXXFLAGS, NVCCFLAGS也要改,还有LINKFLAGAS,在FLAGS后 += -std=c++11,https://github.com/BVLC/caffe/issues/6359
原来一直没装上opencv
- https://zoesxw.github.io/2018/07/14/caffe安装/
- THANK GOD!!救我狗命!!
报错没有 boost_python
- 解决:改Makefile,boost_python 改为 boost_python27
- https://stackoverflow.com/questions/49961216/pycaffe-build-fails-lboost-python-not-found
报错mexext command not found
- 解决:改Makefile.config,MATLAB_DIR 要改为mexext在的父路径
- 比如这里的mexext,在 /usr/local/MATLAB/R2019a/bin,则MATLAB_DIR=/usr/local/MATLAB/R2019a
报错 缺乏一些OpenCV的lib,比如缺乏libpng.16.so
解决:
1,其实是lib的依赖库没有添加到路径!改Makefile.config, 添加到LIB_DIR里面
用 ldd 查看缺失的库所依赖的库的路径:
ldd libpng.16.so
发现有一些库还是放在 /lib/x86_64-linux-gnu/ 下面的!!好坑
2,在Makefile.config里添加LINKFLAGS, 相当于为Makefile里的LINKFLAGS设置默认的初值
- LINKFLAGS,添加当前环境下的lib:anaconda3/envs/env_name/lib
LINKFLAGS := -Wl,-rpath,/path/to/lib
- opencv用conda装的时候一定要选好版本,如果不小心装错了,先把conda环境里原本有的所有opencv都卸掉,然后再重新装
没有报错了,接着编译pycaffe 和 matcaffe:
make pycaffe -j32
make matcaffe -j32
make runtest(其实这个没成功但是上面的都能正常用了就算了!)
用CMAKE
[貌似最后没完全成功,但是 make all 和 make pycaffe 似乎是OK的,
不过这些报错的解决方法应该是OK的,只是后面还有新的报错就懒得再管了,
放弃cmake直接在根目录下make了,这似乎是比较主流的做法]
cmake报的错:
注意,CMAKE编译时设置DEBUG or RELEASE模式
https://blog.csdn.net/u010103202/article/details/75447473
cmake -DCMAKE_BUILD_TYPE=RELEASE /DEBUG
不同模式最好放在不同目录下编译
报错boost
boost 1.70可能版本比较高,cmake不适合。这里的find package(boost)不再是以前的FindBoost.cmake,而是用BoostConfig.cmake,
可以通过切换回去用旧版的FindBoost.cmake
https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake#L238
报错找不到boost python
在Dependencies.cmake对应的那一行(报错的那一行)改 python为python27
原本大概是: find_packages(Boost COMPONENTS python),把这里的python改为python27
make阶段:
make all -j32
报错libprotobuf版本比较高 需要用C++11编译
error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
- 在CMakeList.txt里面添加 SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
make pycaffe -j32
报错没有cudnn
- 在conda下安装 cudatoolkit 注意看看本机装的CUDA版本
- 在conda下安装cudnn
报错opencv
error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope
color_ ? CV_LOAD_IMAGE_COLOR : CV_LOAD_IMAGE_GRAYSCALE);
这是因为opencv版本不一致造成的,这里用的opencv c++库是opencv 3,原来的caffe好像都用的opencv2 https://blog.csdn.net/qq_28660035/article/details/80772071
改动的地方
caffe/src/caffe/layers/window_data_layer.cpp 里面用到imread,读彩色图的参数要改变
caffe/src/caffe/util/io.cpp 里面用到imread,读彩色图的参数要改变
CV_LOAD_IMAGE_COLOR -> cv::IMREAD_COLOR
CV_LOAD_IMAGE_GRAYSCALE -> cv::IMREAD_GRAYSCALE
make matcaffe -j32
cmake:
打开CMakeLists.txt的BUILD_matlab
报错的话,忽略那个错。。其实是代码没有处理好。。
出错的地方在于,要把那些库文件转换为make命令中的 -l${lib_name} 的这个函数,因为库文件的变量中,还保存了PUBLIC、PRIVATE等cmake target_link_libraries这个函数的关键字,但是却没有在convert时解析这些关键字。。。所以遇到这些关键字就判为FATAL_ERROR了。。
找到出错的那个文件,把报错等级的error改为warning。。
make
报错 找不到caffe.hpp
caffe/matlab/+caffe/private/caffe_.cpp:18:27: fatal error: caffe/caffe.hpp: No such file or directory #include "caffe/caffe.hpp"
报错,mkl 找不到cblas.h
- https://github.com/BVLC/caffe/issues/6033 mkl用的头文件是mkl_cblas.h
测试使用
https://blog.csdn.net/wzz18191171661/article/details/70149070
pycaffe
编译完之后,测试pycaffe:
- 如果import失败可能是因为要添加pycaffe的路径(caffe根目录下的python文件夹)到 ~/.bashrc的PYTHONLIBRARY 并source
import caffe
caffe.__version__
- 如果提示warning 缺少一些包或是版本不对应,用 pip install
caffe
测试caffe,在caffe的根目录下:
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh
可以看到训练的过程,最终测试的精度是 0.98+
如果报错,去看看这些脚本文件都做了什么
Check failed: mdb_status == 0 (2 vs. 0) No such file or directory
一般报错这个,大多是 数据集的路径不对!看看prototxt里面指定了数据集的路径里,有没有数据集!
matcaffe
make mattest
报错 一大堆动态库(libxxx.so)找不到,这些动态库都是装在conda环境下的
意味着编译matcaffe的时候用的是conda环境的,但是mattest不是
mattest竟然用的动态库都是系统下面的?为什么不是直接用编译时候指定的anaconda_home的那些?
还要改 LD_LIBRARY_PATH ,添加conda环境下的lib路径,并且export,但个人总觉得这是很辣鸡的替代方法!【如果是其他情况下,需要用根目录的lib或是其他环境的lib怎么办?】
export LD_LIBRARY_PATH=/path_to_conda/envs/env_name/lib:$LD_LIBRARY_PATH
well, 官方都这么说了
Build MatCaffe
Build MatCaffe with
make all matcaffe. After that, you may test it usingmake mattest.Common issue: if you run into error messages like
libstdc++.so.6:version 'GLIBCXX_3.4.15' not foundduringmake mattest, then it usually means that your Matlab's runtime libraries do not match your compile-time libraries. You may need to do the following before you start Matlab:export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:/usr/local/cuda/lib64
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
Or the equivalent based on where things are installed on your system, and do
make mattestagain to see if the issue is fixed. Note: this issue is sometimes more complicated since during its startup Matlab may overwrite yourLD_LIBRARY_PATHenvironment variable. You can run!ldd ./matlab/+caffe/private/caffe_.mexa64(the mex extension may differ on your system) in Matlab to see its runtime libraries, and preload your compile-time libraries by exporting them to yourLD_PRELOADenvironment variable.After successful building and testing, add this package to Matlab search PATH by starting
matlabfrom caffe root folder and running the following commands in Matlab command window.addpath ./matlab
You can save your Matlab search PATH by running
savepathso that you don't have to run the command above again every time you use MatCaffe.
报错
Could not convert handle to pointer due to invalid init_key. The object might have been cleared.
./matlab/+caffe/private/Net.m
~isempty() 改为 self.isvalid, 参考自https://blog.csdn.net/jiao_mrswang/article/details/81180632
./matlab/+caffe/private/Solver.m
40行,用 if self.isvalid 包围, 参考自https://github.com/BVLC/caffe/pull/5588
Error in caffe.Solver/delete (line 40)
caffe_('delete_solver', self.hSolver_self);The solution to this issue as the same to @meixiaofeng way. I change the code to as follow:
if self.isvalid
caffe_('delete_solver', self.hSolver_self);
end
在MATLAB使用的时候可能要先添加 matcaffe的路径:
在caffe根目录下运行MATLAB
在MATLAB命令行中 输入 addpath ./matlab %添加matcaffe的路径
在MATLAB命令行中 输入 help caffe %如果输出caffe的详细信息则代表路径添加成功
基于Anaconda编译caffe+pycaffe+matcaffe in Ubuntu[不用sudo权限]的更多相关文章
- 判断OpenCV是否为共享库,Windows基于CMake编译Caffe需要opencv共享库
判断OpenCV是否为共享库,Windows基于CMake编译Caffe需要opencv共享库 TLDR 只考虑windows下opencv预编译包的情况. 对于opencv2.4.x系列,cmake ...
- [深度学习] centos7上搭建基于Anaconda3的caffe+pycaffe环境(python3.6)
本文记录从零开始在CentOS7.x系统上搭建Caffe深度学习平台,并配置pycaffe环境.(由于在虚拟机上搭建,所以为CPU_ONLY模式) 1.选择CentOS7 mini版镜像安装虚拟机 镜 ...
- ubuntu添加sudo权限
ubuntu有时候没有开通sudo功能,有些操作只能切换到root进行,很不方便. 1.切换到root su root 2.打开suduers文件 gedit /etc/sudoers 3.找到下面这 ...
- Ubuntu之sudo权限管理/etc/sudoers文件
网易云音乐翻车记 系统安装的Ubuntu18.04桌面版,安装网易云客户端后,还没来得及夸奖,发现点击图标打不开后网上找到教程:Ubuntu网易云音乐无法打开 感觉挺靠谱的,照着最下边的教材修改了一波 ...
- 使用Anaconda虚拟环境编译caffe-gpu pycaffe
1. 前提: 安装前服务器情况,已经安装好了: CUDNN=7.3.0 CUDA=10.0.130 Opencv 2.4.13 相应命令为: cuda 版本 cat /usr/local/cuda/v ...
- ubuntu下 编译Caffe的Matlab接口
一般情况下不愿意使用Caffe的Matlab接口,总觉得Linux版的Matlab很难配置,但是现在搞目标检测,得到的源码是使用的Caffe的Matlab接口,只能硬着头皮上了. (1)修改caffe ...
- ubuntu下编译caffe
Ubuntu下编译caffe 纯粹是个人编译的记录.不用CUDA(笔记本是amd卡,万恶的nvidia):不手动编译依赖包(apt-get是用来干啥的?用来直接装二进制包,以及自动解决依赖项的) ca ...
- win10+vs2015编译caffe的cpu debug版本、部署matcaffe
一.编译caffe 1.安装python-3.5.2-amd64.exe https://www.python.org/ftp/python/3.5.2/python-3.5.2-amd64.exe ...
- caffe-安装anaconda后重新编译caffe报错
ks@ks-go:~/caffe-master$ make -j16 CXX/LD -o .build_release/tools/convert_imageset.bin CXX/LD -o .bu ...
随机推荐
- 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝
第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...
- 【cf995】F. Cowmpany Cowmpensation(拉格朗日插值)
传送门 题意: 给出一颗树,每个结点有取值范围\([1,D]\). 现在有限制条件:对于一个子树,根节点的取值要大于等于子数内各结点的取值. 问有多少种取值方案. 思路: 手画一下发现,对于一颗大小为 ...
- JMeter jp@gc - stepping thread group插件
这是一个出单接口压力测试的小例子,了解一下压力测试最最基础的基础.出单接口是用来保险出单的,不需要在UI界面下一步下一步的出单,接口一调数据入库完事~~~.再啰嗦一句接口应该都知道是什么吧?一个完整的 ...
- Pwn-pwn-200
题目地址 ttp://www.whalectf.xin/files/47a658e388a0c505fc07b6ee48a4a2e2/binary_200 32位,开启了NX和Canary保护 存在字 ...
- UVA10559 方块消除 Blocks(区间dp)
一道区间dp好题,在GZY的ppt里,同时在洛谷题解里看见了Itst orz. 题目大意 有n个带有颜色的方块,没消除一段长度为 \(x\) 的连续的相同颜色的方块可以得到 \(x^2\) 的分数,用 ...
- C# 位运算基本大全
1.原码 反码 补码 只用补码进行计算,且没有减法.只有用补码进行加法运算,具体原因,详见:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/C ...
- 物联网架构成长之路(33)-EMQ数据存储到influxDB
一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和em ...
- 原创的离线版 Redis 教程,给力!
嗯,你没看错,松哥又给大家送干货来了.这次是可以离线阅读的 PDF 版教程哦. 之前一直有小伙伴问我有没有 Redis 的电子书,老实说,有是有,但是公开给大家分享,其实有一点点风险,毕竟这都是有版权 ...
- springboot只能一个main方法解决办法
pom.xml修改properties,增加这行 <start-class>com.eshore.main.SpringBootStarter</start-class> 或者 ...
- 转 tty 设备读写
转自https://feng-qi.github.io/2017/05/04/how-to-read-write-to-tty-device/ <p>这是 StackExchange 上的 ...