TensorFlow CPU性能对比:Anaconda预编译版vs自定义编译版(Windows)
自定义AVX2编译TensorFlow vs Anaconda预编译版性能异常分析
先明确你的测试背景信息:
- 自定义编译版本:基于TensorFlow
master分支(提交版本8cb6e535),使用最新版Visual Studio Community编译,开启AVX2指令集支持 - 对比版本:Anaconda提供的TensorFlow 1.7.0预编译版,仅支持SSE指令集,运行时会弹出提示:
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
- 测试网络架构:包含
Conv2D、MaxPool、ReLU、LSTM、Dense层的自定义模型 - 测试结果:Anaconda预编译版在batch处理环节的运行速度反而优于你自定义编译的AVX2版本
针对这个反直觉的结果,我整理了几个可能的原因和排查方向:
1. 编译优化选项不完整
仅仅开启AVX2支持并不足以发挥最大性能,TensorFlow官方预编译包通常会启用一系列深度优化选项,而你可能遗漏了部分:
- 启用最高级别优化(VS中对应
/O2或/Ox,CMake中需设置CMAKE_BUILD_TYPE=Release) - 开启链接时优化(LTO,VS中需勾选“链接时间代码生成”)
- 集成MKL-DNN或CUDA等加速库(Anaconda版默认集成了MKL优化,自定义编译时需手动开启相关配置)
- 针对你的CPU型号进行针对性优化(而非仅开启通用AVX2支持)
2. 开发分支的性能波动
你使用的是master分支的开发版本(提交8cb6e535),这类版本可能包含未完全打磨的新特性,或者临时的代码改动导致性能下降;而Anaconda的1.7.0是正式稳定版,经过了充分的性能调优和测试。
3. 测试场景的指令集适配问题
你的网络包含LSTM层,在TensorFlow 1.x版本中,LSTM的AVX2优化可能不如SSE成熟,尤其是在小batch size场景下,AVX2的向量并行开销可能超过其带来的收益,导致整体性能不如SSE版本。
4. 编译工具链的差异
Visual Studio的编译优化策略和TensorFlow官方预编译使用的GCC/Clang工具链存在差异,某些场景下VS生成的二进制文件性能可能不如GCC编译的版本。
建议的排查步骤
- 检查你的CMake编译配置,确保启用了
Release模式、MKL支持、链接时优化等关键选项 - 尝试使用GCC或Clang重新编译TensorFlow,对比VS编译版本的性能
- 调整测试的batch size,测试不同规模下两个版本的性能表现,看AVX2是否在大batch场景下能发挥优势
- 拆分网络层单独测试性能,定位是哪一层(比如LSTM或Conv2D)导致自定义版本变慢
内容的提问来源于stack exchange,提问作者Tillmann Radmer
相关产品推荐
相关产品推荐

