37 votes

Instruction illégale (core dumpée) après l'exécution du tensorflow d'importation

J'ai créé un nouvel environnement virtuel: virtualenv -p python2 test_venv/ Et installé tensorflow: pip install --upgrade --no-cache-dir tensorflow

import tensorflow me donne Illegal instruction (core dumped)

Veuillez m'aider à comprendre ce qui se passe et comment je peux y remédier. Je vous remercie.

Informations sur le processeur:

 -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
 

Stacktrace obtenu avec 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 ?? ()
 

58voto

Dinesh Points 1104

Je voudrais utiliser une version plus ancienne. On dirait que ton CPU ne prend pas en charge les instructions AVX.

Des citations de leurs de presse 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.

Vous avez au moins deux options:

  1. Utilisation tensorflow de 1,5 ou plus

  2. Construire à partir de la source

Quant à votre intérêt pour les différences, vous manquez de nouvelles fonctionnalités, mais la plupart des fonctionnalités de base et les documentations ne sont pas si différents.

5voto

mjflory Points 51

Malheureusement, 1.6 a donné la même erreur à de nombreuses personnes. Je l'ai reçu après avoir installé 1.7 sur une machine avec un ancien processeur Core2. Je me suis installé avec 1.5, car je ne peux pas installer la grande carte graphique dans la machine avec le processeur à jour!

4voto

mikaelfs Points 7

Comme expliqué dans la accepté de répondre, ce problème peut être résolu soit par l'installation de l'ancienne version de TensorFlow (v1.5) ou d'un bâtiment à partir de la source. Entre les deux, bâtiment de la source est sans doute une voie privilégiée en dépit de l'effort supplémentaire. Acquis que le fichier binaire contient la plupart des composants mis à jour de TensorFlow.

Cet article explique comment construire TensorFlow à partir de sources et optimise pour les plus vieux CPU. La clé est dans la détection de la CPU et de drapeaux, de permettre à toutes les CPU drapeaux pour l'optimisation lors de la configuration de la construction.

La commande suivante est utilisée pour détecter les courants CPU optimisation des drapeaux:

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

Si, par l'exécution de la commande, -mavx et/ou -mavx2 n'est pas indiqué, il peut être confirmé que AVX soutien est manquant et la source de construire devrait être fait avec d'autres options d'optimisation affiché dans la sortie.

Dans un article connexe, la cause première de cette question est discutée plus en détail, qui est fourni comme une référence supplémentaire.

1voto

Ehab AlBadawy Points 449

J'ai eu un problème similaire et il s'est avéré que c'est dû à j'ai légèrement vieux CPU et qui ne fonctionne pas très bien avec 1,6+ versions de TensorFlow https://www.tensorflow.org/install/source

Remarque: à Partir de TensorFlow 1.6, les binaires utilisation instructions AVX qui peut ne pas fonctionner sur les Processeurs plus anciens.

Donc, comme mentionné précédemment, vous pouvez soit installer TensorFlow 1.5, ou si vous voulez toujours la dernière version de TF, vous aurez besoin de l'installer avec conda à la place (les deux solutions ont travaillé avec moi)

Pour conda de l'installation:

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

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

0voto

Laurent S Points 1431

Il y a un problème sur github à ce sujet, qui semble avoir eu que peu d'intérêt à partir de la tensorflow de l'équipe, malheureusement.

Il y a un peu de communauté se construit autour de l'internet qui pourrait fonctionner selon votre situation:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X