首页 > 解决方案 > GPU 利用率低是否表明不适合 GPU 加速?

问题描述

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

任务管理器中的 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 并且通常使用任何卡)?

标签: optimizationpytorchgputorchvision

解决方案


推荐阅读