安装CUDA和CUDNN等
详见我之前的文章《Win10下安装Tensorflow 1.8 GPU版(CUDA9.2)》
捷径:
在Github上有位大神提供了windows下的编译包,可直接搜 happynear/caffe-windows ,按其教程安装即可
happynear/caffe-windows是caffe的半官方windows版,虽然在文档中只支持Visual Studio 2015, CUDA 9.0,但略作修改即可支持VS2017、CUDA9.2的环境。
不走捷径,初试Caffe
首先从官网clone源码,遵循官网教程来安装
git clone https://github.com/BVLC/caffe.git
cd caffe
git checkout windows
:: Edit any of the options inside build_win.cmd to suit your needs
C:\Projects\caffe> scripts\build_win.cmd
不出意外,肯定报错。
VisioStudio2015/Common7/Tools/../../VC/vcvarsall.bat”‘
不是内部或外部命令,也不是可运行的程序 CMake Error: Error: generator : Ninja
修改scripts/build_win.cmd
- 第五行if DEFINED APPVEYOR是Google的自动化集成,目测用不到,跳到70行,修改为下图所示:
MSVC_VERSION=15 对应VS2017在下方会用到
WITH_NINJA=0 NINJA在Windows下不好编译安装,因此不使用
CPU_ONLY=0 如果编译CPU版本这里改为1
PYTHON_VERSION=3 目前只支持3.6,为了使用Python3.6之后还有骚操作
如果使用了Conda,从APPVEYOR部分把代码拷贝过来,修改路径;如果没有用Conda,只修改配置最后一句即可
- 在if %WITH_NINJA% EQU 0里添加VS2017的信息
- 修改environement for VS x64
- 如果使用CUDNN加速,还需要在修改cmake下的参数列表
至此,我们再次运行scripts/build_win.cmd
如果运气不好的话,会在这里 ERROR: Build failed,此时可以在build/目录下运行 cmake ..
然后和好运气的人一起到达下一个错误
深入分析原因,会找到根源在 cmake/WindowsDownloadPrebuiltDependencies.cmake 因为预编译包里没有VS2017和Python3.6的属性。
编译依赖库caffe-builder
Caffe在编译时会从网上下载依赖库caffe-builder,而目前只有VS2013/2015配python2.7/3.5环境的caffe-builder。
下载最新源码
https://github.com/willyd/caffe-builder/releases
修改build_v140_x64.cmd
如果编译失败,出现 CMake throws Error: could not load cache 应是缓存问题,清除缓存文件或把倒数第二行修改为 cmake ..
修改packages/protobuf/CmakeLists.txt
将protobuf包的Hash值从 14a532a7538551d5def317bfca41dace
修改为 39d6a4fa549c0cce164aa3064b1492dc
修改packages/hdf5/CmakeLists.txt
将URL从 https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.16/src/CMkae-hdf5-1.8.16.zip
修改为 https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.16/src/CMkae-hdf5-1.8.16.zip
运行build_v140_x64.cmd
然后进入 build_v140_x64 目录用VS2017启动 caffe-builder.sln 并生成
此时在build/libraries目录下,生成了caffe编译所需要的文件,将这个libraries目录拷贝到C:/Users/[user name]/.caffe/dependencies下
注释掉cmake/WindowsDownloadPrebuiltDependencies.cmake中的部分内容,见下图
重新编译Caffe,运行scripts/build_win.cmd
顺利的话,大约10分钟后就编译好了。
然而不幸的是因为有墙、引用库版本修改无法下载指定链接等原因,编译常会因为下载错误而失败。