此问题最初发布于Github #3320 . 最好从那里开始,因为在该线程中有更多关于原始问题的细节而且体积庞大,所以我不希望在StackOverflow上重新发布 . 问题摘要是使用GPU时性能比CPU处理TensorFlow图表要慢 . 包含CPU / GPU时间轴(调试)以进行评估 . 其中一条评论涉及优化图表以加速处理,并要求讨论玩具示例 . “ Original Solution ”是我的强化学习代码,表现出性能缓慢,并为社区讨论和评估创建了一些已发布的代码 .
我附上了测试脚本以及一些原始数据,Trace Files和TensorBoard日志文件,以加快审查速度 . CPUvsGPU testing.zip
讨论已移至StackOverflow,因为此主题将使所有Tensorflow用户受益 . 我希望发现的是优化已发布图表性能的方法 . 可以通过更高效的TensorFlow图解决GPU与CPU的问题 .
我做的是拿走我的 Original Solution 并剥离了"Game Environment" . 我用随机数据生成代替了它 . 在此游戏环境中,不会创建/修改TensorFlow图 . 该结构密切关注/利用nivwusquorum's Github Reinforcement Learning Example .
2016年7月15日,我做了一个"git pull"前往Tensorflow . 我在启用和启用GPU的情况下执行图表并记录时间(参见附图) . 意想不到的结果是GPU的性能超过了CPU(这是最初的期望未达到) . 因此,带有支持库的代码"cpuvsgpu.py"在GPU上表现更好 . 所以我把注意力转移到我的 Original Solution 和已发布的代码之间可能有所不同 . 我还将头部更新为2016年7月17日 . 有些事情确实有所改善,因为 Original Solution 上的CPU和GPU之间的整体差异比一周再次接近,我看到的是47s CPU和71s GPU . 快速查看新的Traces与我的初始跟踪,似乎"summary's"可能已经改变,但也可能有其他改进 .
我尝试了其他两种组合来更好地反映 Original Solution 的功能 . 那些CPU负载很重(~60% - 70%),并通过并发执行该脚本进行模拟 . 另一个变化是增加"Data IO", Original Solution 使用观察列表随机选择观察训练 . 此列表具有固定的上限,然后在附加新列表时开始删除列表中的第一个项目 . 我想其中一个可能是放慢了数据流到GPU的速度 . 不幸的是,这些版本都没有导致CPU超越GPU . 我还运行了一个快速的GPUTESTER应用程序,它可以进行大型矩阵乘法,以了解与任务大小的时序差异,并且符合预期 .
我真的想知道如何改进这个图表并减少小OPS的数量 . 似乎这是大部分性能可能会发生的地方 . 学习将较小的ops组合成较大的ops而不影响图形的逻辑(功能)的任何技巧都会很好 .
1 回答
感谢优秀的帖子 .
我遇到了类似的问题:由TensorFlow提供的两个示例:GPU / CPU处理比单独的CPU处理需要更多的CPU和经过时间:线性回归损耗模型和初学者的MNIST,而MNIST Deep脚本显示CPU的显着改进和使用GPU时的Elapsed Profiling GPU and CPU Performance第10页开始讨论 .
这是数字:
(来源:Profiling GPU and CPU Performance,图64 Results)