Windows下TensorFlow GPU版编译
TensorFlow对于CUDA库的版本有着较为严格的要求,比如早期的TensorFlow1.10都不允许使用超过CUDA 9.0的版本。
好在现在版本放松了,允许使用指定范围内的CUDA进行编译。(然而还是有许多大神魔改编译配置,并且成功编译出了指定版本之外的环境组合,比如1.10+9.2)
但是随着TensorFlow在机器学习界的地位日益壮大,咕果公司也开始了夹带私货的行为。在官方编译指导文档上,我们可以看见,从1.11.0开始,编译工具由cmake
换成了自家的bazel
。
(个人观点) 在下认为,换个编译工具没问题,但起码Windows平台上要花点功夫。一个更加便捷的编译工具固然是好事,但是如果为使用该工具而附加的配置环境过于繁琐的话,不但不能吸引用户,甚至反过来还有劝退的效果。即便放开Windows平台不言,在Linux平台上的编译也有着不小的问题,仅仅是编译CPU版本的,不论是java平台,还是软件本身的问题,层出不穷。对自家的产品还有最高版本限制?这似乎是这个项目在于自家地位远远不够重要的表现,用户反倒要成为开发的主力军。 (bb结束)
编译的版本为1.13.2,为了使用cmake脚本,需要做以下改动:
-
添加
tensorflow\core\util\version_info.cc
,在改用bazel作为推荐生成工具之后,在对应位置下找不到该文件。但是文件内容经推断如下:/* Generated by gen_git_source.py */ const char* tf_git_version() {return "b'1.13.2 Release'";} const char* tf_compiler_version() {return "1.13.2";}
也可以从此看出,该文件由Python脚本自动生成,脚本位置位于
tensorflow\tools\git\gen_git_source.py
。 - 编辑
tensorflow\contrib\cmake\external\sqlite.cmake
,由于在文章编写时链接已经失效,将18行改为set(sqlite_URL https://www.sqlite.org/2019/sqlite-amalgamation-3280000.zip)
- 若是使用了不低于第四代的Intel CPU,可以采用扩展指令集以提高性能。由于MSVC编译器只提供到SSE2 (2000)的支持,相比于受到支持、近年来开发的AVX2 (~2012)性能肯定不会优秀到哪里去,因而选择使用AVX2指令集进行编译。有的CMake只识别到AVX,需要到设定的编译目录中的
CMakelists.txt
中直接修改tensorflow_WIN_CPU_SIMD_OPTIONS
对应的值为/arch:AVX2
。(需要使用SSE4.2的可以使用Intel家的ICC编译器,自家CPU肯定有完美支持的)
正在编译中,已经出现了错误,等编译完后继续来补充
=====================================================
后续补充 编译失败了,好气。不想再编译这破玩意了,直接到github上预编译包得了。 https://github.com/fo40225/tensorflow-windows-wheel