it-swarm.com.de

Unzulässige Anweisung (Kernspeicherauszug) nach dem Ausführen des Importtensorflows

Ich habe eine neue virtuelle Umgebung erstellt: virtualenv -p python2 test_venv/.__ und installierte tensorflow: pip install --upgrade --no-cache-dir tensorflow

import tensorflow gibt mir Illegal instruction (core dumped)

Bitte helfen Sie mir zu verstehen, was los ist und wie ich es reparieren kann. Vielen Dank.

CPU-Informationen:

-cpu
          description: CPU
          product: Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz
          bus info: [email protected]
          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

Stacktrace mit gdb erhalten:

#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>, [email protected]=2, [email protected]=0x7fffffffd5c8, [email protected]=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 ([email protected]=0xa11920, argc=2, argv=0x7fffffffd5c8, env=0xa7b4d0) at dl-init.c:120
#7  0x00007ffff7dec8e2 in dl_open_worker ([email protected]=0x7fffffffb5c0) at dl-open.c:575
#8  0x00007ffff7de7564 in _dl_catch_error ([email protected]=0x7fffffffb5b0, [email protected]=0x7fffffffb5b8, 
    [email protected]=0x7fffffffb5af, [email protected]=0x7ffff7dec4d0 <dl_open_worker>, [email protected]=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 ([email protected]=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 ([email protected]=0x7ffff75eceb0 <dlopen_doit>, [email protected]=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 ?? ()
24
Gerry

Ich würde eine ältere Version verwenden. Sieht so aus, als ob Ihre CPU keine AVX-Anweisungen unterstützt.

Zitieren von ihrer Freigabeseite

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.

Sie haben mindestens zwei Möglichkeiten:

  1. Tensorflow 1.5 oder älter verwenden

  2. Aus Quelle erstellen 

In Bezug auf Ihre Besorgnis wegen der Unterschiede werden Sie die neuen Funktionen verpassen, aber die meisten grundlegenden Funktionen und Dokumentationen sind nicht so unterschiedlich.

44
Dinesh

Leider hat 1.6 vielen Menschen den gleichen Fehler gegeben. Ich erhielt es nach der Installation von 1.7 auf einer Maschine mit einer alten Core2-CPU. Ich habe mich mit 1,5 geeinigt, da ich die große Grafikkarte mit dem aktuellen Prozessor nicht in die Maschine einbauen kann!

5
mjflory

Wie in der akzeptierten Antwort erläutert, kann dieses Problem entweder durch Installieren einer älteren Version von TensorFlow (v1.5) oder durch Erstellen aus dem Quellcode behoben werden. Zwischen den beiden ist das Bauen von der Quelle trotz des zusätzlichen Aufwands wohl eine bevorzugte Route. Zugegeben, die Binärdatei enthält die aktuellsten Komponenten von TensorFlow.

Dieser Artikel erklärt, wie TensorFlow aus Quellen erstellt und für die ältere CPU optimiert wird. Der Schlüssel liegt in der Erkennung der CPU-Flags und der Aktivierung aller CPU-Flags für die Optimierung bei der Konfiguration des Builds.

Der folgende Befehl wird zum Erkennen allgemeiner CPU-Optimierungsflags verwendet:

$ 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"; }

Wenn durch Ausführen des Befehls -mavx und/oder -mavx2 wird nicht angezeigt, es kann bestätigt werden, dass die AVX-Unterstützung fehlt, und die Erstellung der Quelle sollte mit anderen Optimierungsflags erfolgen, die in der Ausgabe angezeigt werden.

In ein verwandter Artikel wird die häufig auftretende Ursache dieses Problems ausführlicher erläutert, die als zusätzliche Referenz bereitgestellt wird.

1
mikaelfs

Ich hatte ein ähnliches Problem und es stellte sich heraus, dass es darauf zurückzuführen ist, dass ich eine leicht veraltete CPU habe und dass dies mit Versionen ab 1.6 von TensorFlow https://www.tensorflow.org/install/source) nicht sehr gut funktioniert

Hinweis: Ab TensorFlow 1.6 verwenden Binärdateien AVX-Anweisungen, die möglicherweise nicht auf älteren CPUs ausgeführt werden.

Wie bereits erwähnt, können Sie TensorFlow 1.5 entweder installieren oder, wenn Sie immer noch die neueste Version von TF möchten, müssen Sie es stattdessen mit conda installieren (beide Lösungen haben bei mir funktioniert).

Für Conda-Installation:

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

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

0
Ehab AlBadawy

Es gibt eine Ausgabe auf github darüber, die leider vom Tensorflow-Team wenig Beachtung gefunden zu haben scheint.

Im Web gibt es einige Community-Builds, die je nach Situation funktionieren können:

0
Laurent S