应用场景:
系统:Windows 10 x64
硬件:分别使用Nvidia 3060 laptop、Nvidia 3070、Nvidia 3070 Ti
驱动:5xx
cuda:11.x
平台:Halcon、PaddlePaddle
任务:随机执行一次推理,但要求耗时稳定
问题描述
- 在上述应用场景下,随机执行推理的耗时很不稳定,30ms 至 100ms+不定;
- 如果保持连续间隔40ms的推理频率,时间又比较稳定30ms+;
- 规律就是,间隔时间长去进行推理,那么这次的推理耗时特别长,耗时会是连续推理的三、四倍;
尝试解决:
-
各种更换硬件的组合方式,没有能够解决这个问题;
-
各种更换CUDA组合方式,没有能够解决这个问题;
-
分页内存设置,没有能够解决这个问题;
-
单独开启一个线程,以很小的固定间隔时间推理一张固定的图片,在这个基础上再去推理我们想要处理的任务。该方法有一定的效果,但是不理想,还是不够稳定,单张图片的推理时间还是波动一倍左右。
-
根据同事反馈使用1080Ti显卡,同样的程序却没有这个问题存在;
原因分析:
官方的人员回复:
1 间隔推理可能会导致显卡降频并且会持续一些时间,建议开一个空内核跑着可以维持高频率,Samples中有,但是我没有找到;
2 建议设定固定频率,这个应该简单一些;
3 多久降?降多少?为什么?…不得而知
解决方案:
锁定GPU时钟频率(实测有效):
- 第一步 使用 nvidia-smi -q -d SUPPORTED_CLOCKS 查询GPU支持的最高频率,如下图所示为 7001 MHz
nvidia-smi -q -d SUPPORTED_CLOCKS
- 1
- 第二步 设置锁定评率 nvidia-smi -lgc 7001 设置成功后的结果如下图所示:
nvidia-smi -lgc 7001
- 1
- 第三步 NVIDIA 显卡设置
低延时模式,设置为 超高
- 1
- 电源管理模式,设置为 最高性能优先
- 1
- 第四步 Batchsize=1 随机间隔时间进行推理,测试推理耗时,此时应该就很稳定了!