从源构建Tensorflow时出现非法指令错误

ano*_*n01 4 python gcc tensorflow

我正在用bazel从源代码构建张量流,如下所述: https://www.tensorflow.org/install/install_sources

在安装文档之后,我使用以下代码成功编译:

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both \
--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"--config=cuda \
-k //tensorflow/tools/pip_package:build_pip_package
Run Code Online (Sandbox Code Playgroud)

这里接受的答案和安装文档中的注释"添加--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"到gcc 5及更高版本的构建命令"的组合.

但是,会import tensorflow as tf导致错误

illegal instruction (core dumped), exiting python.
Run Code Online (Sandbox Code Playgroud)

我还试过:conda update libgcc无济于事.

如何使用gcc 5.0从源代码构建tensorflow?

GPh*_*ilo 6

错误消息告诉我你的程序是用你的处理器没有的指令编译的,看看你的构建字符串让我怀疑-mavx2-mfma哪个AFAIK只在最近(和高端)的CPU中实现.请注意,gcc将使用标志进行编译,以获得CPU不支持的指令,但程序将无法在您的计算机上运行.

要确保您的CPU支持这些标志,请在bash中运行gcc -march=native -Q --help=target | grep enabled并检查输出是否包含您要使用的所有构建标志(除了-mfpmath它之外没有显示为启用或禁用,因为它允许输出列表.你需要检查完整的gcc -march=...命令输出).

为了回答你的最终评论,没有办法"启用"这些指令,它们是用硬件实现的,它们可以在你的CPU上使用,或者它们不是.