为什么GPU上的Tensorflow模型推断会导致如此多的CUDA Cuefventrecord API调用?
我在一个GPU(特斯拉P100)上运行Tensorflow对象检测模型(其中一个)。为了检查性能瓶颈,我使用Nvidia为什么GPU上的Tensorflow模型推断会导致如此多的CUDA Cuefventrecord API调用?,tensorflow,cuda,nvidia,Tensorflow,Cuda,Nvidia,我在一个GPU(特斯拉P100)上运行Tensorflow对象检测模型(其中一个)。为了检查性能瓶颈,我使用Nvidianvprof评测工具评测我的对象检测应用程序(在几帧上执行对象检测)。分析结果如下所示 ======== Profiling result: 2 Type Time(%) Time Calls Avg Min Max Name 3 API calls: 32.13% 15
nvprof
评测工具评测我的对象检测应用程序(在几帧上执行对象检测)。分析结果如下所示
======== Profiling result:
2 Type Time(%) Time Calls Avg Min Max Name
3 API calls: 32.13% 15.2177s 434480 35.025us 5.1550us 954.27ms cudaLaunchKernel
4 30.20% 14.3065s 942706 15.175us 361ns 77.372ms cuEventRecord
5 13.39% 6.34349s 117067 54.186us 2.7000us 5.4721ms cudaFuncGetAttributes
6 6.26% 2.96509s 575202 5.1540us 562ns 1.2027ms cuEventQuery
7 6.16% 2.91725s 67072 43.494us 7.2690us 77.337ms cuMemcpyDtoHAsync
...
通过查看英伟达可视化剖析器,我发现对象检测应用程序包含多个线程。其中几个线程一直在调用CUDA驱动程序API调用。分析结果显示
cuEventRecord
API调用的持续时间约为cuda运行时+驱动程序活动总持续时间的30%。我想知道这个cuEventRecord
API调用是否与探查器有关:nvprof
。如果不是,这些cuEventRecord
调用是否会导致tensorflow模型推断的性能下降,以及调用这些cuEventRecord
API有什么意义?
我想知道这个cuEventRecord
API调用是否与
使用探查器执行以下操作:nvprof
事实并非如此
如果不是,这些cuEventRecord
调用是否会导致tensorflow模型推断的性能下降
它们是Tensorflow正常运行的一部分
使用这些cuEventRecord API调用有什么意义
据我所知,Tensorflow设计了一个高度流水线化的设备代码路径,该路径依赖于广泛使用事件、流同步和流回调函数,以确保GPU保持占用状态,并以正确的顺序安排、上传和下载计算的不同阶段。。这很可能就是您在这里看到的。这些不是唯一的CPU端计时吗?在GPU方面,内核启动可能会主导所有时间?如果将CPU频率调整为较低的值,会发生什么情况?@huseyintugrulbuyukisik,是的,我上面显示的统计数据是关于CPU端API计时(CUDA运行时或驱动程序API持续时间)。我猜想这些代码> CuviVista//Cord.API不应该来自NVPROF,正如我在英伟达可视化剖析器中看到的,它们是从普通CPU线程调用的,并与CUDALAUCHCHNEAR API调用交错。TysFROW反复地测量以尽可能快地启动新内核,交换一些CPU时间。谢谢,如果我正确理解了您的答案,Tensorflow将使用这些事件管理API(例如,cuEventRecord)来协调并发内核执行并确保高设备利用率。它们不用于tensorflow分析或nvprof分析。这是我的解释--