TensorFlow:图优化(GPU与CPU性能)

时间:2016-07-31 22:05:57

标签: tensorflow reinforcement-learning

此问题最初发布于Github #3320。最好从那里开始,因为在该线程中有更多关于原始问题的细节而且体积庞大,所以我不希望在StackOverflow上重新发布。问题摘要是使用GPU时性能比CPU处理TensorFlow图表要慢。包含CPU / GPU时间轴(调试)以进行评估。其中一条评论涉及优化图表以加速处理,并要求讨论玩具示例。 “原始解决方案”是我的强化学习代码,显示性能缓慢,并为社区讨论和评估创建了一些已发布的代码。

我附上了测试脚本以及一些原始数据,Trace Files& TensorBoard日志文件可加快任何审核速度。 CPUvsGPU testing.zip

讨论已移至StackOverflow,因为此主题将使所有Tensorflow用户受益。我希望发现的是优化已发布图表性能的方法。可以通过更高效的TensorFlow图解决GPU与CPU的问题。

我所做的是采取我的原始解决方案并剥离“游戏环境”。我用随机数据生成代替了它。在此游戏环境中,不会创建/修改TensorFlow图。该结构密切关注/利用nivwusquorum's Github Reinforcement Learning Example

2016年7月15日,我做了一个“git pull”前往Tensorflow。我在启用和启用GPU的情况下执行图表并记录时间(参见附图)。意想不到的结果是GPU的性能超过了CPU(这是最初的期望未达到)。因此,带有支持库的代码“cpuvsgpu.py”在GPU上表现更好。因此,我将注意力转移到我的原始解决方案与已发布代码之间可能存在的不同之处。我还将头部更新为2016年7月17日。随着CPU和CPU之间的整体差异,一些东西确实有所改善。 原始解决方案上的GPU比一周再次接近,我看到47秒CPU与71s GPU相比。快速浏览新的Traces与我的初始跟踪,似乎“摘要”可能已经改变,但也可能有其他改进。

gtx 950 timing

我尝试了其他两种组合,以更好地反映原始解决方案的功能。那些CPU负载很重(~60% - 70%),并通过并发执行该脚本进行模拟。另一个变化是增加“数据IO”,原始解决方案使用观察列表随机选择观察训练。此列表具有固定的上限,然后在附加新列表时开始删除列表中的第一个项目。我想其中一个可能是放慢了数据流到GPU的速度。不幸的是,这些版本都没有导致CPU超越GPU。我还运行了一个快速的GPUTESTER应用程序,它可以进行大型矩阵乘法,以了解与任务大小的时序差异,并且符合预期。

我真的很想知道如何改进此图表并减少小型OPS的数量。似乎这是大部分性能可能会发生的地方。学习将较小的ops组合成较大的ops而不影响图形的逻辑(功能)的任何技巧都会很好。

1 个答案:

答案 0 :(得分:2)

Results感谢您的精彩帖子。

我遇到了类似的问题:由TensorFlow提供的两个示例:GPU / CPU处理比单独的CPU处理需要更多的CPU和经过时间:线性回归损耗模型和MNIST for Beginners,而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