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

时间:2015-06-05 09:53:17

标签: cuda gpu

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

我查看了nvidia-smi手册,它说了以下内容:

  

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

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

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

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

1 个答案:

答案 0 :(得分:21)

令人困惑。

然而,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有些相关的问题/答案也可能是有意义的。