Windows10下编译无AVX支持的TensorFlow 1.6+失败求助
解决TensorFlow-GPU 1.6+在不支持AVX的Xeon 5670上的编译问题
问题梳理
我太懂这种卡在编译环节的糟心感了:你用Windows 10系统,Xeon 5670 CPU不支持AVX指令集,而TensorFlow-GPU 1.6+预编译包默认带了AVX优化,直接用不了。目前你靠CUDA 9.1+CUDNN 7.1搭配1.5版本预编译包能正常跑,但自己用CMAKE或Bazel编译1.6+版本时接连踩坑——CMAKE报2个错误,Bazel也有1个错误。
核心解决思路:禁用AVX编译选项
问题根源就是编译时默认开启了你的CPU不支持的AVX指令集优化,只要手动强制关闭这些选项,就能绕过报错。下面分别给你Bazel和CMAKE的具体调整步骤:
1. Bazel编译调整(官方推荐方式)
Bazel是TensorFlow官方主推的编译工具,调整起来更直接:
- 找到TensorFlow源码根目录,没有
.bazelrc文件的话就新建一个 - 往文件里添加以下配置,明确禁用AVX和AVX2:
build --copt=-mno-avx build --copt=-mno-avx2 build --config=cuda - 接着执行Windows环境下的标准编译命令:
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package - 编译完成后,用生成的脚本打包成pip包,再安装到你的环境里就行
2. CMAKE编译调整
如果更习惯用CMAKE,那就在配置阶段手动加编译参数:
- 打开CMAKE GUI,加载TensorFlow的源码目录和你指定的构建目录
- 在
CMAKE_CXX_FLAGS和CMAKE_C_FLAGS这两个选项里,都加上-mno-avx -mno-avx2 - 仔细核对CUDA 9.1和CUDNN 7.1的路径配置是否正确,别填错了
- 重新生成构建文件后再尝试编译,这样就能跳过AVX相关的编译错误了
额外提醒
- 虽然TensorFlow 1.6官方推荐用CUDA 9.0,但CUDA 9.1也能兼容,你要确保CUDNN版本和CUDA匹配(7.1对应9.1是没问题的)
- 编译时尽量用Python 3.6,这是TensorFlow 1.6+稳定支持的版本,避免版本不兼容的问题;Windows下还要确保用的是Visual Studio 2017对应的编译器,老版本可能会出其他编译问题
内容的提问来源于stack exchange,提问作者Andrew




