【问题标题】:Illegal instruction (core dumped) after running import tensorflow运行 import tensorflow 后的非法指令(核心转储)
【发布时间】:2018-08-12 04:07:33
【问题描述】:

我创建了一个全新的虚拟环境:virtualenv -p python2 test_venv/ 并安装了tensorflow:pip install --upgrade --no-cache-dir tensorflow

import tensorflow 给我Illegal instruction (core dumped)

请帮助我了解发生了什么以及如何解决它。谢谢。

CPU 信息:

-cpu
          description: CPU
          product: Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz
          bus info: cpu@0
          version: CPU Version
          capabilities: x86-64 fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid dtherm arat cpufreq

使用 gdb 获得的 Stacktrace:

#0  0x00007fffe5793880 in std::pair<std::__detail::_Node_iterator<std::pair<tensorflow::StringPiece const, std::function<bool (tensorflow::Variant*)> >, false, true>, bool> std::_Hashtable<tensorflow::StringPiece, std::pair<tensorflow::StringPiece const, std::function<bool (tensorflow::Variant*)> >, std::allocator<std::pair<tensorflow::StringPiece const, std::function<bool (tensorflow::Variant*)> > >, std::__detail::_Select1st, std::equal_to<tensorflow::StringPiece>, tensorflow::StringPieceHasher, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_emplace<std::pair<tensorflow::StringPiece, std::function<bool (tensorflow::Variant*)> > >(std::integral_constant<bool, true>, std::pair<tensorflow::StringPiece, std::function<bool (tensorflow::Variant*)> >&&) ()
   from /media/gerry/hdd_1/ws_hdd/test_venv/local/lib/python2.7/site-packages/tensorflow/python/../libtensorflow_framework.so
#1  0x00007fffe5795735 in tensorflow::UnaryVariantOpRegistry::RegisterDecodeFn(std::string const&, std::function<bool (tensorflow::Variant*)> const&) () from /media/gerry/hdd_1/ws_hdd/test_venv/local/lib/python2.7/site-packages/tensorflow/python/../libtensorflow_framework.so
#2  0x00007fffe5770a7c in tensorflow::variant_op_registry_fn_registration::UnaryVariantDecodeRegistration<tensorflow::Tensor>::UnaryVariantDecodeRegistration(std::string const&) ()
   from /media/gerry/hdd_1/ws_hdd/test_venv/local/lib/python2.7/site-packages/tensorflow/python/../libtensorflow_framework.so
#3  0x00007fffe56ea165 in _GLOBAL__sub_I_tensor.cc ()
   from /media/gerry/hdd_1/ws_hdd/test_venv/local/lib/python2.7/site-packages/tensorflow/python/../libtensorflow_framework.so
#4  0x00007ffff7de76ba in call_init (l=<optimized out>, argc=argc@entry=2, argv=argv@entry=0x7fffffffd5c8, env=env@entry=0xa7b4d0)
    at dl-init.c:72
#5  0x00007ffff7de77cb in call_init (env=0xa7b4d0, argv=0x7fffffffd5c8, argc=2, l=<optimized out>) at dl-init.c:30
#6  _dl_init (main_map=main_map@entry=0xa11920, argc=2, argv=0x7fffffffd5c8, env=0xa7b4d0) at dl-init.c:120
#7  0x00007ffff7dec8e2 in dl_open_worker (a=a@entry=0x7fffffffb5c0) at dl-open.c:575
#8  0x00007ffff7de7564 in _dl_catch_error (objname=objname@entry=0x7fffffffb5b0, errstring=errstring@entry=0x7fffffffb5b8, 
    mallocedp=mallocedp@entry=0x7fffffffb5af, operate=operate@entry=0x7ffff7dec4d0 <dl_open_worker>, args=args@entry=0x7fffffffb5c0)
    at dl-error.c:187
