优化单gpu多会话tensorflow推理

优化单gpu多会话tensorflow推理,tensorflow,gpu,nvidia,nsight-systems,Tensorflow,Gpu,Nvidia,Nsight Systems,使用: 我正在尝试运行3个tensorflow会话,每个会话在同一个gpu上都有自己的tf计算图副本。在将我的1个NVIDIA GeForce RTX 2080 Ti划分为3个虚拟设备(使用中的实验::VirtualDevices)之后,我启动了3个tensorflow会话,每个会话来自不同的线程,并且具有不同的设备目标。有了它,我就能够将每个会话的操作映射到物理GPU设备上不同的CUDA流 使用nsight系统,当我试图同时在所有3个会话中运行推理以测试gpu吞吐量时,我现在正在分析tenso

使用:

我正在尝试运行3个tensorflow会话,每个会话在同一个gpu上都有自己的tf计算图副本。在将我的1个NVIDIA GeForce RTX 2080 Ti划分为3个虚拟设备(使用中的实验::VirtualDevices)之后,我启动了3个tensorflow会话,每个会话来自不同的线程,并且具有不同的设备目标。有了它,我就能够将每个会话的操作映射到物理GPU设备上不同的CUDA流

使用nsight系统,当我试图同时在所有3个会话中运行推理以测试gpu吞吐量时,我现在正在分析tensorflow会话推理。以下是我观察到的时间轴视图:

在将所有3个输入张量复制到设备进行推断后,正如您从上面的时间轴视图中所观察到的,cuda流18、14和22正在并发执行操作,但尽管是数据并行的,但几乎没有并行性

对我来说,这表明我可能受到计算资源的限制,如何验证这一点?在这种情况下,我如何找到哪些资源是瓶颈?是否有其他工具,如nsight compute,可以被推荐深入研究这个问题?

放大活动的3个cuda流同时执行的时间轴:

从上面的视图中选择一个随机核,比如说本征核,我观察到这个核的理论占有率为100%:

这是否表示内核映射到物理gpu可用的100%cuda线程?在这种情况下,我可能会受到计算限制,应该通过使用更轻的操作来优化tf计算图的运行时?或者我可以改变内核到cuda线程的映射,以占用更少的计算资源,从而提高cuda流之间的并行性

我的目标是减少每次会话的推理时间

非常感谢您的任何见解/建议

Tensorflow version 1.15 - C++ API
Driver Version: 440.33.01
CUDA Version: 10.2
GPU Device: NVIDIA GeForce RTX 2080 Ti