我已经使用支持 AVX2 的最新 Visual Studio 社区从 master 分支(commit 8cb6e535)构建了 tensorflow,并将性能与 anaconda(1.7.0)提供的最新 tensorflow 构建进行了比较,该构建使用 SSE 而不是 AVX( “您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:AVX AVX2”)。
结果是在我的网络架构(Conv2D、MaxPool、ReLU、LSTM、Dense)上,conda 构建比自定义构建更快:
批量大小 32, 0.00302s vs 0.00237s(每个样本,快 20% 以上)
结果是几千个批次的平均值,并省略了前几个平均值以防止预热效应。
一些想法:
- anaconda 构建使用 MKL(用于 Eigen/TF)
- cmake 脚本中的一个错误阻止了 SIMD 的使用(并且 anaconda 使用 bazel 构建),或者需要做更多的工作才能在 cmake 构建中实际启用 SIMD 扩展(请参阅下文了解我的构建方式)
- anaconda 使用 cmake 构建,但使用其他一些 cmake/编译器设置(/GL、/fp:fast、PGO?...)
- 整体构建速度更快(在 cmake 构建脚本中找不到该选项)
有没有人做了一个比 anaconda 构建更快的 windows 构建?或者知道 anaconda 人做了什么来快速构建?
谢谢
构建细节
我正在使用 cmake 在 Windows 上构建 Tensorflow,按照此处的说明进行操作。确保 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 上的这个问题,以及github上 tensorflow 中 /MP 的出现)。
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”)
然后使用以下命令构建 python 轮:
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__)
对于这两种构建产生:
蟒蛇:
张量流版本:1.7.0
编译器版本:MSVC
单体构建:1
风俗:
张量流版本:1.8.0-rc1
编译器版本:MSVC 191326132
单体构建:0