2016-12-15 40 views
1

我从prettytensor运行演示shakespeare.py,想知道如何使用CPU和GPU来影响每批次的训练运行时间。因而我添加下列行中local_trainer.py在美化程序演示上CPU比GPU更快shakespeare.py

tick = time.time() 
results = sess.run(ops, dict(zip(feed_vars, data))) 
print('done in %.4f secs' % (time.time() - tick)) 

其在run_model功能位于线路309。

然后我通过设置export CUDA_VISIBLE_DEVICES=""来强制训练发生在CPU上。我通过watch -n 1 nvidia-smi以及watch -n 1 lsof /dev/nvidia*监视GPU使用情况,所以我确信GPU没有被触及。令人惊讶的是,在CPU上运行它更快(〜0.2秒),然后在GPU上(〜0.25秒)。

当通过htop监视CPU使用情况时,我观察到所有8个CPU线程都很好地使用。再加上使用GPU创建的通信开销,我想这可能是一个可能的解释。此外,可能该模型太小而不能从GPU计算能力中获益,或者我的GPU太低端。

我的问题是:你有没有观察到类似的行为使用prettytensor或tensorflow(也可能是GPU版本更快但不是非常糟糕的地方)?这些解释是否有意义,或者这种行为是否真的太古怪了?是否有其他的工具/技巧可以用来确定在GPU上通过美观(或张量流)访问GPU时发生了什么?我知道tensorflow的时间轴特征,如here所述,但我觉得这有点难以破译。

我的GPU: 的NVIDIA GeForce GT 730(2GB) 主要:3次要:5 memoryClockRate(GHz)的0.9015

我的CPU: 4芯(每芯2个超线程) 英特尔(R)型的Core i7-4790K CPU @ 4.00GHz

回答

2

这些观察是有意义的,我也有一个模型在GPU上比在CPU上稍慢。那么情况是这样的,网络是一个很小的网络,整个过程都是CPU限制的,并且CPU-> GPU-> CPU有点慢了。

你可以尝试在你的情况下做的事情是用GPU运行模型,看看GPU利用率(通过nvidia-smi)是否很小,同时CPU的利用率很高。

+0

在GPU上运行时,CPU使用率并不高。 'nvidia-smi'报告使用1.8GB(2GB),但我想这是因为张量流尽可能分配尽可能多的内存,即使它不是直接使用。不幸的是'nvidia-smi'不会输出我的系统上的每个进程的统计信息。 – kaufmanu

+0

我想到的是检查'nvidia-smi'中的'GPU-Util'选项卡。这不是每个进程,但是你可以看到它在开始训练过程之前和之后是否发生了显着的变化。 – sygi

+0

噢好吧,只是检查:我的'nvidia-smi'不输出,但我通过'nvidia-settings -q GPUUtilization'监视它,并且它显示出> 90%的利用率。所以我猜想CPU/GPU通信的开销太多了。 – kaufmanu

相关问题