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

jia*_*jun 12 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状态运行(最高性能)?

Rob*_*lla 23

这令人困惑.

但是,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驱动程序的设计.

这个有点相关的问题/答案也可能是有意义的.