从源代码构建 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

此处接受的答案和安装文档中的注释"将--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"添加到 GCC 5 及更高版本的构建命令"的组合。

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

illegal instruction (core dumped), exiting python.

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

如何使用 gcc 5.0 从源代码构建张量流?

错误消息告诉我您的程序是使用处理器没有的指令编译的,查看您的构建字符串让我怀疑 AFAIK 仅在相对较新(和高端(CPU 中实现的-mavx2-mfma。 请注意,gcc 将使用您的 CPU 不支持的指令的标志进行编译,但该程序不会在您的机器上运行

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

为了回答您的最后评论,没有办法"启用"这些指令,它们是在硬件中实现的,它们要么在您的 CPU 上可用,要么不可用。

最新更新