Существует ли версия TensorFlow, не скомпилированная для инструкций AVX?

Я пытаюсь запустить 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? и испугался

Ответ 1

Подход передовой практики, предложенный 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, поэтому '' должно быть там по причине

-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'

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

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

Ответ 2

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

Ответ 3

Вы можете найти готовые колеса (поддержка окон) здесь, на Github: https://github.com/fo40225/tensorflow-windows-wheel или вы можете создать свои собственные колеса

У меня тоже была такая же проблема, но я решил ее.