Ваш процесор підтримує інструкції, що цей бінарний файл TensorFlow не був складений для використання: AVX AVX2


656

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

Успішно встановлено tensorflow-1.4.0 tensorflow-tenzorboard-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 \ workpace \ 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!, що вказує на те, що установка справді була успішною, але є щось інше, що не так.

Чи знаєте ви, в чому проблема, і як її усунути?


33
Якщо працює, інформація, яку вона випльовує, просто означає, що це не так швидко, як це могло б бути. Щоб позбутися від нього, ви можете встановити його з джерела, дивіться тут
Бен

Я також стикаюся з тим же питанням із командами, які ви могли б успішно виконати. >>> 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.
Хамід Гейдарян

Відповіді:


818

Про що це попередження?

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

Розширені векторні розширення ( AVX ) - це розширення до архітектури наборів інструкцій x86 для мікропроцесорів від Intel та AMD, запропонованих Intel в березні 2008 року та вперше підтримані Intel з доставкою процесорів Sandy Bridge у 1 кварталі 2011 року, а пізніше AMD з доставкою процесора Bulldozer у третьому кварталі 2011 року. AVX пропонує нові функції, нові інструкції та нову схему кодування.

Зокрема, AVX впроваджує сплавлені операції множення-накопичення (FMA), які прискорюють обчислення лінійної алгебри, а саме крапковий продукт, множення матриць, згортання тощо. Майже кожен тренінг з машинного навчання передбачає велику кількість цих операцій, отже, буде швидше на процесорі, що підтримує AVX та FMA (до 300%). У попередженні зазначено, що ваш процесор підтримує AVX (ура!).

Я хотів би наголосити тут: справа лише в процесорі .

Чому його тоді не використовували?

Оскільки розподіл tensorflow по замовчуванням будується без розширень процесора , таких як SSE4.1, SSE4.2, AVX, AVX2, FMA і т.д. За замовчуванням будує (ті з pip install tensorflow) призначені , щоб бути сумісним з такою кількістю процесорів , як це можливо. Ще один аргумент полягає в тому, що навіть з цими розширеннями процесор набагато повільніше, ніж GPU, і очікується, що середнє та масштабне навчання машинному навчанню буде здійснюватися на 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 все одно працює нормально, але цих набридливих попереджень ви не побачите.


Якщо у вас немає графічного процесора і ви хочете максимально використовувати процесор, вам слід створити тензофлор ​​із джерела, оптимізованого для вашого процесора з включеними 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% коефіцієнт підсилення 68s-> 48s на CIFAR10 1000 ітерацій". Ви впевнені, що корисна порада ігнорувати попередження під час використання GPU? Якщо цей коментар не є хибним, здається, що від наборів інструкцій процесора, щонайменше, можна отримати щонайменше в деяких випадках.
Пітер Кордес

1
@PeterCordes Якщо це так, я обов'язково включу його у свою відповідь. Але твердження "моя модель прискорюється на 30%" звучить так само, як "моя програма C ++ прискорюється на 30%". Яка модель саме? Чи є вручну розміщення процесора? Як передаються дані? Напр., Може бути багато роботи в нумері. Звичайно, можна зробити процесор вузьким місцем, і на цьому питання виникає багато питань. Зазвичай це вважається помилкою.
Максим

2
@Maxim: Весь текст видаленої відповіді " У моєму тесті інструкція AVX512F на I9 (7900x) GPU (GTX1080Ti) робить 28% -й коефіцієнт збільшення 68s-> 48s на CIFAR10 1000 ітерацій ". Тож на жаль, немає деталей (або пунктуації, граматики чи форматування).
Пітер Кордес

2
Мабуть, якщо ви працюєте на Mac, він не буде використовувати GPU, stackoverflow.com/questions/46364917/…
Дент Артур Дент

156

За допомогою цієї команди оновіть бінарний тензол для вашого процесора та ОС за допомогою цієї команди

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

URL-адресу завантаження файлу whl можна знайти тут

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


