Як компілювати Tensorflow з інструкціями SSE4.2 та AVX?


289

Це повідомлення, отримане від запуску сценарію, щоб перевірити, чи працює Tensorflow:

I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

Я помітив, що він згадував SSE4.2 та AVX,

  1. Що таке SSE4.2 та AVX?
  2. Як ці SSE4.2 і AVX покращують обчислення процесора для завдань Tensorflow.
  3. Як зробити компіляцію Tensorflow за допомогою двох бібліотек?

18
Мені подобається будувати з цими прапорами bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package на Xeon E5 v3, що дає мені 3-кратне покращення швидкості процесора 8k matmul порівняно з офіційним випуском (0,35 -> 1,05 T ops / sec)
Ярослав Булатов

4
і не забувайте NOTE on gcc 5 or later: the binary pip packages available on the TensorFlow website are built with gcc 4, which uses the older ABI. To make your build compatible with the older ABI, you need to add --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" to your bazel build command. ABI compatibility allows custom ops built against the TensorFlow pip package to continue to work against your built package.звідси tensorflow.org/install/install_sources
Іван Куш

4
У мене є кілька скомпільованих двійкових файлів для TF, що підтримують ці інструкції github.com/lakshayg/tensorflow-build . Вам це може бути корисним.
Лакшай Гарг

1
@IvanKush додавши цей прапор, я все ще не можу успішно імпортувати tensorflow (компілюється штрафом). Якщо ви успішно скомпільовано з GCC 5, см: stackoverflow.com/questions/45877158 / ...
anon01

1
Якщо ви використовуєте Ubuntu 16.04, у нас є збірки майже для всіх варіантів, які вам, можливо, знадобляться на github.com/mind/wheels
danqing

Відповіді:


160

Я щойно зіткнувся з цією ж проблемою, схоже, що пропозиція Ярослава Булатова не охоплює підтримку SSE4.2, додавання цього --copt=-msse4.2буде достатньо. Зрештою, я успішно будував с

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

без отримання попереджень або помилок.

Мабуть, найкращий вибір для будь-якої системи:

bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

( Оновлення: сценарії побудови можуть бути їжею-march=native , можливо, тому, що вони містять= .)

-mfpmath=bothпрацює лише з gcc, а не з clang. -mfpmath=sseце, мабуть, так само добре, якщо не краще, і за замовчуванням для x86-64. 32-бітний будує за замовчуванням -mfpmath=387, так що зміна допоможе для 32-розрядних. (Але якщо ви хочете отримати високу продуктивність для скорочення чисел, вам слід створити 64-бітні бінарні файли.)

Я не впевнений , що по замовчуванням TensorFlow для -O2або -O3це. gcc -O3забезпечує повну оптимізацію, включаючи автоматичну векторизацію, але це іноді може зробити код повільнішим.


Що це робить: --coptдляbazel build передачі параметра безпосередньо на gcc для компіляції файлів C і C ++ (але не посилання, тому вам потрібна інша опція для оптимізації посилання між часом міжфайлових файлів)

x86-64 gcc за замовчуванням використовує лише SSE2 або більш старі інструкції SIMD, тому ви можете запускати бінарні файли в будь-якій системі x86-64. (Див. Https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html ). Це не те, чого ти хочеш. Ви хочете створити двійковий файл, який використовує всі інструкції, які може виконувати ваш процесор, тому що ви використовуєте цей двійковий файл лише в тій системі, де ви його побудували.

-march=nativeвмикає всі параметри, які підтримує ваш процесор, тому він стає -mavx512f -mavx2 -mavx -mfma -msse4.2зайвим. (Крім того, -mavx2вже дозволяє -mavxі -msse4.2, тому командування Ярослава мало бути добре). Крім того, якщо ви використовуєте процесор, який не підтримує жодного з цих параметрів (наприклад, FMA), використовуючи -mfma, ви робите бінарний файл, який не відповідає незаконним інструкціям.

За ./configureзамовчуванням TensorFlow увімкнено-march=native , тому використання цього не повинно вказувати параметри компілятора вручну.

-march=nativeдозволяє -mtune=native, тому він оптимізує ваш процесор для таких речей, як послідовність інструкцій AVX найкраще для нерівномірних навантажень.

Це все стосується gcc, clang або ICC. (Для ICC ви можете використовувати -xHOSTзамість -march=native.)


