Существует ли версия TensorFlow, не скомпилированная для инструкций AVX? - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь запустить TensorFlow на своем Chromebook, я знаю, это не лучшее место, но я просто хочу почувствовать это.Я не проделал большую работу в среде разработчиков Python или в любой другой среде разработчиков, так что терпите меня.После выяснения пипа я установил TensorFlow и попытался импортировать его, получив такую ​​ошибку:

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2018-12-11 06:09:54.960546: F tensorflow/core/platform/cpu_feature_guard.cc:37] The TensorFlow library was compiled to use AVX instructions, but these aren't available on your machine.
Aborted (core dumped)

После некоторых исследований я обнаружил, что мой процессор (Intel Celeron N2840 (архитектура Bay Trail-M))не поддерживает инструкции AVX, поэтому мне было интересно, есть ли способ использовать версию, скомпилированную для некоторого другого набора инструкций.Cog говорит мне, что я могу использовать MMX и различные SSE (что бы это ни значило).

PS Это своего рода дубликат ошибки TensorFlow с использованием инструкций AVX в Linux при работе в Windows на одной машине но не полностью.Плюс я не могу комментировать, потому что у меня нет 50 репутации.

PPS Я смотрел на Как скомпилировать Tensorflow с инструкциями SSE4.2 и AVX? и испугался

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Попробуйте Анаконда .Он должен иметь дистрибутив TensorFlow для старых процессоров.Компиляция TensorFlow сложная .

0 голосов
/ 14 марта 2019

Подход, основанный на рекомендациях peter-cordes , заключается в том, чтобы узнать, что gcc собирается использовать с вашими «какими возможностями обладает ваш процессор», выполнив следующее:

gcc -O3 -fverbose-asm -march=native -xc /dev/null -S -o- | less

Эта команда предоставит информацию (все) о ваших возможностях ЦП с точки зрения gcc, который собирается выполнить сборку, поэтому представление gcc имеет значение.

Когда это произойдет?Когда программа предлагает адаптировать себя к вашему процессору.Dang.Что я знаю о моем процессоре.Ну, вышеприведенная строка расскажет вам все, что вам нужно знать.

При этом, как правило, люди / разработчики, которые продвигают возможности на базе процессоров, сообщат или предложат список вещей, которые идут быстрее / лучше / сильнее, есливаш процессор имеет *.И вышеизложенное даст вам *.Прочитайте внимательно, что вы видите.Если у вас его нет, он вам не нужен, то есть

-mno-avx(whatever you don't want;in my case it was avx)

Хороший обзор установки процессора, поддерживающего более старые процессоры, предоставлен Микаэль Фернандес Сималанго для Ubuntu 16.04 LTS.Предполагается среда Python2.7, но легко переводится в Python3.Суть дела в том, чтобы извлечь, какие расширения инструкций процессора доступны на вашем конкретном процессоре, которые будут использоваться в дополнение к -march = native через / proc / cpuinfo, (но обратите внимание, что он кажется ограниченным тем, какие флаги он принимает, поэтому может бытьЛучше на самом деле прочитать вышеприведенную инструкцию и подумать)

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

Выполнение этого на моем старом выводе:

-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt

Это частично проходит там.Не ясно, как сказать «не это» и «не то», что для старых процессоров, скорее всего, будет -mno-avx.

Для старого процессора, который имеет значение -march, а Nephanth очень полезен для этого:

gcc -march=native -Q --help=target|grep march

производит

-march=                             westmere

, что означает мойответ на вопрос ./compile должен быть или может быть, и обратите внимание на кавычки 'westmere', которые также есть в gcc docs, поэтому '' должно быть там по причине

-march='westmere' -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx

, но это, вероятно,намного лучше (см. обсуждение ниже):

-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx

Параметр -mno-avx является опцией для gcc, и после многих часов приводит к

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more 
information.
>>> import tensorflow as tf
>>> 
>>> tf.__version__
'2.0.0-alpha0'

, что выглядит как успех.

Повторно: в любом порядке выясните, какие инструкции поддерживаются (или не поддерживаются) вашим процессором, и укажите их явно.

...