Tensorflow配置文件自定义操作

2021-05-13 14:21:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

到目前为止,我已经尝试了使用时间线的this post方法,以及内部Tensorflow Profiler(tf.profiler.Profiler)。两种方法的结果非常相似,如果我想研究一个网络,这是很好的,但对于分析单个操作,输出太粗糙,不包括操作内计算(至少我找不到方法)。我的下一个尝试是使用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%)

所以在我看来,我的定制操作在GPU上花费了同样多的时间,但在CPU上却要长一个数量级。对于一个GPU操作,这是不可接受的,我想知道我的操作在CPU上花了多少时间。另外让我吃惊的是,我的操作系统似乎只分配了原来Conv操作系统的三分之一的GPU内存。在

有没有一种方法可以获得我的自定义操作(包括CPU和GPU使用情况)的详细资料,向我解释我做错了什么,并帮助我改正错误?在