6
Це справді працює> +1! Тож, здається, -march=nativeце не працює. Крім того, вимкнення --config=cuda(якщо підтримка CUDA не потрібна), а також -k(оскільки при компіляції не сталася помилка) також працює.
Марк

4
Після видалення та перевстановлення нової компільованої версії я все одно отримую попередження для AVX, AVX2 та FMA.
Бенедикт С. Воглер

5
Мені довелося кинути, --copt=-mfpmath=bothщоб це працювало clangна macOS. Чи впливає це на отриманий бінар?
gc5

2
Тільки для уточнення: коли я створюю файл налаштування .... чи використовую я просто --copt = -march = native? Або я вкладаю всі ті оптимізації, які бачили в оригінальних публікаціях, де я маю можливість вкласти оптимізацію?
Thornhale

1
Я отримую помилку про те, що команда 'build' підтримується лише з робочої області? Що робити?
покірний

133

Почнемо з пояснення, чому ви бачите ці попередження в першу чергу .


Швидше за все, ви не встановили TF з джерела, а замість нього використовували щось подібне pip install tensorflow. Це означає, що ви встановили попередньо побудовані (кимось іншим) бінарні файли, які не були оптимізовані для вашої архітектури. І ці попередження говорять вам саме про це: щось є у вашій архітектурі, але воно не буде використовуватися, тому що бінарний файл не був складений з ним. Ось частина документації .

TensorFlow перевіряє запуск, чи складено він з оптимізацій, доступних у процесорі. Якщо оптимізація не включена, TensorFlow надсилатиме попередження, наприклад, інструкції AVX, AVX2 та FMA, які не включені.

Хороша річ, що, швидше за все, ви просто хочете навчитися / експериментувати з TF, щоб все працювало належним чином, і вам не варто про це турбуватися


Що таке SSE4.2 та AVX?

У Вікіпедії є хороші пояснення щодо SSE4.2 та AVX . Ці знання не потрібні, щоб бути хорошими при машинному навчанні. Ви можете подумати про них як набір деяких додаткових інструкцій для використання комп’ютером декількох точок даних проти однієї інструкції для виконання операцій, які можуть бути природно паралельними (наприклад, додавання двох масивів).

І SSE, і AVX - це реалізація абстрактної ідеї SIMD (Єдина інструкція, кілька даних), яка є

клас паралельних комп'ютерів у систематиці Фліна. Він описує комп'ютери з декількома елементами обробки, які виконують одну й ту ж операцію над кількома точками даних одночасно. Таким чином, такі машини використовують паралелізм рівня даних, але не одночасність: є одночасні (паралельні) обчислення, але лише один процес (інструкція) в даний момент

Цього достатньо, щоб відповісти на ваше наступне запитання.


Як ці SSE4.2 та AVX покращують обчислення процесора для завдань TF

Вони дозволяють більш ефективно обчислювати різні векторні (матричні / тензорні) операції. Ви можете прочитати більше на цих слайдах


Як зробити компіляцію Tensorflow за допомогою двох бібліотек?

Потрібно мати двійковий файл, який було складено, щоб скористатися цими інструкціями. Найпростіший спосіб - скласти його самостійно . Як запропонували Майк та Ярослав, ви можете використовувати наступну команду «Базель»

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package


4
Що означає цей командний рядок? І чи варто мені встановити bazelв цьому випадку?
YZ

1
Хто-небудь коли-небудь будує під вікнами 64-бітний з MSYS2 або Visual Studio 2017 ommunity Edition? і можете поділитися кроками?
Джеймс Чанг

1
Чи можна встановити цей пакет пакетів у локальному середовищі conda?
dgketchum

3
Через 3+ годин (минулий час: 11984.258) я отримав FAILED: Build did NOT complete successfully. Скласти це самостійно не так просто.
imbrizi

те ж саме. Моя збірка теж не вдалася, і тоді в журналах я бачу, що: cl: попередження командного рядка D9002: ігнорування невідомого параметра '-mavx' cl: попередження командного рядка D9002: ігнорування невідомого параметра '-mavx2' cl: попередження командного рядка D9002: ігнорування невідомий варіант '-mfma' cl: попередження командного рядка D9002: ігнорування невідомого параметра '-mfpmath = обидва' cl: попередження командного рядка D9002: ігнорування невідомої опції '-msse4.2' cl: попередження командного рядка D9002: ігнорування невідомого параметра '- fno-strict-aliasing 'cl: Попередження командного рядка D9002: ігнорування невідомого параметра' -fexceptions ', тому ці параметри невідомі
Shilan

53

Дозвольте спочатку відповісти на ваше третє запитання:

Якщо ви хочете запустити самокомпільовану версію в режимі conda-env, ви можете. Це загальні інструкції, які я виконую, щоб отримати tensorflow для встановлення в моїй системі з додатковими інструкціями. Примітка. Ця збірка була для збірки AMD A10-7850 (перевірте свій процесор, чи підтримуються інструкції ... може відрізнятися) під керуванням Ubuntu 16.04 LTS. Я використовую Python 3.5 в моїй conda-env. Кредит переходить на сторінку встановлення десятирядних джерел та відповіді, надані вище.

git clone https://github.com/tensorflow/tensorflow 
# Install Bazel
# https://bazel.build/versions/master/docs/install.html
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
# Create your virtual env with conda.
source activate YOUR_ENV
pip install six numpy wheel, packaging, appdir
# Follow the configure instructions at:
# https://www.tensorflow.org/install/install_sources
# Build your build like below. Note: Check what instructions your CPU 
# support. Also. If resources are limited consider adding the following 
# tag --local_resources 2048,.5,1.0 . This will limit how much ram many
# local resources are used but will increase time to compile.
bazel build -c opt --copt=-mavx --copt=-msse4.1 --copt=-msse4.2  -k //tensorflow/tools/pip_package:build_pip_package
# Create the wheel like so:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
# Inside your conda env:
pip install /tmp/tensorflow_pkg/NAME_OF_WHEEL.whl
# Then install the rest of your stack
pip install keras jupyter etc. etc.

Щодо вашого 2-го питання:

На мою думку, добре складена версія з оптимізаціями варто важити зусиль. У моєму конкретному режимі розрахунки, які раніше займали 560-600 секунд, займають лише 300 секунд! Хоча точні цифри будуть різними, я думаю, ви можете очікувати приблизно 35-50% збільшення швидкості в цілому для вашої конкретної установки.

Нарешті, ваше перше питання:

Дуже багато відповідей було надано вище. Підводячи підсумок: AVX , SSE4.1, SSE4.2 , MFA - це різні види розширених наборів інструкцій на процесорах X86. Багато з них містять оптимізовані інструкції для обробки матричних чи векторних операцій.

Я підкресля мою власну помилкову думку, щоб, сподіваюся, заощадити ваш час: Це не те, що SSE4.2 - це новіша версія інструкцій, що замінює SSE4.1. SSE4 = SSE4.1 (набір 47 інструкцій) + SSE4.2 (набір із 7 інструкцій).

У контексті компіляції tensorflow, якщо комп'ютер підтримує AVX2 і AVX, а також SSE4.1 і SSE4.2, слід поставити ці оптимізуючі прапори для всіх. Не так, як я це робив, і просто переходьте з SSE4.2, думаючи, що він новіший і повинен замінити SSE4.1. Це явно НЕБЕЗПЕЧНО! Мені довелося перекомпілювати через те, що коштувало мені добрих 40 хвилин.


де зберігається .whl файл, оскільки я хочу встановити його і на Windows?
WiLL_K

Він зберігається тут: / tmp / tensorflow_pkg (на вашому Linux-диску)
Thornhale

Чи можете ви сказати мені, скільки часу це займе. Це близько 2 годин, і мій ноутбук замерз. Його запущена ububtu з 4 ГБ оперативної пам’яті та процесором i5
WiLL_K

Гм, складання тензорфлоу вимагає тривалого часу. На моєму ноутбуці з 8 гб пройшло близько 1,5 годин. Однак час вашої установки може змінюватись і на них буде сильно впливати наявний таран. Ці компіляції, як відомо, займають багато оперативної пам'яті. Щоб зменшити вимоги до ресурсів і, можливо, запобігти заморожуванню, ви можете запустити компіляцію, додавши наступний прапор після "bazel build": --local_resources 2048, .5,1.0 Це часто допомагає при заморожуванні, але, ймовірно, вдвічі збільшить час, необхідний для компіляції. Наприклад: На одній з моїх швидших систем компіляція без прапора займала 2200 секунд, з прапором 4500!
Торнхейл

1
Загалом, я виявив, що робити ML на вікнах - це великий біль ззаду. Ви в кінцевому підсумку витрачаєте багато часу, намагаючись змусити роботу працювати просто так, якщо ви працюєте в середовищі Linux. Я вважаю, що для кожної ОС потрібно складати тензорфлоу. Крім того, якщо ви перейдете сюди: посилання , ви побачите, що tensorflow офіційно не підтримується. Тут існує посібник про те, як скласти tensorflow для Windows тут: посилання . Хоча, маю визнати, я цього не пробував. Я просто використовую ubuntu.
Торнхейл

25

Це набори інструкцій з обробки векторних SIMD .

Використання векторних інструкцій швидше для багатьох завдань; машинне навчання - це таке завдання.

Цитуючи документи про встановлення декількох доз :

Щоб бути сумісним з якомога ширшим діапазоном машин, TensorFlow за замовчуванням використовує лише інструкції SIME SSE4.1 SIMD на комп'ютерах x86. Більшість сучасних ПК та Macs підтримують більш вдосконалені інструкції, тому, якщо ви створюєте двійковий файл, який ви будете працювати лише на своїй машині, ви можете ввімкнути їх, використовуючи --copt=-march=nativeкоманду збірки базиліків.


Чому двійковий процесор Tensorflow не використовує диспетчеризацію процесора? Це погано підтримується GCC?
Кріс Пушбюлет

4
Посилання "Документи встановлення tensorflow" не працює. Тож мені цікаво, чи справді ця відповідь справедлива. Будь ласка дайте відповідь!
Thornhale

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

22

Завдяки всім цим відповідям + деяким випробуванням та помилкам, мені вдалося встановити його на Mac clang. Тож просто діліться своїм рішенням, якщо воно комусь корисне.

  1. Дотримуйтесь інструкцій щодо Документація - Встановлення TensorFlow з джерел

  2. Коли буде запропоновано для

    Будь ласка, вкажіть прапори оптимізації для використання під час компіляції, коли вказано параметр bazel "--config = opt" [Типовим є -march = native]

потім скопіюйте та вставте цей рядок:

-mavx -mavx2 -mfma -msse4.2

(Параметр за замовчуванням спричинив помилки, так само, як і деякі інші прапори. Я не мав помилок із зазначеними вище прапорами. До речі, я відповів nна всі інші запитання)

Після установки я перевіряю швидкість ~ 2x до 2.5x при навчанні глибоких моделей стосовно іншої установки на колесах за замовчуванням - Встановлення TensorFlow на macOS

Сподіваюся, це допомагає


4
-march=nativeмає бути ще краще, якщо ваш компілятор правильно його підтримує. Він також налаштовує -mtune=nativeправильний вибір інструкцій для вашого процесора. наприклад, у Haswell та пізніших версіях він вимикається -mavx256-split-unaligned-storeі -mavx256-split-unaligned-load, які за замовчуванням увімкнено для -mtune=genericта пошкоджують продуктивність, коли дані, як відомо, не вирівнюються, але виявляються під час виконання.
Пітер Кордес

1
Дякую! У моєму випадку -march=nativeсталася помилка, в той час як інші варіанти цього не зробили. Можливо, це конкретний компілятор. Я поділяв це саме на випадок, якщо інші пережили ту саму перешкоду.
JARS

1
Яка помилка? Якщо система збірки не дроселі на рядок з =в ньому, або ви не використовуєте gccабо clang, він повинен працювати. А чи -mtune=native -mavx2 -mfma працює на вас? Або -mtune=skylake? (Або будь-який процесор у вас є). До речі, -mavx2передбачає -mavxі -msse4.2. Не завадить включити їх до рецепту, і я думаю, що людям стає простіше залишити ті, які їх не підтримує процесор.
Пітер Кордес

1
Нещодавно я редагував найкращу відповідь на це питання, але сам не використовую тензорфлоу. Якщо з -march=nativeйого системою збирання щось не так , я хотів би знати. (І / або ви повинні повідомити про це вище, щоб вони могли виправити свої сценарії збирання).
Пітер Кордес

1
Дякую за пропозицію. Для того, щоб перевірити це, я повторно запустив сценарій .configure лише з -march=nativeцим, і це помилка: / Users / jose / Documents / code / tmptensorflow / tensorflow / tensorflow / core / BUILD: 1442: 1: C ++ компіляція правило '// tensorflow / core: lib_internal_impl' не вдалося (вихід 1). У файлі, включеному з tensorflow / core / platform / denormal.cc: 37: /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2/include/pmmintrin.h:28:2: error: "Набір інструкцій SSE3 не ввімкнено" #error "Набір інструкцій SSE3 не ввімкнено" за допомогою Apple LLVM версії 7.0.2 (clang-700.1.81)
JARS

7

Нещодавно я встановив його з джерела та нижче - це всі кроки, необхідні для його встановлення з джерела із наявними вказаними інструкціями.

Інші відповіді вже описують, чому відображаються ці повідомлення. У моїй відповіді покроково описано, як виконати встановлення, що може допомогти людям боротися за фактичну установку, як і я.

  1. Встановіть Bazel

Завантажте його з одного з доступних випусків , наприклад, 0.5.2 . Розпакуйте його, перейдіть в каталог і налаштувати його: bash ./compile.sh. Скопіюйте виконуваний файл у /usr/local/bin:sudo cp ./output/bazel /usr/local/bin

  1. Встановіть Tensorflow

Клон tensorflow: git clone https://github.com/tensorflow/tensorflow.git перейдіть до каталогу клонованих, щоб налаштувати його:./configure

Він запропонує вам декілька питань, нижче я запропонував відповісти на кожне із запитань, ви, звичайно, можете вибрати власні відповіді, як вам зручніше:

Using python library path: /usr/local/lib/python2.7/dist-packages
Do you wish to build TensorFlow with MKL support? [y/N] y
MKL support will be enabled for TensorFlow
Do you wish to download MKL LIB from the web? [Y/n] Y
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 
Do you wish to use jemalloc as the malloc implementation? [Y/n] n
jemalloc disabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N] N
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] N
No XLA JIT support will be enabled for TensorFlow
Do you wish to build TensorFlow with VERBS support? [y/N] N
No VERBS support will be enabled for TensorFlow
Do you wish to build TensorFlow with OpenCL support? [y/N] N
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] N
No CUDA support will be enabled for TensorFlow
  1. Пакет піп. Щоб створити його, ви повинні описати, які інструкції ви хочете (ви знаєте, ті Tensorflow повідомили, що ви відсутні).

Створіть сценарій піп: bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 -k //tensorflow/tools/pip_package:build_pip_package

Складіть пакет піп: bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Встановіть щойно створений вами пакет Tensorflow: sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

Тепер, коли ви запускаєте Tensorflow, він більше не скаржиться на пропущені інструкції.


4
Будівництво з справедливим -c opt --copt=-march=nativeмає бути як мінімум настільки ж добре --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2. (Обидва замовчують попередження, але -march=nativeможуть зробити ще швидший код, настроюючи спеціально для центрального процесора в системі, на якій ви будуєте). Також зауважте, що --copt=-mavx2 --copt=-mfmaмається на увазі всі попередні параметри AVX та SSE, тому цей довгий рядок параметрів був чітко написаний тим, хто не розуміє параметри gcc.
Пітер Кордес

1
@PeterCordes, погляньте на цю проблему ( github.com/tensorflow/tensorflow/isissue/7449 ), навіть технічні працівники базиліків не наполегливі, чому марш = нативно не працював так, як очікувалося. Як вам здається, ви «розумієте параметри gcc», то, ймовірно, ви можете допомогти їм виправити це, оскільки вони позначали проблему як потребуючу «підтримки громади».
Едуардо

Дякую, я погляну ... Гм, деякі люди кажуть, що --copt=-mavx2це не спрацювало. Якщо --copt=-mfma працює, --copt=-march=nativeмає працювати, якщо не буде проблем з розбором =. Для gcc / clang / icc ви обов'язково хочете, щоб сценарій збірки перейшов -march=nativeдо компілятора. Досягнення цього через сценарії побудови стає трюком.
Пітер Кордес

7

Це найпростіший метод. Лише один крок.

Це суттєво впливає на швидкість. У моєму випадку час, взятий на тренувальний крок, майже вдвічі зменшився.

Перегляньте спеціальні побудови з tensorflow


2
Windows будує, включаючи AVX2 github.com/fo40225/tensorflow-windows-wheel
Кріс

@SreeraghAR Ваш метод погіршив мою тензорфлоу та керу.
KPMG

Переконайтеся, що ви встановили правильний файл відповідно до версій TensorFlow, Python та HW.
Sreeragh AR

TensFlowВерсія @SreeraghAR дорівнює 1.10.0 та використовується MacOS Sierra. Допоможіть мені знайти файл.
KPMG

Хм .. Неможливо знайти одну, що відповідає вашим версіям. Хтось має побудувати колесо на замовлення. github.com/yaroslavvb/tensorflow-community-wheels Негайним рішенням може бути використання Tensorflow 1.9.0
Sreeragh AR

5

Я склав невеликий сценарій Bash для Mac (легко можна перенести в Linux), щоб отримати всі функції процесора та застосувати деякі з них для створення TF. Я на майстру TF і використовую свого роду часто (пару разів на місяць).

https://gist.github.com/venik/9ba962c8b301b0e21f99884cbd35082f


5

Для компіляції TensorFlow з SSE4.2 та AVX можна використовувати безпосередньо

bazel build --config = mkl --config = "opt" --copt = "- march = broadwell" --copt = "- O3" // tensorflow / tools / pip_package: build_pip_package

Джерело: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.devel-cpu-mkl


1
Чи нещодавно змінилося? Останній я перевірив, --copt="-march=native"їв =. (І BTW, ці подвійні лапки нічого не роблять; їх оболонка буде вилучена, перш ніж bazelпобачить ваш командний рядок.)
Пітер Кордес

4

2.0 СУМІДНЕ РІШЕННЯ:

Виконайте наведені нижче команди в терміналі (Linux / MacOS) або в командному рядку (Windows), щоб встановити Tensorflow 2.0 за допомогою Bazel :

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

#The repo defaults to the master development branch. You can also checkout a release branch to build:
git checkout r2.0

#Configure the Build => Use the Below line for Windows Machine
python ./configure.py 

#Configure the Build => Use the Below line for Linux/MacOS Machine
./configure
#This script prompts you for the location of TensorFlow dependencies and asks for additional build configuration options. 

#Build Tensorflow package

#CPU support
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package 

#GPU support
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package

2
Яка частина цього вказує -march=nativeчи інші варіанти GCC / clang? Я не бачу в цьому жодної згадки про AVX, FMA або SSE4.2. (А сценарій збирання Bazel чи Tensorflow все ще порушений таким чином, що лише такі варіанти, як -mavxробота, чи ні -march=native? Якщо це справді проблема, була найкраща відповідь на це питання)
Пітер Кордес

для підтримки процесора з версією 2.1.0, опція --config = opt не працювала для мене, я вирішив це за допомогою --config = v2. Також добре згадати, що правильна версія базиліку для його створення становить 29,0.
Толік

2

Створюючи TensorFlow з джерела, ви запустите configureсценарій. Одне з питань, яке configureзадає сценарій, полягає в наступному:

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]

configureСценарій буде прикріпити прапор (и) ви вказуєте в команді Базел , який будує пакет TensorFlow пипсов. Загалом, ви можете відповісти на це запит одним із двох способів:

  • Якщо ви будуєте TensorFlow на тому ж типі процесора, що і той, на якому ви будете запускати TensorFlow, тоді слід прийняти за замовчуванням ( -march=native). Цей параметр оптимізує згенерований код для типу процесора вашого комп'ютера.
  • Якщо ви будуєте TensorFlow на одному типі процесора, але запускаєте TensorFlow на іншому типі процесора, тоді подумайте про надання більш конкретного прапора оптимізації, як описано в документації gcc .

Після налаштування TensorFlow, як описано в попередньому маркованому списку, ви зможете створити TensorFlow, повністю оптимізовану для цільового процесора, просто додавши --config=optпрапор до будь-якої команди Bazel, яку ви виконуєте.


-1

Щоб приховати ці попередження, ви можете зробити це перед фактичним кодом.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

5
Мовчки працює повільніше, ніж це могло бути на вашому обладнання, здається поганою ідеєю.
Пітер Кордес

Я погоджуюся з @Peter Cordes загалом - але іноді приємно (дисципліновано, розумно) приховати попередження та зосередитись на завданні.
westsider

2
@westsider: Так, це може бути корисним у деяких випадках, але це не є гарною відповіддю, якщо не вказує на наслідки: реальна ефективність втрачається, якщо ви просто приховуєте попередження, а не перекомпонуєте. (За винятком випадків, якщо ви використовуєте GPU для важкого підйому, він все ще може попереджати про варіанти процесора?)
Peter Cordes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.