windows下编译GPU版本的tensorflow

本文参考CSDN一篇文章完成编译,博主只是完成1.6版本以上的编译填坑以及Debug方面的填坑。

1.环境准备

  • 由于有些网站和支持库的因素,需要自行准备X墙工具
  • vs2015及其以上版本(理论支持,本篇文章使用vs2015)
  • swig,官网是这里,注意下载windows版本的(含有.exe文件),解压即可
  • python,建议3.6或以上版本
  • CMake,官网下载安装,安装完成后添加到环境变量里(…/CMake/bin)
  • Git,官网下载安装,安装完成后添加到环境变量里(…/Git/bin)
  • cuda及cudnn,本文编译的是最新的1.10版本tf,所以cuda要求9.0,cudnn要求7,本次编译版本为:cuda9.0/CUDNN 7.2.1,配置方法自行网上搜索(注意:这里有个坑,TF1.11开始不支持Cmake编译推荐使用Bazel编译,目前博主编译的dll文件没能在windows下成功运行和编译,在GitHub提出的Issue官方也还尚未解决,最近进展点击进去查看,所以本教程所支持的TF最高版本只在1.10)
  • 矩阵运算库,这里选择的是eigen,下载最新的版本,解压后添加到环境变量里(…/eigen3.3.4)

    2.下载tensorflow源码,配置CMakeLists.txt

    打开命令提示符,cd到专门的路径下,输入

    git clone -b r1.10 https://github.com/tensorflow/tensorflow.git

    下载好tensorflow源码后,找到tensorflow/contrib/cmake/CMakeLists.txt,搜索"tensorflow_OPTIMIZE_FOR_NATIVE_ARCH"找到后做出如下修改

    if (tensorflow_OPTIMIZE_FOR_NATIVE_ARCH)
    include(CheckCXXCompilerFlag)
    CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
    if (COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
    else()
      CHECK_CXX_COMPILER_FLAG("/arch:AVX" COMPILER_OPT_ARCH_AVX_SUPPORTED)
      if(COMPILER_OPT_ARCH_AVX_SUPPORTED)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
      endif()
    endif()
    endif()

    3.开始编译lib和dll

    首先进入tensorflow/contrib/cmake目录下,新建一个build文件夹。然后打开命令提示符,输入cmake-gui,配置相关的路径,再configure(选择vs2015的那个vc14 64位编译器),即可得到下图
    png1
    打开vs2015 x86 x64兼容工具命令,如图
    png2
    右键-以管理员身份运行,先cd到tensorflow/contrib/cmake/build目录下,再输入以下内容进行configure

    cmake .. -A x64 -DCMAKE_BUILD_TYPE=Realse -T host=x64 -DSWIG_EXECUTABLE=D:/lib/swigwin-3.0.12/swig.exe -DPYTHON_EXECUTABLE=C:/Users/tao/AppData/Local/Programs/Python/python35/python.exe -DPYTHON_LIBRARIES=C:/Users/tao/AppData/Local/Programs/Python/python35/libs/python35.lib -Dtensorflow_ENABLE_GPU=ON -Dtensorflow_ENABLE_GRPC_SUPPORT=OFF -Dtensorflow_BUILD_SHARED_LIB=ON

    说明一下需要自行修改的参数,SWIG_EXECUTABLE是swig.exe所在路径,PYTHON_EXECUTABLE和PYTHON_LIBRARIES分别是python的exe和lib所在路径,这些都需要自己配,而且路径不能含有空格或者中文字符。后面tensorflow_ENABLE_GRPC_SUPPORT涉及到tensorflow线上部署,默认是ON的状态。另外要想指定编译其它内容,可以参考前面cmake-gui的那张图,配置的格式就是"-D+xxx=ON/OFF"。修改完这段话后,即可执行,等待configure done。

configure完成之后,就要开始正式编译动态库了。此时需要打开你的x墙工具,因为编译的过程中,会从网上下载几个文件,虽然都不大,但它们是存储在含有google的网址内的。接下来,在刚才的命令行窗口继续输入

MSBuild /p:Configuration=Release /p:Platform=x64 ALL_BUILD.vcxproj

如果想要编译Debug版本的TF,则需要修改一下

编译Debug版本TensorFlow.dll

修改 tensorflow\contrib\cmake\tools\create_def_file.py 中的 EXCLUDE_RE 变量。

EXCLUDE_RE = re.compile(r"RTTI|deleting destructor|::internal::|::`anonymous namespace'::|<lambda_[0-9a-z]+>|"
r"std::_Vector_iterator<|std::_Vector_const_iterator<|std::_Vector_alloc<|"
r"std::_Deque_iterator<|std::_Deque_alloc<|"
r"std::_Tree_iterator<|std::_Tree_const_iterator<|std::_Tree_unchecked_const_iterator<|std::_Tree_comp_alloc<|std::_Tree_node<|"
r"std::_List_iterator<|std::_List_const_iterator<|std::_List_unchecked_const_iterator<|std::_List_alloc<|"
r"std::_Iterator012<|std::_Compressed_pair<")

接下来就是漫长的等待了,在我的i5电脑下,编了大概六小时才完成,期间电脑会特别卡(vs默认是多线程编译的)。注意最后不能有错误,否则无法顺利生成tensorflow.lib和tensorflow.dll。最终得到的lib和dll是在tensorflow/contrib/cmake/build/Release目录下,这里提供我编译的一个版本。这里放出一份原博主编译好的tf1.6头文件和dll以及lib

Last modification:May 11, 2019
如果觉得我的文章对你有用,请随意赞赏