提高GPU利用率

如何提高GPU利用率(更新中)

核心宗旨:通过调整网络结构,batcsize大小,worker 数量,让数据读取的时间与网络前向传播和反向更新时间大致相同

  1. 一般的瓶颈就在 I/O 上面,因此可以预先把很多图片、特征等小文件存储到 LMDB 数据库,加快磁盘 I/O 速度,工具传送门, 项目首页有安装方法。

  2. 如果网络本身很简单,那么增加batchsize是无济于事的,因为网络训练很快,时间还是在等数据,因此应该适当降低 batchsize 大小,并同时增加 worker 数量,进而减少一个 batch 数据读取时间,力求达到与网络前向,后向时间一致,充分发挥多 worker 的优势。可以通过 top 命令估计 worker 的数量,如果每个 worker 的 CPU 利用率都不是0,那么就是合适的。

注意:

  1. batchsize 并不是越大越好,一方面,batchsize越大那么 variance 估计越准确,但是导致 bias 估计不准,模型未必有好的效果。另一方面,简单网络增加batchsize会让数据准备时间更长,GPU利用率显然上不去。
  2. worker 并不是越大越好,worker 越多进程之间通信越复杂,内存占用也很高,并且通过观察发现,pytroch 的 batch 读取通常是根据 worker 的数量一次性读取完成才会给出一个 batch。举例:batchsize 20,worker 3,那么当获得到第一个 batch 即数据为20的时候,并不会开始模型的训练,而是等待 20*3 读取完成之后才会进行模型训练,并且后两个 2*20 batch 的读取时间极短,大部分时间都集中在第一个 batch 上。
原文地址:https://www.cnblogs.com/TianyuSu/p/13590775.html