nvidia-smi GPU性能测量结果不合理

21

我正在使用 Nvidia GTX Titan X 进行深度学习实验。

我正在使用 nvidia-smi 来监控 GPU 的运行状态,但该工具提供的性能状态并不合理。

我已查阅了 nvidia-smi 手册,其内容如下:

性能状态 GPU 的当前性能状态。状态从 P0(最大性能)到 P12(最小性能)不等。

在 GPU 上没有任何进程运行时(空闲状态),GPU 的性能状态为 p0。然而,在运行一些计算密集型进程时,状态变为 p2。

我的问题是,为什么我的 GPU 在空闲时处于 P0 状态,但在运行重负载任务时却转换为 P2?难道不应该相反吗?

此外,有没有办法让我的 GPU 总是运行在 P0 状态(最大性能)?

1个回答

33

这很令人困惑。

然而,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的man页面了解选项。
尽管我认为特斯拉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驱动程序的设计。此外,这个有些相关的问题/答案可能也会引起兴趣。

如何强制使用P0的指南 http://cryptomining-blog.com/7341-how-to-squeeze-some-extra-performance-mining-ethereum-on-nvidia/ - mak
我认为使用nvidia-smi或nvidia-settings设置1000和2000系列显卡的内存/核心时钟不起作用。 - Garglesoap
很棒的信息。我想有时候我们必须要耐心并且接受P2。例如,一个温度为84摄氏度的Titan V似乎不想超过P2(功率在180W左右波动)。nvidia-smi -a显示SW Thermal Slowdown: Active-这是驱动程序限制的迹象吗? - Tomasz Gandor
温度太高了。热量减速“激活”意味着软件正在读取GPU温度传感器并限制时钟速度,以尝试防止过热。我通常会质疑您的冷却环境。您的系统机箱内部可能变得太热了。您可能需要更多的系统风扇。 - Robert Crovella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接