我有两台电脑,它们都配备了相同的 GPU(GTX 1080),安装了相同的操作系统和软件。但是当我运行 tensorflow 程序(RNN 模型)时,速度却大不相同。一台比另一台快 1.5 倍左右。
以下是两者的主要规格:
系统 A:华硕 Z170-P、i7 6700T、32GB 内存、GTX 1080。
系统 B:华硕 X99 E-WS、i7 5930K、128G 内存、GTX 1080。(问题一)
两者的安装方式相同(使用相同方法):
操作系统:Ubuntu 16.04
GPU 驱动程序版本:378.13
Cuda 版本:8.0
cuDNN 版本:5.1
Tensorflow:使用方法安装pip install tensorflow-gpu==1.0.1
Python:Anaconda 3.6
示例代码:
import tensorflow as tf
import numpy as np
from tqdm import trange
np.random.seed(111)
h,w = 3000, 2000
steps = 1000
x = tf.placeholder(dtype=tf.float32, shape=[h, w], name='x')
t = tf.constant(np.random.random(size=[w, w]), dtype=tf.float32)
m = tf.matmul(x,t)
x0 = np.random.random(size=[h, w])
sess = tf.Session()
for i in trange(steps):
x0 = sess.run(m, feed_dict={x: x0})
系统 A 的执行速度为 75 iter/秒,而系统 B 的执行速度仅为 50 iter/秒,是的,较差的那个实际上速度更快。
主要观察:
- SystemB 在运行该程序时出现了更大的页面错误。
- 通过监控
Volatile GPU-Util
发现nvidia-smi
系统A稳定在40%左右,系统B稳定在30%左右。
我在 systemB 上尝试过的事情:
- 将 BIOS 升级到最新版本并重置默认设置。
- 致电华硕客户服务寻求帮助。
- 将 GPU 卡与系统 A 交换。
- 更换 PCI-e 插槽以确保其在 x16 gen3 上运行。
- 注入
LD_PRELOAD="/usr/lib/libtcmalloc.so"
到.bashrc
文件。
输出的主要区别/usr/bin/time -v
是:
# The first value is for systemB and the second is for systemA.
System time (seconds): 7.28 2.95
Percent of CPU this job got: 85% 106%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:22.41 0:14.89
Minor (reclaiming a frame) page faults: 684695 97853
Involuntary context switches: 164 91063
File system inputs: 0 24
File system outputs: 8 0
有人能告诉我如何分析/调试这个问题吗?提前谢谢了!
更新:
我的内存是 Corsair DDR4 3000MHz CMK32GBX4M2B3000C15,似乎没有列在主板支持列表中,可能是这个原因吗?但是我已经使用这台电脑一年了,没有出现任何问题。
更新:
通过与 stackoverflow 用户 wontonimo 的讨论,我们发现是 BUS+CPU 导致了这个问题。希望有人能给我指出解决这个问题的方向。帖子是这里。