4

我已经使用支持 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

4

0 回答 0