#9  0x00007ffff7debda9 in _dl_open (
    file=0x7fffea7cbc34 "/media/gerry/hdd_1/ws_hdd/test_venv/local/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so", mode=-2147483646, caller_dlopen=0x51ad19 <_PyImport_GetDynLoadFunc+233>, nsid=-2, argc=<optimized out>, argv=<optimized out>, env=0xa7b4d0)
    at dl-open.c:660
#10 0x00007ffff75ecf09 in dlopen_doit (a=a@entry=0x7fffffffb7f0) at dlopen.c:66
#11 0x00007ffff7de7564 in _dl_catch_error (objname=0x9b1870, errstring=0x9b1878, mallocedp=0x9b1868, operate=0x7ffff75eceb0 <dlopen_doit>, 
    args=0x7fffffffb7f0) at dl-error.c:187
#12 0x00007ffff75ed571 in _dlerror_run (operate=operate@entry=0x7ffff75eceb0 <dlopen_doit>, args=args@entry=0x7fffffffb7f0) at dlerror.c:163
#13 0x00007ffff75ecfa1 in __dlopen (file=<optimized out>, mode=<optimized out>) at dlopen.c:87
#14 0x000000000051ad19 in _PyImport_GetDynLoadFunc ()
#15 0x000000000051a8e4 in _PyImport_LoadDynamicModule ()
#16 0x00000000005b7b1b in ?? ()
#17 0x00000000004bc3fa in PyEval_EvalFrameEx ()
#18 0x00000000004c136f in PyEval_EvalFrameEx ()
#19 0x00000000004b9ab6 in PyEval_EvalCodeEx ()
#20 0x00000000004b97a6 in PyEval_EvalCode ()
#21 0x00000000004b96df in PyImport_ExecCodeModuleEx ()
#22 0x00000000004b2b06 in ?? ()
#23 0x00000000004a4ae1 in ?? ()

【问题讨论】:

  • 您是否尝试安装较旧的 tensorflow 版本? pip install tensorflow==1.4 or 1.3 or 1.2?
  • 它适用于 1.5 版,但这并不理想,因为文档和教程可能专注于最新版本。但是,我想它已经很好了。如果您发布答案,我会接受。

标签: python tensorflow pip virtualenv


【解决方案1】:

我会使用旧版本。看起来你的 CPU 不支持 AVX 指令。

引用他们的Release Page

Breaking Changes
Prebuilt binaries are now built against CUDA 9.0 and cuDNN 7.
Prebuilt binaries will use AVX instructions. This may break TF on older CPUs.

您至少有两个选择:

  1. 使用 tensorflow 1.5 或更早版本

  2. 从源代码构建

关于您对差异的关注,您会错过新功能,但大多数基本功能和文档并没有那么不同。

【讨论】:

  • 我让我的一个队友从源代码编译 tensorflow 并使用 bazel-build,最后她得到了一个 .whl 文件,所以我从她那里复制了该文件并尝试使用pip 将其安装到我的虚拟环境中,肯定成功,然后在import 上出现此错误。有什么解释吗? tensorflow source install using bazel
【解决方案2】:

不幸的是,1.6 给了很多人同样的错误。我在一台装有旧 Core2 CPU 的机器上安装了 1.7 后收到了它。我已经选择了 1.5,因为我无法在装有最新处理器的机器中安装大显卡!

【讨论】:

  • 请您分享您的更多经验,因为在我的情况下这两种解决方案都失败了(我也有带有 GTX 1060 的 Core 2 双核处理器 :))
【解决方案3】:

有一个 issue on github 关于这个,不幸的是,似乎没有引起 tensorflow 团队的兴趣。

根据您的情况,围绕网络构建的一些社区可能会起作用:

【讨论】:

  • 遗憾的是,这些都没有得到很好的维护。
【解决方案4】:

如已接受的答案中所述,可以通过安装旧版本的 TensorFlow (v1.5) 或从源代码构建来解决此问题。在两者之间,尽管付出了额外的努力,但从源头构建可以说是首选路线。假定二进制文件包含 TensorFlow 的最新组件。

