直到有一天Nvidia推送了一个新的驱动程序,想着越好的显卡驱动肯定越能提高我的显卡利用率,充分榨干显卡性能,所以毫不犹豫的升级到了536.99。

升级完马上拿了VM跑了一下以前的一个方案,发现不对劲,连续执行的耗时波动明显高于旧版本,而且波动跳变的范围十分不可靠,表现的非常随机。这就让我十分困惑,这显卡升级后难道反向优化了?经过一番测试,20系,30系显卡在最新的Nvidia驱动上耗时波动表现极为不稳定,完全不适用于工业场景,一旦耗时波动大,那么相机可能会丢图,导致一系列生产问题。
目前测试下来,区间在466-471之间的显卡驱动较为稳定,建议大家可以尝试一下,对于一些厂商阉割过的显卡,可能会识别不到某个驱动版本,不妨往471以上的版本逐步尝试,但基本到了512版本左右都会有一样的问题。

解决耗时波动问题后,还有个潜在问题可能会存在,即:新驱动下,单次间隔执行(单步执行)与连续执行相比,连续执行的耗时更加稳定。通过从后台观察显卡功率发现,单步执行间隔过长,会导致显卡频率骤降,从而影响模型的推理速度,尤其是40系列显卡,表现最为明显。

那么我们可以用官方的锁频工具来固定住显卡频率,如:MSIAfterburner,可以设置不同电压下对应的GPU频率,实现锁频功能。(操作步骤参考:https://zhuanlan.zhihu.com/p/521002872,下载链接:https://msi-afterburner.en.softonic.com/)

锁频完成后,发现单步执行及连续执行的耗时明显趋向稳定。