Io 在GPU上运行Tensorflow脚本时,两个完全相同的系统具有非常不同的性能

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驱动程序版本:

我有两台电脑使用相同的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驱动程序版本:378.13
Cuda版本:8.0
cuDNN版本:5.1
Tensorflow:使用方法安装
pip安装Tensorflow gpu==1.0.1

Python:Anaconda3.6

示例代码: SystemA每秒钟执行75次国际热核实验反应,systemB每秒钟仅执行50次国际热核实验反应,是的,越差的越快

主要意见:
  • SystemB在运行程序时出现更大的页面错误
  • 通过监控nvidia smi中的
    易失性GPU Util
    ,systemA稳定地占40%左右,systemB占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
    

    有人能告诉我如何分析/调试这个问题吗?非常感谢

    您可能没有使用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