为何GeForce GTX 1080 Ti训练神经网络比Quadro K1200更慢?
为何性能更强的GeForce GTX 1080 Ti训练速度反而更慢?
结合你给出的硬件配置、TensorFlow版本和测试数据,我认为主要有以下几个关键原因:
1. TF_MIN_GPU_MULTIPROCESSOR_COUNT=4 参数的限制是核心问题
你设置的这个环境变量强制TensorFlow只使用4个GPU多处理器(SM),但两块GPU的SM数量差异极大:
- GeForce GTX 1080 Ti(Pascal架构)拥有38个SM单元,强制限制用4个的话,仅能利用约10%的硬件算力,这直接导致nvidia-smi显示的GPU-Util只有10%,大部分硬件资源处于闲置状态。
- Quadro K1200(Maxwell架构)仅拥有8个SM单元,4个SM刚好占了其总算力的50%,所以GPU-Util能达到23%,实际利用的硬件比例远高于1080Ti,自然速度更快。
这个参数原本是为了在低配置GPU上避免资源过载设置的,但对于高算力GPU来说,会严重限制性能发挥。
2. 批量大小不足,无法充分利用1080Ti的并行算力
你的批量大小设置为30,对于拥有11GB显存的1080Ti来说太小了。大显存的优势在于可以容纳更大的批量,从而利用GPU的并行计算能力提升速度。而K1200显存只有4GB,30的批量已经接近其显存上限,能充分利用它的有限资源,而1080Ti的大显存优势完全没发挥出来。
3. 旧版TensorFlow与硬件的兼容性问题
你使用的是tf-nightly-gpu 1.6.0-dev20180112,这是一个2018年的旧开发版本,当时针对Pascal架构(1080Ti)的CuDNN优化还不够成熟,反而对更早的Maxwell架构(K1200)的适配更稳定。加上CUDA9.0和CuDNN7在旧TF版本中的兼容性可能存在bug,进一步放大了性能差异。
解决建议
- 立即移除
TF_MIN_GPU_MULTIPROCESSOR_COUNT=4环境变量,让TensorFlow自动利用GPU的全部SM单元,这应该能大幅提升1080Ti的利用率和速度。 - 增大批量大小:尝试将批量大小提升到64、128甚至更高(只要显存允许),充分利用1080Ti的大显存优势,提升并行计算效率。
- 升级TensorFlow版本:更换为稳定版的TensorFlow(比如1.15.x或更高版本,确保与CUDA9.0/CuDNN7兼容),新版本对Pascal架构的优化更完善,能更好地发挥1080Ti的性能。
内容的提问来源于stack exchange,提问作者Maosi Chen




