簡體   English   中英

運行導入 tensorflow 后出現非法指令(核心轉儲)

[英]Illegal instruction (core dumped) after running import tensorflow

我創建了一個全新的虛擬環境: virtualenv -p python2 test_venv/並安裝了 tensorflow: pip install --upgrade --no-cache-dir tensorflow --upgrade 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 獲得的堆棧跟蹤:

#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 ?? ()

我會使用舊版本。 看起來您的 CPU 不支持 AVX 指令。

引用他們的發布頁面

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. 從源代碼構建

關於您對差異的關注,您會錯過新功能,但大多數基本功能和文檔並沒有什么不同。

不幸的是,1.6 給了很多人同樣的錯誤。 我在一台舊的 Core2 CPU 的機器上安裝了 1.7 后收到了它。 我已經用 1.5 解決了,因為我無法在帶有最新處理器的機器中安裝大顯卡!

如已接受的答案中所述,可以通過安裝舊版本的 TensorFlow (v1.5) 或從源代碼構建來解決此問題。 在這兩者之間,盡管付出了額外的努力,但從源頭構建可以說是首選途徑。 假定二進制文件包含 TensorFlow 的最新組件。

本文介紹了如何從源代碼構建 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 支持,並且應使用輸出中顯示的其他優化標志來完成源構建。

相關文章 中,更詳細地討論了此問題的常見根本原因,作為額外參考提供。

我有一個類似的問題,結果證明這是因為我的 CPU 有點舊,並且在 1.6+ 版本的 TensorFlow https://www.tensorflow.org/install/source上不能很好地工作

注意:從 TensorFlow 1.6 開始,二進制文件使用 AVX 指令,這些指令可能無法在較舊的 CPU 上運行。

因此,如前所述,您可以安裝 TensorFlow 1.5,或者如果您仍然想要最新版本的 TF,則需要使用 conda 來安裝它(這兩種解決方案都適用於我)

對於 conda 安裝:

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

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

github 上有一個關於此的問題,不幸的是,tensorflow 團隊似乎對此興趣不大。

有一些圍繞 Web 的社區構建可能會根據您的情況起作用:

以下步驟對我有用。 (刪除現有的張量流)

在 conda 虛擬環境中

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

第二步:安裝tensorflow(無需降級)

我會使用 docker 將 tf 降級到以前的版本。 您可以在 dockerhub 上找到不同的標簽

例如:

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

它可能與 TensorFlow、Keras、Pytorch 沒有直接關系。 對不起。

但是它發生在我的 L4T(Nvidia Jetson AGX Xavier)上,當我安裝最新版本的 NumPy、pandas、protobuf 時,它引發了奇怪的錯誤,同時在控制台上我不知道為什么,我的意思是真的,我會如果有人可以,不勝感激 它警告我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

從 tensorflow==2.3.1 到 tensorflow==2.4.0 的類似問題在當前 cpu 芯片短缺的情況下,預構建的二進制文件不能很好地工作,這使得很多人難以升級。

可能需要自己構建 tensorflow 才能使用 tensorflow_probability 的最新功能(取決於 tf 2.4.0)

Edit2:來自https://github.com/tensorflow/tensorflow/releases/tag/v2.4.1

此版本從 TF 2.4.0 中刪除了 AVX2 要求。

看起來我不是唯一一個在 avx2 支持方面遇到困難的人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM