这很令人困惑。
然而,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驱动程序的设计。此外,
这个有些相关的问题/答案可能也会引起兴趣。
nvidia-smi -a
显示SW Thermal Slowdown: Active
-这是驱动程序限制的迹象吗? - Tomasz Gandor