This article 解释了如何从源代码构建 TensorFlow 并针对旧 CPU 进行优化。关键是在配置构建时检测 CPU 标志并启用所有 CPU 标志以进行优化。

以下命令用于检测常见的CPU优化标志:

$ grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]' '[:lower:]' | { read FLAGS; OPT="-march=native"; for flag in $FLAGS; do case "$flag" in "sse4_1" | "sse4_2" | "ssse3" | "fma" | "cx16" | "popcnt" | "avx" | "avx2") OPT+=" -m$flag";; esac; done; MODOPT=${OPT//_/\.}; echo "$MODOPT"; }

如果通过执行命令,-mavx 和/或-mavx2 未显示,则可以确认缺少 AVX 支持,并且应该使用输出中显示的其他优化标志来完成源代码构建。

a related article 中,更详细地讨论了此问题的常见根本原因,作为附加参考提供。

【讨论】:

  • “对于较旧的 CPU”:您的意思是“较旧或更便宜”。英特尔仍在发布不带 AVX 的 CPU,否则这些 CPU 足以处理 TensorFlow。
【解决方案5】:

我遇到了类似的问题,结果证明这是由于我的 CPU 有点旧,并且在 1.6+ 版本的 TensorFlow https://www.tensorflow.org/install/source 上不能很好地工作@

注意:从 TensorFlow 1.6 开始,二进制文件使用可能无法在旧 CPU 上运行的 AVX 指令。

如前所述,您可以安装 TensorFlow 1.5,或者如果您仍想要最新版本的 TF,则需要使用 conda 安装它(这两种解决方案都适用于我)

对于 conda 安装:

conda create -n tensorflow
conda install tensorflow-gpu -n tensorflow

https://github.com/tensorflow/tensorflow/issues/17411

【讨论】:

    【解决方案6】:

    以下步骤对我有用。 (删除现有的张量流)

    在 conda 虚拟环境中

    第 1 步:使用 pip 安装 keras-application

    第二步:安装tensorflow(无需降级)

    【讨论】:

      【解决方案7】:

      我会使用 docker 将 tf 降级到以前的版本。你可以在 dockerhub 上找到不同的标签

      例如:

      docker run --gpus all -it tensorflow/tensorflow:2.2.1-gpu bash
      

      【讨论】:

        【解决方案8】:

        它可能与 TensorFlow、Keras、Pytorch 没有直接关系。抱歉。

        但是在我安装最新版本的 NumPy、pandas、protobuf 时,它在 L4T(Nvidia Jetson AGX Xavier)上发生在我身上,它引发了奇怪的错误,同时在控制台上 我不知道为什么,我的意思是真的,如果有人可以,我会很感激。它警告我关于 Pandas 的依赖项称为 python-dateutil=2.8.1

        为了弄清楚这一点,回到兔子洞,我尝试了这些步骤:

        pip3 uninstall numpy 
        pip3 uninstall pandas
        pip3 uninstall protobuf 
        pip3 uninstall python-dateutil 
        

        然后尝试使用特定版本安装它们

        pip3 install numpy==1.13.3
        pip3 install pandas==0.22.0
        pip3 install protobuf==3.0.0
        

        它现在可以很好地与 TensorFlow:1.5.0、PyTorch:1.6、1.7 配合使用

        【讨论】:

        • 注意 Numpy 1.19.5 版本,安装 1.19.2 可能会解决问题
        【解决方案9】:

        从 tensorflow==2.3.1 到 tensorflow==2.4.0 的类似问题 预构建的二进制文件在当前 cpu 芯片短缺的情况下不能很好地工作,这使得很多人难以升级。

        可能需要自己构建 tensorflow 才能使用 tensorflow_probability 的最新功能(取决于 tf 2.4.0)

        编辑2: 来自https://github.com/tensorflow/tensorflow/releases/tag/v2.4.1

        此版本从 TF 2.4.0 中删除了 AVX2 要求。

        看起来我不是唯一一个在支持 avx2 方面遇到困难的人

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-19
          • 2018-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多