Я собрал тензор потока из главной ветки (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