Tensorflow-配置文件自定义操作

时间:2018-12-04 07:53:38

标签: python tensorflow profiling nvprof

我对一种在GPU上运行时测量自定义Tensorflow Op的详细性能的方法感兴趣。

到目前为止,我已经尝试使用时间轴以及内部Tensorflow Profiler(tf.profiler.Profiler)来使用this post的方法。两者都提供非常相似的结果,如果我想研究网络,这很好,但是对于分析单个Op而言,输出太粗糙了,并且不包含运算内部的计算(至少我找不到这种方法) 。我的下一个尝试是使用CUDA探查器nvprof(或与此有关的nvvp),它的方向更正确,并显示对CUDA内核和内存分配的单个调用。但是现在,不包括CPU计算。我尝试运行nvprof --cpu-profiling on,但现在分析器无法完成(请参见here

我的情况如下:我编写了一个自定义Op,它与2D中的卷积非常相似,不需要花费太多时间进行计算。在网络中,我的自定义操作的性能比tf.nn.conv2d差3倍。使用tf.profiler.Profiler,我得到以下信息:

Profile:
node name                    | requested bytes             | total execution time          | accelerator execution time    | cpu execution time
CustomConv2DBackpropInput     72.09MB (100.00%, 7.04%),     194.36ms (100.00%, 38.05%),     49.82ms (100.00%, 17.61%),      144.54ms (100.00%, 63.44%)
CustomConv2D                  65.54MB (92.96%, 6.40%),      95.41ms (61.95%, 18.68%),       45.16ms (82.39%, 15.96%),       50.25ms (36.56%, 22.06%)
CustomConv2DBackpropFilter    134.48MB (86.55%, 13.14%),    72.39ms (43.27%, 14.17%),       41.22ms (66.44%, 14.56%),       31.17ms (14.50%, 13.68%)
Conv2DBackpropFilter          294.68MB (73.41%, 28.79%),    63.39ms (29.10%, 12.41%),       62.80ms (51.87%, 22.19%),       594us (0.82%, 0.26%)
Conv2DBackpropInput           230.97MB (44.62%, 22.57%),    48.77ms (16.69%, 9.55%),        48.16ms (29.68%, 17.02%),       610us (0.56%, 0.27%)
Conv2D                        225.74MB (22.06%, 22.06%),    36.50ms (7.15%, 7.15%),         35.84ms (12.66%, 12.66%),       664us (0.29%, 0.29%)

所以在我看来,我的自定义Ops在GPU上花费的时间差不多,但是在CPU上花费的时间却要多一个数量级。对于GPU Op,这是不可接受的,我想找到我的Ops在CPU上花费的时间。令我惊讶的是,我的操作人员似乎只分配了原始Conv Ops所需要的GPU内存的三分之一。

是否可以获取自定义Op的详细配置文件(包括CPU和GPU使用情况),该配置文件可以向我解释我做错了什么并帮助我纠正错误?

0 个答案:

没有答案