caffe编译是一个繁琐个过程, 或多或少会遇到各种各样的问题, 如我caffe编译错误记录记录了遇到过得一部分问题. 原因是因为每个依赖如openblas
, protobuf
都需要编译特定版本, 每台电脑装的依赖库各不相同, 环境变量也有冲突的情况(如system和anaconda). 于是我一直想找一种简单方便的caffe编译方法, 可以避免上述的问题. 也就有了今天的内容, 使用anaconda虚拟环境编译caffe.
一些说明:
- anaconda虚拟环境可以把环境和系统隔离, 相当于浓缩版
/usr/lib
+/usr/include
, 在环境中安装包使用conda install {包名称}=版本号
命令, 可以很方便的修改环境依赖; - 测试系统是Manjaro Linux, 但是使用anaconda+cmake, 应该和系统没有关系. 即使用其他linux系统或者windows也可以;
- anaconda环境名称为caffe_27. python 3在编译完成caffe后, pychaffe编译出错. 于是换成了python2.7. python3我会后续补充;
- 我的caffe是添加了多标签的部分, 即label可以有多个, 可以直接用我修改好的caffe开始编译;
- cuda任然需要本地安装, 我的是Manjaro Linux, 使用
pacman -S cuda
安装. - 项目整体只在本地测试过, 如果有问题还请指出, 我会进一步完善.
- NCCL, GPU默认开启,如果需要关闭可以更改 CmakeList.txt相关位置.
1. 编译过程说明:
(1) 生成anaconda虚拟环境
我编译完成后, 把用到的conda虚拟环境输出成了.yml文件. 重新编译时, 可以使用conda env create -f caffe_36.yml
生成和我一模一样的虚拟环境,而不需要一个一个包重新安装.
(2) 激活虚拟环境
环境名我定的名字是caffe_ 27
, 代表python版本是2.7(python3.6环境编译可以通过, 但是pycaffe编辑通过, 于是后来换成了python 2.7, ), 用于编译caffe环境. 如果使用第一步命令生成环境, 那么可以运行一下source
命令激活.source activate caffe_27
(3) cmake
不使用make, 而是用camke进行编译, 一方面可以跨平台, 另一方面cmake更加通俗易懂.
需要进行如下一些修改:
<1> 修改虚拟环境路径:
<2> 如果cuda有问题, 手动添加cuda路径:
执行如下命令:
mkdir build
cd build
cmake ..
camke过程如图:
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check