nvidia-smi GPU性能测量没有意义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nvidia-smi GPU性能测量没有意义相关的知识,希望对你有一定的参考价值。

我正在使用Nvidia GTX Titan X进行深度学习实验。我使用nvidia-smi监视GPU运行状态,但是提供的工具的perf(ormance)状态没有意义。

我查看了nvidia-smi手册,它说如下:

性能状态GPU的当前性能状态。状态范围从P0(最高性能)到P12(最低性能)。

如果不在GPU上运行任何进程(空闲状态),GPU性能状态为p0。但是,当运行一些计算繁重的过程时,状态变为p2。

我的问题是,为什么我的GPU在空闲时处于P0状态,但在运行繁重的计算任务时切换到P2?不应该相反吗?

另外,有没有办法让我的GPU始终以P0状态运行(最高性能)?

答案

这令人困惑。

但是,nvidia-smi手册是正确的。

当GPU或一组GPU空闲时,在机器上运行nvidia-smi的过程通常会使其中一个GPU退出空闲状态。这是由于该工具正在收集的信息 - 它需要唤醒其中一个GPU。

此唤醒过程最初会将GPU置于P0状态(最高性能状态),但GPU驱动程序将监视该GPU,并最终开始降低性能状态以节省电量,如果GPU空闲或不特别忙。

另一方面,当GPU在工作负载下处于活动状态时,GPU驱动程序将根据其自身的启发式方法,不断调整性能状态,以便在将性能状态与实际工作负载相匹配时提供最佳性能。如果未达到热量或功率限制,则对于最活跃和最重的连续工作负载,性能状态应达到其最高级别(P0)。

周期性繁重但不连续的工作负载可能会看到GPU电源状态在P0-P2级别附近波动。由于热(温度)或功率问题而“节流”的GPU也可能看到P状态减少。这种类型的限制很明显,并且在nvidia-smi中单独报告,但是可能不会为所有GPU类型启用此类报告。

如果你想在你的GPU上看到P0状态,我可以提供的最佳建议是运行一个短而重的连续工作负载(例如,执行大sgemm操作的东西),然后在该工作负载期间监控GPU。在那种情况下应该可以看到P0状态。

如果您正在使用使用cuDNN库的机器学习应用程序(例如Caffe),并且您正在训练大型网络,那么应该可以不时地看到P0,因为cuDNN执行的操作类似于sgemm场景,通常。

但对于零星的工作量,最常见的状态很可能是P2。

要始终“强制”P0电源状态,您可以尝试通过nvidia-smi工具试验持久性模式和应用程序时钟。使用nvidia-smi --help或nvidia-smi的手册页来了解这些选项。

虽然我认为这通常不适用于特斯拉GPU,但是一些NVIDIA GPU可能会将自己限制在计算负载下的P2电源状态,除非应用程序时钟特别设置得更高。使用nvidia-smi -a命令查看当前可用于GPU的应用程序时钟,默认应用程序时钟和最大时钟。 (某些GPU,包括较旧的GPU,可能会显示某些字段的N / A.这通常表示应用程序时钟不能通过nvidia-smi修改。)如果卡在计算负载期间似乎运行在P2状态,您可能能够通过将应用程序时钟增加到可用的最大值(即最大时钟)来将其增加到P0状态。使用nvidia-smi --help学习如何格式化命令以更改GPU上的应用程序时钟。修改应用程序时钟或启用可修改的应用程序时钟可能需要root / admin权限。设置GPU持久性模式也可能是理想的或必要的。这将防止驱动程序在GPU活动期间“卸载”,这可能导致在驱动程序重新加载时重置应用程序时钟。

对于这种情况下受影响的卡,在计算负载下限制为P2的默认行为是GPU驱动程序的设计。

This有些相关的问题/答案也可能有意义。

以上是关于nvidia-smi GPU性能测量没有意义的主要内容,如果未能解决你的问题,请参考以下文章

替代 nvidia-smi 来测量 GPU 利用率?

nvidia-smi

nvidia-smi 关键知识

在 TensorFlow 中打印 GPU 和 CPU 使用率

novelaiwebui报错gpucpu

使用触发器测量移动GPU性能是否足够?