天天看点

Windows:Tensorflow 1.14,2.1.0,2.2.0 C++接口编译为dll,包括lib,h文件有任何地方有问题都欢迎交流准备编译

目录

  • 有任何地方有问题都欢迎交流
    • 个人编译好的库文件包
  • 准备
    • Step0:注意事项,出现错误再回来找
    • Step1:写在前面,导出符号BUG提前修复
  • 编译
    • Step1:基础环境配置
    • Step2:下载安装msys2.exe
    • Step3:下载安装bazel
    • Step4:下载tensorflow源码
    • Step5:整理头文件
    • Step6:VS中项目属性设置
    • 附录:其他可选优化选项

有任何地方有问题都欢迎交流

个人编译好的库文件包

下载地址

提取码:zzzz

准备

Step0:注意事项,出现错误再回来找

  1. 编译与训练版本需保持一致,每次变更完系统变量之后,重新运行一下python configure.py
  2. 网络状况一定要好,出现connect timed out / support error 多试几次,最好多试几遍
  3. 计算能力必须匹配,tensorflow需要根据目标产品部署显卡的计算能力进行特定版本的编译,或者编译全计算能力版本进行开发,但是dll文件较大
  4. 若想重命名lib,dll文件名称,需要先在tensorflow/tensorflow/build中找到相应代码并修改
  5. 若遇到max,min冲突错误,则在VS属性—C/C++—Preprocessor—中添加NOMINMAX
  6. 最好一个版本TF对应一套lib,include,dll,包括CPU / GPU版本对应好
  7. tensorflow多模型同时推理测试,限制显存增长即可解决
  8. 一直connect error

    (1)尝试清理缓存C/usr/_bazel_user文件夹

    (2)连接外网

Step1:写在前面,导出符号BUG提前修复

  1. 实际使用dll的时候无法解析的外部符号错误:
(1)r2.3.0 / r1.15.0版本(待完善)
(2)r1.14 / r2.1.0 / r2.2.0版本
找到文件tensorflow\tensorflow\tools\def_file_filter\def_file_filter.py.tpl记事本打开
找到类似于如下格式的代码段,并追加如下两行代码
    def_fp.write("\t [email protected]@@[email protected]@[email protected]@[email protected]@@Z\n")
    def_fp.write("\t [email protected]@@[email protected]\n")
           
(3)r1.11 / r1.12 / r1.13.1版本
进入目录tensorflow\tensorflow\
找到tf_exported_symbols_msvc.lds 和 BUILD 文件,使用我提供的两个同名文件分别替换相应的文件
若还遇到导出符号错误的问题,依照tf_exported_symbols_msvc.lds文件格式继续追加即可
           

我已经提供两个文件,下载后直接复制替换即可

下载链接

  1. 编译r2.1.0 / r.2.2.0

    tensorflow/WORKSPACE修改,在头部加上如下代码参考这里

http_archive(
    name = "io_bazel_rules_docker",
    sha256 = "6287241e033d247e9da5ff705dd6ef526bac39ae82f3d17de1b69f8cb313f9cd",
    strip_prefix = "rules_docker-0.14.3",
    urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.14.3/rules_docker-v0.14.3.tar.gz"],
)
           

编译

Step1:基础环境配置

  1. nvidia最新驱动
  2. vs2019 + vs2019-2015 redistributable
  3. CUDA 10.1 / 10.2+ cudnn 7.6.5
  4. python 版本3.7.7 单独装一个python,并且添加环境变量,之后pip install numpy six
  5. 默认安装vs2019,windows SDK 10.0及以上即可

Step2:下载安装msys2.exe

  1. https://www.msys2.org/,按照官网教程走一遍
  2. 系统环境变量中添加 D:\msys64\usr\bin
  3. CMD中输入,pacman -S git patch unzip

Step3:下载安装bazel

  1. Bazel版本(已通过测试)

    (1)r1.13:0.20.0

    (2)r1.14:0.24.1

    (3)r2.1.0:0.27.1

    (4)r2.2.0:2.0.0

    (5)r2.3.0:3.1.0

  2. 下载地址https://github.com/bazelbuild/bazel/releases
  3. 重命名为bazel.exe(此操作必要),然后放入D:\bazel\0.27.1下
  4. 添加bazel.exe到系统环境变量path中
  5. VC路径配置

(1)r1.13 / r1.14(如果有,则删除 BAZEL_VC

环境变量),然后添加环境变量VS140COMNTOOLS,路径如下

C:\Program Files(x86)\Microsoft Visual Studio 14.0\Common7\Tools\

(2) r2.1.0 / 2.2.0(如果有,则删除 VS140COMNTOOLS

环境变量),然后添加环境变量BAZEL_VC,路径如下

C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\VC

Step4:下载tensorflow源码

  1. tensorflow-r1.14(r2.1.0)-master文件夹重命名为tensorflow,然后CMD进入tensorflow/
  2. python configure.py

    (1)XLA JIT 支持 (感受不到明显作用,求指导,r1.14开了编译会报错)

    (2)ROCm支持 (得先开了CUDA support)

    (3)/arch:AVX,/arch:AVX2 支持,CPU-Z查看(开了感受不到明显作用,求指导)

    (4)要编译GPU版本使用cuda就需要设置显卡计算能力,如:[3.5,5.0,6.1,7.5]

    最好与实际显卡匹配,显卡计算能力查询网址

    设置多个计算能力兼容性强,但是编译出的dll较大接近1GB,单个计算能力兼容性弱,dll大概200+MB

  3. 根据相应Tensorflow版本输入编译命令
(1)r1.12 / r1.13

bazel build //tensorflow:libtensorflow_cc.so

(2)r1.14 / r2.1.0 / r2.2.0

bazel build //tensorflow:tensorflow_cc

  1. 若configure.py中使用各种优化,则编译命令变更如下
(1)r1.12 / r1.13

bazel build --config=opt //tensorflow:libtensorflow_cc.so

(2)r1.14 / r2.1.0 / r.2.2.0

bazel build --config=opt //tensorflow:tensorflow_cc

Step5:整理头文件

  1. lib,dll

    tensorflow\bazel-bin\tensorflow文件夹下的两个文件重命名即可

    libtensorflow_cc.dll.ifso 重命名为 tensorflow_cc.lib

    tensorflow_cc.dll

  2. (CMD中进入tensorflow/tensorflow/) 输入命令
bazel build //tensorflow:install_headers
           
  1. D:\tensorflow\bazel-genfiles\tensorflow\include\src中文件夹复制到D:\tensorflow\bazel-genfiles\tensorflow\include中
  2. 此处为选择操作,最好操作一下:

    D:\tensorflow\bazel-tensorflow\external\protobuf_archive(com_google_protobuf)\src\google

    文件夹复制到D:\tensorflow\bazel-genfiles\tensorflow\include下

  3. D:\tensorflow\bazel-genfiles\tensorflow\include即为所需

Step6:VS中项目属性设置

  1. VC++包含目录

    D:\tensorflow_lib\include

  2. 【链接器】-【输入】根据需要添加
  3. 工程目录下添加,其他根据需要添加

    tensorflow_cc.lib

    tensorflow_cc.dll

附录:其他可选优化选项

Windows:Tensorflow 1.14,2.1.0,2.2.0 C++接口编译为dll,包括lib,h文件有任何地方有问题都欢迎交流准备编译

继续阅读