Подтвердить что ты не робот

Ваш процессор поддерживает инструкции, что этот двоичный файл TensorFlow не был скомпилирован для использования: AVX AVX2

Я новичок в TensorFlow. Я недавно установил его (версия процессора Windows) и получил следующее сообщение:

Успешно установлено tenorflow-1.4.0 tenorflow-tenorboard-0.4.0rc2

Затем, когда я пытался бежать

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
sess.run(hello)
'Hello, TensorFlow!'
a = tf.constant(10)
b = tf.constant(32)
sess.run(a + b)
42
sess.close()

(который я нашел через https://github.com/tensorflow/tensorflow)

Я получил следующее сообщение:

2017-11-02 01: 56: 21.698935: IC:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36 \ensorflow\core\platform\cpu_feature_guard.cc: 137] Ваш ЦП поддерживает следующие инструкции: Двоичный файл TensorFlow не был скомпилирован для использования: AVX AVX2

Но когда я побежал

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

он запустился как надо и вывел Hello, TensorFlow! , что указывает на то, что установка действительно прошла успешно, но есть что-то еще, что не так.

Знаете ли вы, в чем проблема и как ее исправить? Благодарю.

4b9b3361

Ответ 1

О чем это предупреждение?

Современные процессоры предоставляют множество инструкций низкого уровня, помимо обычной арифметики и логики, известных как расширения, например. SSE2, SSE4, AVX и т.д. Из Wikipedia:

Расширенные векторные расширения (AVX) - это расширения для инструкции x86 установить архитектуру для микропроцессоров Intel и AMD, предложенную Intel в марте 2008 года и впервые поддерживаемая Intel с Sandy В течение первого квартала 2011 года, а затем AMD AMD Бульдозерный процессор, отправляемый в 3 квартале 2011 года. AVX предоставляет новые функции, новые инструкции и новую схему кодирования.

В частности, AVX вводит операции fused multiply-accumulate (FMA), которые ускоряют вычисление линейной алгебры, а именно dot-product, умножают матрицу, свертка и т.д. Практически каждое обучение по машинной подготовке включает в себя большое количество этих операций, следовательно, будет быстрее на процессоре, поддерживающем AVX и FMA (до 300%). Предупреждение указывает, что ваш процессор поддерживает AVX (ура!).

Здесь я хотел бы подчеркнуть: все о только CPU.

Почему он не используется тогда?

Так как распределение по умолчанию в тензорном потоке построено без расширений ЦП, таких как SSE4.1, SSE4.2, AVX, AVX2, FMA и т.д. По умолчанию сборки (из pip install tensorflow) предназначены для совместимости с максимально возможным количеством CPU. Другим аргументом является то, что даже с этими расширениями процессор намного медленнее, чем у графического процессора, и он ожидал, что для среднего и крупного обучения машинного обучения будет выполняться на графическом процессоре.

Что вы должны делать?

Если у вас есть GPU, вам не стоит заботиться о поддержке AVX, потому что самые дорогостоящие операторы будут отправляться на устройство GPU (если явно не указано). В этом случае вы можете просто игнорировать это предупреждение

# Just disables the warning, doesn't enable AVX/FMA
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

... или установкой export TF_CPP_MIN_LOG_LEVEL=2, если вы находитесь в Unix. В любом случае Tensorflow работает нормально, но вы не увидите этих раздражающих предупреждений.


Если у вас нет графического процессора и вы хотите как можно больше использовать процессор, , вы должны создать shadoworflow из источника, оптимизированного для вашего процессора, с помощью AVX, AVX2, и FMA включен, если ваш процессор поддерживает их. Этот вопрос обсуждался в , а также этот вопрос GitHub. Tensorflow использует специальную систему сборки под названием bazel, и ее создание не является тривиальным, но, безусловно, выполнимо. После этого не только исчезнет предупреждение, но и улучшится производительность тензорного потока.

Ответ 2

Обновите двоичный файл tenorflow для вашего процессора и ОС, используя эту команду

