Io 在GPU上运行Tensorflow脚本时,两个完全相同的系统具有非常不同的性能
我有两台电脑使用相同的GPU(GTX 1080),安装了相同的操作系统和软件。但是当我运行tensorflow程序(一个RNN模型)时,速度是非常不同的。一个比另一个快约1.5倍 以下是这两种产品的关键规格: SystemA:Asus Z170-p,i7 6700T,32GB Ram,GTX 1080。Io 在GPU上运行Tensorflow脚本时,两个完全相同的系统具有非常不同的性能,io,tensorflow,gpu,nvidia,Io,Tensorflow,Gpu,Nvidia,我有两台电脑使用相同的GPU(GTX 1080),安装了相同的操作系统和软件。但是当我运行tensorflow程序(一个RNN模型)时,速度是非常不同的。一个比另一个快约1.5倍 以下是这两种产品的关键规格: SystemA:Asus Z170-p,i7 6700T,32GB Ram,GTX 1080。 SystemB:Asus X99电子WS,i7 5930K,128G内存,GTX 1080。(问题一) 两者都安装有(使用相同的方法): 操作系统:Ubuntu 16.04 GPU驱动程序版本:
SystemB:Asus X99电子WS,i7 5930K,128G内存,GTX 1080。(问题一) 两者都安装有(使用相同的方法): 操作系统:Ubuntu 16.04
GPU驱动程序版本:378.13
Cuda版本:8.0
cuDNN版本:5.1
Tensorflow:使用方法安装
pip安装Tensorflow gpu==1.0.1
Python:Anaconda3.6 示例代码: SystemA每秒钟执行75次国际热核实验反应,systemB每秒钟仅执行50次国际热核实验反应,是的,越差的越快 主要意见:
易失性GPU Util
,systemA稳定地占40%左右,systemB占30%左右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
有人能告诉我如何分析/调试这个问题吗?非常感谢 您可能没有使用GPUs。为了测试这个用途
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
显示您正在使用的设备
如果您确实在使用CPU,那么您可以在tensorflow代码之前添加以下内容
with tf.device('/gpu:0'): # NEW LINE
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)
如果情况并非如此,请添加一条带有您的结果的评论,我将跟进,看看我还能做些什么
根据tf.constant是一个GPU内存猪。试着替换
t = tf.constant(np.random.random(size=[w, w]), dtype=tf.float32)
与
尝试没有网络流量的模式
import tensorflow as tf
import numpy as np
from tqdm import trange
h,w = 3000, 2000
steps = 1000
x = tf.random_normal( [h, w] , dtype=tf.float32 )
t = tf.constant(np.random.random(size=[w, w]), dtype=tf.float32)
m = tf.matmul(x,t)
s = tf.reduce_mean( tf.reduce_mean( m ) )
sess = tf.Session()
for i in range(steps):
sess.run(s)
Xer试验结果
经过大量的讨论和故障排除,很明显这两台机器是不同的。英伟达卡交换了,结果没有变化。它们有两个不同的CPU,一个内置图形处理器,一个没有。一个有更高的CPU,一个没有。我建议i7上带有板载图形的机器禁用OSs图形窗口系统,以确保测试是未使用的GPU与未使用的GPU。问题依然存在
原始的问题在主总线上从CPU到英伟达GPU之间产生了大量的数据流量,如这里可以看到的
Tx Throughput : 75000 KB/s
Rx Throughput : 151000 KB/s
我们尝试将问题的大小从W=2000、W=200和W=1000改变,发现当W足够小时,两台机器的性能几乎相同。W虽然不仅控制GPU上问题的大小,还控制CPU和GPU之间的通信量
尽管我们确实找到了一个解决方案或一个确切的模型,但我相信在使用@Xer进行了大量探索之后,我可以自信地说这两个系统并不相同,它们的物理差异(总线+CPU)决定了性能的不同。非常感谢您对我的问题的回答!不幸的是,问题仍然在于手动将所有操作设置为gpu,低于30%
gpu volatile
和50 iter/秒。日志设备放置报告是什么?它报告:MatMul:/job:localhost/replica:0/任务:0/gpu:0 I tensorflow/core/common_runtime/simple_placer.cc:841]MatMul:/MatMul/job:localhost/replica:0/task:0/gpu:0 Const:/job:localhost/replica:0/task:0/gpu:0 I tensorflow/core/common\u runtime/simple\u placer.cc:841]Const:(Const)/job:localhost/replica:0/gpu:0 x:/job:localhost/replica:0/task:0/gpu:0 I tensorflow/core/common\u runtime/simple\u placer.cc:841]x:(占位符)/job:localhost/replica:0/task:0/gpu:0
我添加了另一种可能性,即它是tf.constant。你能试试看吗?另外,你能试着把W的大小减小一个x10的因子吗?我把W设置为200,挥发分大约是20%,spped是561 iter/秒。对不起,我不太明白你的意思,baout tf.constant,它现在在tf.device('/gpu:0“)
块下,我应该把它移出吗?
import tensorflow as tf
import numpy as np
from tqdm import trange
h,w = 3000, 2000
steps = 1000
x = tf.random_normal( [h, w] , dtype=tf.float32 )
t = tf.constant(np.random.random(size=[w, w]), dtype=tf.float32)
m = tf.matmul(x,t)
s = tf.reduce_mean( tf.reduce_mean( m ) )
sess = tf.Session()
for i in range(steps):
sess.run(s)
Tx Throughput : 75000 KB/s
Rx Throughput : 151000 KB/s