Optimization GPU利用率低是否表示不适合GPU加速?

Optimization GPU利用率低是否表示不适合GPU加速?,optimization,pytorch,gpu,torchvision,Optimization,Pytorch,Gpu,Torchvision,我正在运行一些并针对自定义数据集对其进行训练,但在过程中监视工作站的状态时,我看到GPU的使用情况如下所示: 我从未编写过自己的GPU原语,但我有很长的为CPU密集型工作负载进行低级别优化的历史,我在那里的经验让我担心,虽然pytorch/torchvision正在将工作卸载到GPU,但它可能不是GPU加速的理想工作负载 优化CPU受限代码时,目标是尝试让CPU在一个时间单位内执行尽可能多的(有意义的)工作:一个假定的CPU受限任务,仅显示20%的CPU利用率(单核或所有核,取决于任务是否可并

我正在运行一些并针对自定义数据集对其进行训练,但在过程中监视工作站的状态时,我看到GPU的使用情况如下所示:

我从未编写过自己的GPU原语,但我有很长的为CPU密集型工作负载进行低级别优化的历史,我在那里的经验让我担心,虽然pytorch/torchvision正在将工作卸载到GPU,但它可能不是GPU加速的理想工作负载

优化CPU受限代码时,目标是尝试让CPU在一个时间单位内执行尽可能多的(有意义的)工作:一个假定的CPU受限任务,仅显示20%的CPU利用率(单核或所有核,取决于任务是否可并行)是一项没有有效执行的任务,因为CPU处于空闲状态,而理想情况下,它将朝着您的目标工作。CPU使用率低意味着除数字运算以外的其他工作正在占用您的挂钟时间,无论是低效锁定、繁重的上下文切换、管道刷新、主循环中的锁定IO等,都会阻止工作负载使CPU正常饱和

当查看上图中的GPU利用率时,作为一个完全的新手,当谈到GPU利用率时,我感到GPU的利用率非常低,并且似乎受到数据复制到GPU内存的速率的限制。这个假设正确吗?我希望看到拷贝(到GPU)中出现峰值,然后是一段长时间的计算/转换,然后是一个简短的拷贝(从GPU返回),无限重复

我注意到,尽管拷贝利用率很低(尽管是恒定的),但GPU内存在8GB限制下不断达到峰值。我是否可以假设工作负载受到可用GPU内存不足的限制(即,由于可以复制的内存太少,所以没有将复制带宽最大化)


这是否意味着这是一个更适合CPU的工作负载(在这个RTX 2080的特殊情况下,通常是任何卡)?

我建议使用TechPowerUp的GPU-Z之类的工具来监控Windows下的GPU利用率。我不确定Windows的内置监控功能有多有用。您的应用程序是一个计算应用程序,因此我不希望“3D”利用率很高,如果应用程序写得好(尽量减少复制),我也希望“复制”相当低。您可能还想检查PyTorch是否真的在使用GPU。如果您正在动态地从硬盘加载数据,这可能是瓶颈,因此系统使用GPU的时间很少,从磁盘读取的时间也很多。考虑到您发送的链接是一项视频识别任务,视频解码速度可能非常慢,并且因瓶颈问题而臭名昭著。您现在可能已经找到了,当您单击3D、复制、视频编码或视频解码旁边的一个向下箭头时,您可以选择GPU的其他性能指标。其中之一是库达。这通常会显示出更高的利用率。但我必须承认,pyTorch并不总是让GPU充分发挥其潜力。这可能需要一些手动调整。我建议使用TechPowerUp的GPU-Z之类的工具来监控Windows下的GPU利用率。我不确定Windows的内置监控功能有多有用。您的应用程序是一个计算应用程序,因此我不希望“3D”利用率很高,如果应用程序写得好(尽量减少复制),我也希望“复制”相当低。您可能还想检查PyTorch是否真的在使用GPU。如果您正在动态地从硬盘加载数据,这可能是瓶颈,因此系统使用GPU的时间很少,从磁盘读取的时间也很多。考虑到您发送的链接是一项视频识别任务,视频解码速度可能非常慢,并且因瓶颈问题而臭名昭著。您现在可能已经找到了,当您单击3D、复制、视频编码或视频解码旁边的一个向下箭头时,您可以选择GPU的其他性能指标。其中之一是库达。这通常会显示出更高的利用率。但我必须承认,pyTorch并不总是让GPU充分发挥其潜力。这可能需要一些手动调整