Производительность ЦП Tensorflow anaconda против пользовательской сборки (cmake, в Windows) - PullRequest
0 голосов
/ 03 мая 2018

Я собрал тензор потока из главной ветки (commit 8cb6e535 ) с последним сообществом Visual Studio с поддержкой AVX2 и сравнил производительность с последней сборкой тензорного потока, предоставленной anaconda (1.7.0), которая был скомпилирован для использования SSE, но не AVX («Ваш процессор поддерживает инструкции, которые этот двоичный файл TensorFlow не скомпилировал для использования: AVX AVX2»).

В результате в моей сетевой архитектуре (Conv2D, MaxPool, ReLU, LSTM, Dense) сборка conda выполняется быстрее, чем в пользовательской сборке:

размер партии 32, 0,00302 с против 0,00237 с (на образец,> на 20% быстрее)

В результате получается среднее число из нескольких тысяч партий и пропуск первых двух средних для предотвращения эффекта прогрева.

Некоторые идеи:

  • сборка анаконды использует MKL (для Eigen / TF)
  • ошибка в скрипте cmake препятствует использованию SIMD (а anaconda использует bazel для сборки), или нужно сделать больше, чтобы фактически включить расширения SIMD в сборке cmake (см. Ниже, как я собрал)
  • anaconda строит с помощью cmake, но с некоторыми другими настройками cmake / компилятора (/ GL, / fp: fast, PGO ?, ...)
  • монолитная сборка выполняется быстрее (не удалось найти эту опцию в скриптах сборки cmake)

Есть ли кто-нибудь, кто делал сборку Windows, которая была бы быстрее, чем сборка анаконды? Или есть какое-то представление о том, что сделали люди анаконды, чтобы быстро собрать?

Спасибо


Детали сборки

Я использую cmake для сборки Tensorflow в Windows, следуя инструкциям здесь . Убедитесь, что swig и cmake находятся в переменной окружения PATH. Для Visual Studio 2017 команда для инициализации среды: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64.

Я изменяю /MP на /MP2 в "CMakeLists.txt" и "tf_core_kernels.cmake", в противном случае я получаю "фатальную ошибку C1060: компилятору не хватает места в куче" (см. Эту проблему на github , а в / м в в / м 10 в github ).

Команда cmake (без указания пути к swig, python и т. Д.):

cmake .. -A x64 -T host=x64 -DCMAKE_BUILD_TYPE=Release -Dtensorflow_WIN_CPU_SIMD_OPTIONS="/arch:AVX2"

Вывод (укороченный):

- Здание для: Visual Studio 15 2017

- выбор версии Windows SDK 10.0.16299.0 для Windows 6.1.7601.

- Идентификатор компилятора C - MSVC 19.13.26132.0

- Идентификатор компилятора CXX - MSVC 19.13.26132.0

- [...]

- Найдено PythonInterp: C: /Users/%username%/AppData/Local/Continuum/miniconda3/python.exe (найдена версия "3.6.5")

- Найдены PythonLibs: C: /Users/%username%/AppData/Local/Continuum/miniconda3/libs/python36.lib (найдена версия "3.6.5")

- Найдено SWIG: C: /Users/%username%/Repos/swigwin/swig.exe (найдена версия "3.0.12")

Тогда колесо питона было построено с:

MSBuild /p:Configuration=Release tf_python_build_pip_package.vcxproj

и установлен в среду conda, уже содержащую зависимости с pip install ....


Другая информация

Выполнение:

print("Tensorflow version: ", tf.__version__)
print("Compiler version: ", tf.__compiler_version__)
print("Monolithic build: ", tf.__monolithic_build__)

для обеих сборок дает:

Anaconda:

Версия Tensorflow: 1.7.0

Версия компилятора: MSVC

Монолитная постройка: 1

Пользовательский:

Версия Tensorflow: 1.8.0-rc1

Версия компилятора: MSVC 191326132

Монолитная постройка: 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...