DataLoader数据加载慢的解决办法

DataLoader数据加载慢的解决办法

问题描述

使用pytorch训练神经网络的过程中,DataLoader数据加载得很慢,首先考虑设定DataLoader中的num_workers参数,使用多线程并行加载数据,但后来发现即使设定num_workers=16,也并没有实质性的速度提升,并且发现每隔 batch_size × num_workers 个数据(假定一个epoch总共有M个训练数据),训练会卡顿一会儿,仿佛GPU在等待CPU从DataLoader中加载数据。

在训练过程中,使用 top 命令查看CPU工作状态,如下:

DataLoader数据加载慢的解决办法

使用 watch -n 1 nvidia-smi 命令查看GPU工作状态,如下:

DataLoader数据加载慢的解决办法

可以看出,此时虽然有多个CPU线程并行工作,但每个线程的利用率较低,并且虽然GPU有一定的显存占用(目前是单GPU运行),但利用率几乎为0。

解决办法

在上述训练过程中,并没有有效地实现CPU多线程并行加载数据,原因是我将训练数据、数据扩增数据以及程序代码放在同一块固态硬盘中,而将这三部分数据分别放在不同的硬盘中,问题得到解决,CPU和GPU工作状态如下:

DataLoader数据加载慢的解决办法

DataLoader数据加载慢的解决办法

上一篇:阿里云高校计划视觉AI五天训练营教程 Day 1——视觉生产技术


下一篇:ArrayList_以链表为核心的线性表的实现方法