1. 确定是否用到GPU
运行下面命令动态查看GPU使用情况。
watch -n 0.1 nvidia-smi
如果程序运行时,Processes
栏有自己的程序名字,说明使用到了GPU。请仔细观察显存Memory-Usage
和GPU使用率GPU-Util
的情况。
2. 显卡利用率低的可能原因
可以使用IDE软件的Profile工具查看程序的时间花在哪些部分,可能是数据读取、模型训练、以及写日志等等。
- 数据集的预处理花费时间比较长。相当于GPU要等待CPU处理好数据再计算,所以利用率低;
- 超内存或者超显存。如果内存和显存太小,计算机自动开辟虚拟内存,那么反复通信的成本很高,利用率低;可以考虑调小batch size试试;
- 模型原因,有时候会因为模型代码编写不合理,会使得训练时间非常长(我遇到过),比如说模型中有些操作是非tensorflow/pytorch自带的,或者存在resize等耗时操作;
- 训练时花了大量时间写日志。可以检查一下,是不是日志写的很频繁,或者写的日志包含图片、视频等大文件;否则相当于训练极快,但是都在等你写日志写完再进入下一个step,那利用率肯定低。