1
Я спробував Windows 10 wuth url stackoverflow.com/questions/47068709/… . Я отримую повідомлення про помилку сказавши zipfile.BadZipFile: Файл не є поштовий файл
Thusitha Thilina Dayaratne

1
Це спрацювало, коли я завантажую та використовую завантажену версію
Whichitha Thilina Dayaratne

1
кожен, хто отримує "помилку при вимові zipfile.BadZipFile: Файл - це не поштовий файл", повинен отримати необроблене посилання, як для cuda9.2avx2, посилання - github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Йесін Ар Рахман

5
Для вікон я спробував це. Видаліть існуючий tensorflow за допомогою "pip uninstall tensorflow", після чого перевстановіть його за допомогою "pip install <Шлях до завантаженого файлу WHL>". Завантажте цей файл WHL на свій комп’ютер - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , якщо у вас є 3.6 Python та 64-розрядні вікна (ігноруйте amd, який ви бачите). В іншому випадку перейдіть крок назад у github та шукайте правильний WHL. Це працює
Король

3
Працювали для мене. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - завантажено whl та встановлено. В даний час використовується екземпляр p2.xLarge aws. Продуктивність покращилася з 16 секунд за ітерацію до 9 секунд для спеціальної вправи на виявлення об'єктів із 230 класами, які працюють на швидшому R-CNN.
Абрикос

27

Оптимізація процесора за допомогою GPU

Є підвищення продуктивності, які можна отримати, встановивши TensorFlow з джерела, навіть якщо у вас є графічний процесор і використовувати його для навчання та висновку. Причина полягає в тому, що деякі операції з TF мають лише реалізацію процесора і не можуть працювати на вашому GPU.

Також є кілька порад щодо підвищення продуктивності, які добре використовують ваш процесор. Посібник з продуктивності TensorFlow рекомендує наступне:

Розміщення вхідних конвеєрних операцій на процесорі може значно підвищити продуктивність. Використання процесора для вхідного конвеєра звільняє GPU зосередитися на навчанні.

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



12

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

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

Якщо ви зіткнулися з помилкою "Файл - це не поштовий файл", завантажте .whl на свій локальний комп'ютер та скористайтеся цим cmd для встановлення:

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

графічні процесори розділені на частини і позначені як .7z файли. Як скласти їх разом?
користувач3496060

@ user3496060 Я використав winrar для розпакування розділених файлів
Алан Дурсун

8

Якщо ви використовуєте pip- версію tensorflow, це означає, що вона вже складена, і ви її просто встановлюєте. В основному ви встановлюєте tensorflow-gpu, але коли ви завантажуєте його з сховища та намагаєтеся створити, вам слід створити його за допомогою CPU AVX підтримки. Якщо ви проігноруєте це, ви отримаєте попередження щоразу, коли будете працювати на процесорі.


як я можу уникнути цієї помилки, які речі мені потрібно дотримуватися?
jitsm555

2
це не помилка. Це попередження про те, що thensorflow не підтримує AVX для процесора. Якщо ви не хочете його бачити, просто вимкніть його, встановивши os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan

5

Найпростіший спосіб, який я знайшов, щоб це виправити - це видалити все, а потім встановити певну версію tensorflow-gpu:

  1. видалити tensorflow:
    pip uninstall tensorflow
  1. видаліть tensorflow-gpu: (переконайтеся, що запустіть це, навіть якщо ви не впевнені, чи встановили ви це)
    pip uninstall tensorflow-gpu
  1. Встановіть конкретну версію tensorflow-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: Немає модуля під назвою 'tensorflow_hub'
D Адамс

ModuleNotFoundError: Немає модуля під назвою 'tensorflow_datasets'
D Адамс

Спробуйте встановити модулі окремо: pip install tensorflow_hubіpip install tensorflow_datasets
Джеймс Бретт

yup -> просто намагаюся бути корисним у повноті вашої відповіді.
D Адамс

О, я не пам’ятаю, щоб встановлювати їх окремо. Дякую!
Джеймс Бретт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.