TensorFlow:图形优化(GPU vs CPU性能)

问题描述:

此问题最初发布于Github #3320。如果在那个线程中有更多关于原始问题的细节,并且体积庞大,我不希望在*上重新发布,那么从这里开始会很好。这个问题的总结是当使用GPU比CPU处理TensorFlow图时性能更慢。包含CPU/GPU时间轴(调试)用于评估。其中一条评论意见涉及到优化Graph以加快处理速度,并请求讨论玩具示例。 “原始解决方案”是我的强化学习代码,显示性能下降,并为社区讨论和评估创建了一些已发布的代码。TensorFlow:图形优化(GPU vs CPU性能)

我已经附上测试脚本以及一些原始数据,跟踪文件& TensorBoard日志文件,以加快任何审查。 CPUvsGPU testing.zip

由于此主题将使所有Tensorflow用户受益,因此讨论转移到了*。我希望发现的是优化已发布图形性能的方法。 GPU与CPU的问题可以分离出来,因为它可以通过更高效的TensorFlow Graph解决。

我所做的就是拿我的原创解决方案,并剥离出“游戏环境”。我用随机数据代替它。在这个游戏环境中,没有创建/修改TensorFlow图形。该结构严格遵循/利用nivwusquorum's Github Reinforcement Learning Example

在2016年7月15日我做了一个“git拉”头来Tensorflow。我在启用和不启用GPU的情况下执行Graph并记录时间(参见附图)。意想不到的结果是GPU的性能超过了CPU(这是最初的期望没有得到满足)。所以这个带有支持库的代码“cpuvsgpu.py”在GPU上表现更好。所以我将注意力转移到我的原始解决方案与已发布的代码之间可能会有所不同。我也更新头至2016年7月17日。由于CPU & GPU与原始解决方案之间的整体差异比我看到47s CPU vs 71s GPU再次接近一周的时间有所提高。快速浏览一下新的Traces vs我的初始跟踪,好像“摘要”可能已经改变了,但也可能有其他改进。

gtx 950 timing

我试过其他2点的组合,以更好地反映原液如何运作。这些CPU负载很重(约60% - 70%),并且通过并行执行该脚本来模拟这些负载。另一种变化是增加“数据IO”,原始解决方案使用观察列表来随机选择用于训练的观察值。该列表具有固定的上限,然后开始删除列表中的第一个项目,同时追加新的项目。我想可能其中有一个是放慢数据流向GPU。不幸的是,这些版本都没有使CPU的性能超过GPU。我还运行了一个快速的GPUTESTER应用程序,它可以执行大型矩阵乘法以获得与任务大小的时间差异,并且如预期的那样。

我真的很想知道如何改善这个图表并减少小型OPS的数量。看起来这是大部分表现可能发生的地方。学习任何技巧将较小的操作符合并成较大的操作符而不会影响图的逻辑(函数)会很好。

+1

针对GPU性能为7K比较X 7K MATMUL可以是这里错误的度量。 IE中,我看到你最慢的操作需要

+0

我的7K x 7K数据集的主要用途更多的是确保GPU实际工作。所以对于大型任务来说,GPU很好。这对我来说更像是GPU的原始问题比GPU正确安装并且CUDA编译的CPU更慢的证明。 – mazecreator

+0

然后网络运行一批200×189到5层与Dropout()之间的每层。输出层数为140,120,100,80和3。 – mazecreator

Results感谢您的优秀帖子。

我遇到了类似的问题:GPU/CPU处理比TensorFlow提供的两个示例需要更多的CPU和处理时间:线性回归损失模型和初学者MNIST,而MNIST Deep脚本显示在使用GPU Profiling GPU and CPU Performance第10页时CPU和Elapsed的显着改进开始讨论。

这里是数字:

workload  | win 8.1 win 8.1 win8.1  win 10 win 10 win 10 
workload  | cpu only cpu  gpu  cpu only cpu  gpu  
-------------+----------------------------------------------------------- 
mnist deep | 14053  384.26 328.92  12406  289.28 211.79 
mnist deep | 14044  384.59 328.45  12736  293.71 210.48 
mnist10,000 | 24.10  45.85  7.67  26.56  44.42  7.32 
mnist10,000 | 23.94  44.98  7.56  25.80  44.24  7.32 
mnist50,000 | 95.49  198.12 38.26  109.99  197.82 36.15 
mnist50,000 | 96.07  197.86 37.91  109.46  195.39 39.44 
    lr10,000 | 6.23  15.08  1.78  7.38  16.79  1.91 
    lr10,000 | 6.33  15.23  1.78  7.44  16.59  1.91 
    lr100,000 | 48.31  124.37 17.67  62.14  148.81 19.04 
    lr100,000 | 48.97  123.35 17.63  61.40  147.69 18.72 

(来源:Profiling GPU and CPU Performance,图64 Results

+1

尽管链接可能回答问题,但最好在此包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。请阅读此[如何回答](http://*.com/help/how-to-answer)以提供高质量的答案。 – thewaywewere

+0

图18 +图19 VTUNE性能热点揭秘。唯一缺少的细节是访问设备内存类型的实际TimeDOMAIN成本。 SMX架构在数学上“密集”的计算内核上很出色,但**在访问'__global__'内存时具有巨大的〜350-700 [ns]的延迟**(这对于ML类DataSet的不可避免的必需条件* * ...所以**现实的TimeDOMAIN成本**主要**与Peta-FLOPs狩猎微基准**无法比拟,因此被产品营销人员和gals所喜爱)。不要惊慌,真正的使用情况会带来很多惊喜。 – user3666197