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

656

Я новичок в 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!, что указывает на то, что установка действительно прошла успешно, но есть что-то еще, что не так.

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

CSG
источник
33
Тф работает, информация, которую он выдает, просто означает, что это не так быстро, как могло бы быть. Чтобы избавиться от него, вы можете установить его из исходников, см. Здесь
Ben
Я также сталкиваюсь с той же проблемой с командами, которые вы могли успешно выполнить. >>> sess = tf.Session() 2017-11-05 18:02:44.670825: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\ 35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instruct ions that this TensorFlow binary was not compiled to use: AVX AVX2
М. Огуз Озджан
@Ben, так что это просто предупреждение, но все будет работать нормально? (по крайней мере, с точки зрения начинающего)
bvdb
1
Чтобы скомпилировать Tensorflow с инструкциями AVX, см. Этот ответ
Sreeragh AR
2
Я получил очень похожее сообщение в той же ситуации, сообщение есть Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Хамид Гейдарян

Ответы:

821

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

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

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

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

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

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

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

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

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

# 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 работает нормально, но вы не увидите этих раздражающих предупреждений.


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

Максим
источник
29
Стоит отметить, что TensorFlow Serving имеет отдельные установки для неоптимизированного ЦП и оптимизированного ЦП (AVX, SSE4.1 и т. Д.). подробности здесь: github.com/tensorflow/serving/blob/…
Крис Фрегли
9
Согласно удаленному ответу на этот вопрос, AVX512F на i9-7900x (Skylake-AVX512) с графическим процессором (GTX1080Ti) «дает 28% прирост 68 с-> 48 с на итерациях CIFAR10 1000». Вы уверены, что это хороший совет, чтобы игнорировать предупреждение при использовании графического процессора? Если этот комментарий не является поддельным, кажется, что наборы инструкций ЦП могут быть полезны по крайней мере в некоторых случаях.
Питер Кордес
1
@PeterCordes Если это так, я обязательно включу это в свой ответ. Но утверждение «моя модель ускоряется на 30%» звучит так же, как «моя программа на C ++ ускоряется на 30%». Какая именно модель? Есть ли ручное размещение процессора? Как данные передаются? Например, может быть много работы в NumPy. Конечно, можно сделать CPU узким местом, и в SO много вопросов по этому поводу. Обычно это считается ошибкой.
Максим
2
@Maxim: Весь текст удаленного ответа звучит так: « В моем тесте инструкция AVX512F для графического процессора I9 (7900x) (GTX1080Ti) дает 28% прирост 68 с-> 48 с на итерациях CIFAR10 1000 ». Так что, к сожалению, нет никаких деталей (или знаков препинания, грамматики или форматирования).
Питер Кордес
2
Очевидно, если вы работаете на Mac, он не будет использовать графический процессор, stackoverflow.com/questions/46364917/…
Дент Артур Дент
156

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

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

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

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

HimalayanCoder
источник
1
Я пробовал на Windows 10 с URL-адресом stackoverflow.com/questions/47068709/… . Я получаю сообщение об ошибке: zipfile.BadZipFile: Файл не является zip-файлом
Тузита Тилина Дайаратне
1
Это сработало, когда я загружаю и использую загруженную версию
Тузита Тилина Дайаратне
1
Любой, кто получает сообщение об ошибке, сообщающее, что zipfile.BadZipFile: файл не является файлом zip, должен получить необработанную ссылку, например, для cuda9.2avx2, ссылка github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman
5
Для windows я попробовал это. Удалите существующий тензор потока с помощью «pip uninstall tenorflow», а затем переустановите его с помощью «pip install <Путь к загруженному файлу WHL>». Загрузите этот файл WHL на свой компьютер - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , если у вас есть 3.6 Python и 64-битные окна (не обращайте внимания на то, что вы видите). В противном случае перейдите на шаг назад в github и найдите правильный WHL. Это работает
король
3
Работал на меня. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - скачали whl и установили. В настоящее время используется экземпляр p2.xLarge aws. Производительность улучшилась с 16 секунд на итерацию до 9 секунд для пользовательского упражнения по обнаружению объектов с 230 классами, работающими на Faster R-CNN.
Абрикос
27

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

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

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

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

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

Wesam
источник
12

Для 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
Z.Wei
источник
GPU разделены на части и помечены как файлы .7z. Как собрать их вместе?
user3496060
@ user3496060 Я использовал winrar для распаковки сплит-файлов
Алан Дурсун
8

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

Азарапет Туанян
источник
как я могу избежать этой ошибки, что нужно соблюдать?
jitsm555
2
Это не ошибка. Это предупреждение, что thensorflow не поддерживает AVX для процессора. Если вы не хотите его видеть, просто отключите его, установив os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan
5

Самый простой способ, который я нашел, чтобы это исправить, это удалить все и установить определенную версию tenorflow-gpu:

  1. удалить tenorflow:
    pip uninstall tensorflow
  1. удалить tenorflow-gpu: (обязательно запустите это, даже если вы не уверены, что установили его)
    pip uninstall tensorflow-gpu
  1. Установите конкретную версию tenorflow-gpu:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Вы можете проверить, сработало ли это, добавив следующий код в файл Python:

from __future__ import absolute_import, division, print_function, unicode_literals

import numpy as np

import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_datasets as tfds

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub Version: ", hub.__version__)
print("GPU is", "available" if tf.config.experimental.list_physical_devices("GPU") else "NOT AVAILABLE")

Запустите файл и затем результат должен быть примерно таким:

Version:  2.0.0
Eager mode:  True
Hub Version:  0.7.0
GPU is available

Надеюсь это поможет

Джеймс Бретт
источник
ModuleNotFoundError: нет модуля с именем tenensflow_hub
D Адамс
ModuleNotFoundError: Нет модуля с именем tenensflow_datasets
D Адамс
Попробуйте установить модули отдельно: pip install tensorflow_hubиpip install tensorflow_datasets
Джеймс Бретт
да -> просто пытаюсь быть полезным в полноте вашего ответа.
Д Адамс
О, я не помню, чтобы установить их отдельно. Спасибо!
Джеймс Бретт
0

Что сработало для меня, так это библиотека https://pypi.org/project/silence-tensorflow/

Установите эту библиотеку и сделайте так, как указано на странице, она работает как шарм!

shivam13juna
источник