Вопрос-Ответ

Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

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

Недавно я установил tensorflow (версия процессора для Windows) и получил следующее сообщение:


Успешно установлен tensorflow-1.4.0 tensorflow-tensorboard-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: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\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!, что указывает на то, что установка действительно прошла успешно, но есть что-то еще, что не так.

Вы знаете, в чем проблема и как ее исправить?

Переведено автоматически
Ответ 1

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

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


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


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

Я хотел бы подчеркнуть здесь: это касается только процессора.

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

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

Что вам следует делать?

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

# Just disables the warning, doesn't take advantage of AVX/FMA to run faster
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

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


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

Ответ 2

Обновите двоичный файл tensorflow для вашего процессора и ОС с помощью этой команды

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

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

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

Ответ 3

Оптимизация процессора с помощью GPU

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

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


Возложение операций конвейера ввода на центральный процессор может значительно повысить производительность. Использование центрального процессора для конвейера ввода освобождает графический процессор, чтобы сосредоточиться на обучении.


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

Ответ 4

Для Windows вы можете проверить официальную оптимизацию Intel MKL для дисков TensorFlow, которые скомпилированы с AVX2. Это решение ускоряет мой вывод ~ x3.

conda install tensorflow-mkl
python tensorflow