pip install --ignore-installed --upgrade "Download URL"

URL загрузки файла whl можно найти здесь

https://github.com/lakshayg/tensorflow-build

Ответ 3

Оптимизация процессора с помощью графического процессора

Вы можете получить прирост производительности, установив TensorFlow из исходного кода, даже если у вас есть графический процессор и вы используете его для обучения и умозаключений. Причина в том, что некоторые операции TF имеют только реализацию CPU и не могут выполняться на вашем GPU.

Кроме того, есть несколько советов по повышению производительности, которые эффективно используют ваш процессор. Руководство по производительности TensorFlow рекомендует следующее:

Размещение операций ввода-вывода на процессоре может значительно повысить производительность. Использование CPU для входного конвейера освобождает GPU для сосредоточения на обучении.

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

Ответ 5

Для Windows (спасибо владельцу f040225) перейдите по ссылке: https://github.com/fo40225/tensorflow-windows-wheel, чтобы получить URL-адрес вашей среды на основе комбинации "tf + python + cpu_instruction_extension". Затем используйте этот cmd для установки:

pip install --ignore-installed --upgrade "URL"

Если вы столкнулись с ошибкой "Файл не является zip файлом", загрузите .whl на свой локальный компьютер и используйте этот cmd для установки:

pip install --ignore-installed --upgrade /path/target.whl

Ответ 6

Если вы используете pip- версию tenorflow, это означает, что она уже скомпилирована, и вы просто ее устанавливаете. По сути, вы устанавливаете tenorflow-gpu, но когда вы загружаете его из репозитория и пытаетесь его собрать, вы должны собрать его с поддержкой CPU AVX. Если вы игнорируете его, вы будете получать предупреждение каждый раз, когда вы запускаете процессор.

Ответ 7

Tensorflow, скомпилированный с помощью расширенных инструкций, может работать на 40% быстрее, чем неоптимизированный код, поэтому не игнорируйте это сообщение!

Я бы порекомендовал сборку TF из исходного кода, здесь приведены шаги для загрузки, компиляции и установки бета-версии v2.0, включая ссылку на скомпилированный файл .whl.

Сначала удалите версию по умолчанию:

sudo pip3 uninstall protobuf
sudo pip3 uninstall tensorflow

Во временной папке клонируйте Tensorflow:

git clone https://github.com/tensorflow/tensorflow 
git checkout r2.0

Установите зависимости пакета pip TensorFlow:

pip3 install -U --user pip six numpy wheel setuptools mock future>=0.17.1
pip3 install -U --user keras_applications==1.0.6 --no-deps
pip3 install -U --user keras_preprocessing==1.0.5 --no-deps

Установите Bazel, инструмент сборки, используемый для компиляции TensorFlow. После загрузки bazel-0.26.0-installer-darwin-x86_64.sh:

chmod +x bazel-0.26.0-installer-darwin-x86_64.sh ./bazel-0.26.0-installer-darwin-x86_64.sh --user export PATH="$PATH:$HOME/bin" bazel version

Сконфигурируйте сборку вашей системы, выполнив следующую команду в корне исходного дерева TensorFlow:

./configure

Используйте bazel для создания компоновщика пакетов TensorFlow с поддержкой только CPU:

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package

Команда bazel build создает исполняемый файл с именем build_pip_package - это программа, которая собирает пакет pip. Запустите исполняемый файл, как показано ниже, чтобы создать пакет .whl в каталоге /tmp/tenorflow_pkg.

Чтобы построить из ветки релиза:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Файл выходного колеса находится в: /tmp/tenorflow_pkg. Вы можете скачать файл отсюда и попробовать установить его напрямую

pip3 install /tmp/tensorflow_pkg/tensorflow-2.0.0b1-cp37-cp37m-macosx_10_14_x86_64.whl 

CD из этого каталога, и теперь запуск этого не должен выдавать предупреждение:

python3 -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

Оригинальный пост был опубликован здесь.