DataLoader数据加载慢的解决办法
问题描述
使用pytorch训练神经网络的过程中,DataLoader数据加载得很慢,首先考虑设定DataLoader中的num_workers参数,使用多线程并行加载数据,但后来发现即使设定num_workers=16,也并没有实质性的速度提升,并且发现每隔 batch_size × num_workers 个数据(假定一个epoch总共有M个训练数据),训练会卡顿一会儿,仿佛GPU在等待CPU从DataLoader中加载数据。
在训练过程中,使用 top
命令查看CPU工作状态,如下:
使用 watch -n 1 nvidia-smi
命令查看GPU工作状态,如下:
可以看出,此时虽然有多个CPU线程并行工作,但每个线程的利用率较低,并且虽然GPU有一定的显存占用(目前是单GPU运行),但利用率几乎为0。
解决办法
在上述训练过程中,并没有有效地实现CPU多线程并行加载数据,原因是我将训练数据、数据扩增数据以及程序代码放在同一块固态硬盘中,而将这三部分数据分别放在不同的硬盘中,问题得到解决,CPU和GPU工作状态如下: