Как скомпилировать 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 т / с)
Ярослав Булатов

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.отсюда tenorflow.org/install/install_sources
Иван Куш

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

1
@IvanKush добавив этот флаг, я все еще не могу успешно импортировать тензорный поток (компилируется нормально). Если вы успешно скомпилировали с gcc 5, пожалуйста, смотрите: stackoverflow.com/questions/45877158/…
anon01

1
Если вы используете Ubuntu 16.04, у нас есть сборки для почти всех вариантов, которые вам могут понадобиться, по адресу github.com/mind/wheels
17

Ответы:


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обеспечивает полную оптимизацию, включая автоматическую векторизацию, но иногда это может замедлить выполнение кода.


Что это делает: --coptforbazel 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(так как во время компиляции не было ошибок) также работает.
Marc

4
После удаления и переустановки новой скомпилированной версии я все еще получаю предупреждения для AVX, AVX2 и FMA.
Бенедикт С. Фоглер,

5
Мне пришлось отказаться, --copt=-mfpmath=bothчтобы заставить его работать clangна MacOS. Влияет ли это на полученный бинарный файл?
gc5

2
Просто для пояснения: когда я создаю файл конфигурации .... я просто использую --copt = -march = native? Или я вставляю все те оптимизации, которые были в оригинальных сообщениях, где у меня есть возможность добавить оптимизацию?
Торнхейл

1
Я получаю сообщение об ошибке, в котором говорится, что команда «build» поддерживается только из рабочей области? Что делать?
скромный

133

Давайте начнем с объяснения того, почему вы видите эти предупреждения в первую очередь .


Скорее всего, вы не установили TF из источника и вместо него использовали что-то вроде pip install tensorflow. Это означает, что вы установили предварительно созданные (кем-то еще) двоичные файлы, которые не были оптимизированы для вашей архитектуры. И эти предупреждения говорят вам именно это: что-то доступно в вашей архитектуре, но оно не будет использоваться, потому что двоичный файл не был скомпилирован с ним. Вот часть из документации .

TensorFlow проверяет при запуске, была ли она скомпилирована с оптимизацией, доступной на CPU. Если оптимизации не включены, TensorFlow выдаст предупреждения, например, инструкции AVX, AVX2 и FMA не включены.

Хорошо, что, скорее всего, вы просто хотите изучить / поэкспериментировать с TF, чтобы все работало правильно, и вам не следует об этом беспокоиться


Что такое SSE4.2 и AVX?

В Википедии есть хорошее объяснение SSE4.2 и AVX . Эти знания не обязаны быть хорошими в машинном обучении. Вы можете рассматривать их как набор некоторых дополнительных инструкций для компьютера, чтобы использовать несколько точек данных против одной инструкции для выполнения операций, которые могут быть естественным образом распараллелены (например, добавление двух массивов).

И SSE, и AVX являются воплощением абстрактной идеи SIMD (одна инструкция, несколько данных), которая

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

Этого достаточно, чтобы ответить на ваш следующий вопрос.


Как эти SSE4.2 и AVX улучшают вычисления CPU для задач TF

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


Как заставить Tensorflow компилироваться с использованием двух библиотек?

Вам нужно иметь двоичный файл, который был скомпилирован, чтобы воспользоваться этими инструкциями. Самый простой способ - это скомпилировать его самостоятельно . Как предположили Майк и Ярослав, вы можете использовать следующую команду bazel

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
Кто-нибудь когда-нибудь собирал под Windows 64-битную версию с MSYS2 или Visual Studio 2017 ommunity Edition? а можете поделиться своими шагами?
Джеймс Чанг

1
Можно ли установить этот pip-пакет в среду 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 = both' cl: предупреждение командной строки D9002: игнорирование неизвестной опции '-msse4.2' cl: предупреждение командной строки D9002: игнорирование неизвестной опции '- fno-strict-aliasing 'cl: предупреждение командной строки D9002: игнорирование неизвестного параметра' -fexceptions ', поэтому эти параметры неизвестны
Шилан,

53

Позвольте мне сначала ответить на ваш третий вопрос:

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

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.

Что касается вашего второго вопроса:

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

Наконец ваш первый вопрос:

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

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

В контексте компиляции тензорного потока, если ваш компьютер поддерживает AVX2 и AVX, а также SSE4.1 и SSE4.2, вы должны установить эти оптимизирующие флаги для всех. Не поступайте так, как я, а просто следуйте SSE4.2, думая, что он более новый и должен заменить SSE4.1. Это явно НЕПРАВИЛЬНО! Мне пришлось перекомпилировать из-за того, что стоило мне добрых 40 минут.


где хранится файл .whl, ведь я тоже хочу установить его на windows?
WiLL_K

Он хранится здесь: / tmp / tenorflow_pkg (на вашем диске Linux)
Thornhale

Можете ли вы сказать мне, сколько времени это займет? Это около 2 часов, и мой ноутбук замерз. На нем работает убубту с 4 Гб оперативной памяти и процессором i5
WiLL_K

Хм, компиляция тензорного потока занимает много времени. На моем ноутбуке с 8 Гб это заняло около 1,5 часов. Однако время установки может отличаться и будет сильно зависеть от доступного оперативного памяти. Эти компиляции, как известно, занимают много оперативной памяти. Чтобы уменьшить требования к ресурсам и, возможно, предотвратить зависания, вы можете запустить компиляцию, добавив следующий флаг после «bazel build»: --local_resources 2048, .5,1.0 Это часто помогает с зависаниями, но, вероятно, удвоит время, необходимое для компиляции. Например: на одной из моих более быстрых систем компиляция без флага заняла 2200 секунд, с флагом 4500!
Торнхейл

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

25

Это наборы команд векторной обработки SIMD .

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

Цитирование документов установки tenorflow :

Чтобы быть совместимым с максимально широким диапазоном машин, TensorFlow по умолчанию использует только инструкции SSE4.1 SIMD на машинах x86. Большинство современных ПК и Mac поддерживают более сложные инструкции, поэтому, если вы создаете двоичный файл, который будет работать только на вашем компьютере, вы можете включить их, используя --copt=-march=nativeкоманду bazel build.


Почему двоичный файл Tensorflow не использует диспетчеризацию процессора? Это плохо поддерживается GCC?
Крис Пушбуллет

4
Ссылка "Установка документов tenorflow" не работает. Поэтому мне интересно, если этот ответ остается в силе. Пожалуйста, ответь!
Торнхейл

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

22

Благодаря всем этим ответам + пробам и ошибкам, мне удалось установить его на Mac с clang . Так что просто делюсь своим решением на тот случай, если оно кому-нибудь пригодится.

  1. Следуйте инструкциям по документации - Установка TensorFlow из источников

  2. Когда предложено для

    Пожалуйста, укажите флаги оптимизации для использования во время компиляции, когда задана базовая опция "--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
Я редактировал лучший ответ на этот вопрос некоторое время назад, но я сам не использую tenorflow. Если что-то не так с -march=nativeего системой сборки, я хотел бы знать. (И / или вы должны сообщить об этом выше, чтобы они могли исправить свои сценарии сборки).
Питер Кордес

1
Большое спасибо за предложение. Чтобы проверить это, я перезапустил сценарий .configure только с -march=nativeэтим, и это ошибка: / Users / jose / Documents / code / tmptensorflow / tennflowflow / tennflowflow / core / BUILD: 1442: 1: C ++ компиляция Правило "// tenorflow / core: lib_internal_impl" не выполнено (выход 1). В файле, включенном в файл tenorflow / core / platform / denormal.cc: 37: /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2/include/pmmintrin.h:28:2: ошибка: «Набор инструкций SSE3 не включен» # ошибка «Набор инструкций SSE3 не включен» с использованием Apple LLVM версии 7.0.2 (clang-700.1.81)
JARS

7

Я недавно установил его из исходного кода, и ниже приведены все шаги, необходимые для его установки из исходного кода, с указанными выше инструкциями.

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

  1. Установить Базель

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

  1. Установить 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 сообщили, что вы пропали).

Скрипт сборки pip: 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/issues/7449 ), даже сопровождающие bazel не утверждали, почему march = native не работает должным образом. Поскольку вы, по-видимому, «понимаете параметры 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

@SreeraghAR TensFlowверсия 1.10.0 и используется MacOS Sierra. Помогите мне в поиске файла.
KPMG

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


5

Чтобы скомпилировать TensorFlow с SSE4.2 и AVX, вы можете использовать напрямую

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

Источник: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.devel-cpu-mkl


1
Что-то изменилось в последнее время? Последнее, что я проверял, --copt="-march=native"ел =. (И кстати, эти двойные кавычки ничего не делают; они будут удалены оболочкой до того, как 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? Если проблема была в самом верхнем ответе на этот вопрос)
Peter Cordes

для поддержки ЦП с версией 2.1 tf опция --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: да, это может быть полезно в некоторых случаях, но это не очень хороший ответ, если только он не указывает на последствия: реальная производительность теряется, если вы просто скрываете предупреждения вместо перекомпиляции. (За исключением, может быть, если вы используете графический процессор для тяжелых работ, он все равно может предупредить о параметрах процессора?)
Питер Кордес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.