这是我使用pytorch训练模型的时候,出现cpu占用过多的情况,无关pytorch版本
dataloader
的num_work=1
的时候
单线程cpu占用量2800,也就是一半的cpu,我服务器一共28*2个逻辑cpudataloader
的num_work=8
的时候
8个线程cpu占用500-700,合计2800
使用网上教程的如下指令,没有任何效果
cpu_num = 1
os.environ["OMP_NUM_THREADS"] = str(cpu_num)
os.environ["OPENBLAS_NUM_THREADS"] = str(cpu_num)
os.environ["MKL_NUM_THREADS"] = str(cpu_num)
os.environ["VECLIB_MAXIMUM_THREADS"] = str(cpu_num)
os.environ["NUMEXPR_NUM_THREADS"] = str(cpu_num)
torch.set_num_threads(cpu_num)
最后发现是数据扩增惹的祸,我是用的数据扩增库是albumentations,其中所使用的基于opencv的各种数据变换占用了太多的cpu,因此只需要限制opencv的线程数目则可:
import cv2
import albumentations
cv2.setNumThreads(1) # 0也可以
再设置dataloader
的num_work=2
的情况
虽然不清楚这里为什么有3个,但目的达成了,而且训练速度和cpu占用2800的时候一样。
在albumentations的github网址也有相关联的一小段说明,但不是本博客遇到的问题,cv2.ocl.setUseOpenCL(False)
对于本博客问题可以不加。