Незаконная инструкция (ядро сбрасывается) после запуска importororflowflow

Я создал новую виртуальную среду: virtualenv -p python2 test_venv/ И установлен тензорный поток: pip install --upgrade --no-cache-dir tensorflow

import tensorflow дает мне Illegal instruction (core dumped)

Пожалуйста, помогите мне понять, что происходит и как я могу это исправить. Спасибо.

Информация о процессоре:

-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, полученный с помощью 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>, [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 ?? ()

Ответ 1

Я бы использовал более старую версию. Похоже, ваш процессор не поддерживает инструкции 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. Использовать тензор 1.5 или старше

  2. Построить из источника

Что касается вашей озабоченности различиями, вы упустите новые возможности, но большинство основных функций и документации не так уж и отличаются.

Ответ 2

К сожалению, 1.6 дал многим людям ту же ошибку. Я получил его после установки 1.7 на машине со старым процессором Core2. Я установил с 1.5, так как я не могу поместить большую графическую карту в машину с помощью современного процессора!

Ответ 3

Как объясняется в принятом ответе, эту проблему можно исправить либо установкой более старой версии TensorFlow (v1.5), либо сборкой из исходного кода. Между ними построение из источника, возможно, является предпочтительным маршрутом, несмотря на дополнительные усилия. Предполагается, что бинарный файл содержит самые обновленные компоненты TensorFlow.

Эта статья объясняет, как собрать TensorFlow из исходных кодов, и оптимизирует его для более старого процессора. Ключ в обнаружении флагов ЦП и включении всех флагов ЦП для оптимизации при настройке сборки.

Следующая команда используется для определения общих флагов оптимизации ЦП:

$ 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 отсутствует, и сборку исходного кода следует выполнить с другими флагами оптимизации, отображаемыми в выходных данных.

В соответствующей статье общая причина этой проблемы обсуждается более подробно, что приводится в качестве дополнительной ссылки.

Ответ 4

К сожалению, на github есть проблема, которая, к сожалению, мало заинтересована командой tenorflow.

В Интернете существует несколько сообществ, которые могут работать в зависимости от вашей ситуации:

Ответ 5

У меня была похожая проблема, и оказалось, что это связано с тем, что у меня немного старый процессор, и он не очень хорошо работает с 1. 6+ версиями TensorFlow https://www.tensorflow.org/install/source

Примечание. Начиная с TensorFlow 1.6, двоичные файлы используют инструкции AVX, которые могут не работать на старых процессорах.

Как упоминалось ранее, вы можете либо установить TensorFlow 1.5, либо, если вам все еще нужна последняя версия TF, вам нужно будет установить ее вместо Conda (оба решения работали со мной)

Для установки conda:

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

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