Windows下用cmake编译Caffe,配置pycaffe
2018年8月24日 23:35:41,2018-12-06 09:32:50(update)
by ChrisZZ
简要说明
直接git clone了caffe-BVLC然后checkout到windows分支,编译还是可能遇到问题。这里记录一下。
环境说明
系统: Windows10
编译器:Visual Studio 2013/2015
构建器:CMake 3.12
Caffe: BVLC官方Caffe的windows分支
Python: python2.7,用anaconda装的。注意python.exe所在目录放到系统PATH环境变量中
CUDA: 9.2 (可选)
CuDNN:7.0(可选)
终端: cmd窗口
具体步骤
1. 下载代码
进cmd敲:
d:
cd work
git clone https://github.com/BVLC/caffe caffe-BVLC
cd caffe-BVLC
git checkout -b windows origin/windows
2.改正配置
2.1 cuda配置
纯cpu编译的调过这一小节。cmake/Cuda.cmake
,第7行,去掉20和21的算力支持(否则新版cuda会报错),改成:
set(Caffe_known_gpu_archs "30 35 50 52 60 61")
cmake/Cuda.cmake
,第40行左右,手动设定nvcc架构版本,例如我是1080Ti显卡,使用6.1:
set(__nvcc_out "6.1")
(为啥这里的自动获取计算能力版本有问题?大概是字符编码导致输出很多警告,警告信息影响了正确结果的获取)
(每个Nvidia显卡型号对应的compute ability表见:https://blog.youkuaiyun.com/real_myth/article/details/44308169)
2.2 下载依赖项
为了避免cmake下载遭遇网络问题,以及修改配置项的方便,根据scripts/download_prebuilt_dependencies.py
手动下载依赖文件:
(如果你网路还可以,那么忽略这一小节,脚本会自动下载)
WIN_DEPENDENCIES_URLS = {
('v120', '2.7'):("https://github.com/willyd/caffe-builder/releases/download/v1.1.0/libraries_v120_x64_py27_1.1.0.tar.bz2",
"ba833d86d19b162a04d68b09b06df5e0dad947d4"),
('v140', '2.7'):("https://github.com/willyd/caffe-builder/releases/download/v1.1.0/libraries_v140_x64_py27_1.1.0.tar.bz2",
"17eecb095bd3b0774a87a38624a77ce35e497cd2"),
('v140', '3.5'):("https://github.com/willyd/caffe-builder/releases/download/v1.1.0/libraries_v140_x64_py35_1.1.0.tar.bz2",
"f060403fd1a7448d866d27c0e5b7dced39c0a607"),
}
下载后的压缩包放到C:\Users\chris.caffe\dependencies\download\目录下,然后解压到download的同级目录
2.3 再次修改cuda相关配置
接下来,如果你要用cuda编译,那么一定要修改C:\Users\chris.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\include\boost-1_61\boost\config\compiler\nvcc.hpp:注释掉最后三行:
#if !defined(__CUDACC_VER__) || (__CUDACC_VER__ < 70500)
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#endif
(原因:cuda7.5以后,__CUDACC_VER__
被废除,应当使用__CUDACC_VER_MAJOR_
和__CUDACC_VER_MINOR__
等,参考https://github.com/BVLC/caffe/issues/5994、https://blog.youkuaiyun.com/qq_37817177/article/details/80604294)。
2.4 开始编译
回到刚才的cmd,继续敲(#后面是注释,不用敲进去)
set PATH=%PATH%;C:\Windows\Microsoft.NET\Framework\v4.0.30319 #临时添加MSBuild.exe的路径
set MSVC_VERSION=12 #12对应到我用的vs2013. build_win.cmd中默认为vs2015,也就是13
set WITH_NINJA=0 # 不使用ninja,用visual studio。因为编译中间出了问题在vs里面好查看。
# set CPU_ONLY=1 # 如果没有GPU,或者就是想编译CPU版本,则开启
set RUN_INSTALL=1 #安装。默认走的非appveyor分支,RUN_INSTALL为0,这不是坑人么。
.\scripts\build_win.cmd # 前面我写明的修改项都完成后,本行会顺利执行。
编译期间出现“锟斤拷”的乱码可以忽略,最后:
build_win.cmd
脚本中的设定,默认编译的是release模式的。修改脚本,或者干脆打开cmake生成的build/Caffe.sln工程来编译debug版本。
2.5 配置pycaffe
因为目前不搞训练了,系统上只装一个caffe版本,不存在多个版本冲突问题。那么就方便点,把build/install/python/caffe文件夹,拷贝到D:\soft\Anaconda2\Lib下。
以后再开VSCode时,import caffe
再也不会报红了。
3 使用caffe.lib
比如不想在原始的caffe工程中添加自己的代码,这样保持了caffe自身代码不变,只要在自己的使用了caffe库的工程中正确设定,就独立的开发自己的代码了。
假设自己的这个工程也是基于cmake构建,最关键的一点是,正确配置了前面编译的caffe的依赖项,而不是自己再去重新配一遍..
set(CAFFE_DEPENDENCIES_DIR "C:/Users/Administrator/.caffe/dependencies/libraries_v120_x64_py27_1.1.0")
include(${CAFFE_DEPENDENCIES_DIR}/libraries/caffe-builder-config.cmake)
完整的例子见:
https://github.com/zchrissirhcz/toolbox/tree/master/cmake_examples/caffe_cpp_play_better
值得注意的是:前面编译出来的caffe-BVLC的,其构建类型要与自己的工程一致,也就是debug搭配debug,release搭配release。我这里实验发现debug模式下个别库名字不对,缺少“d”或者"-d",在Visual Studio里手动改一下就可以了。