如何优化Pytorch中的Dataloader加载速度?
- 内容介绍
- 文章标签
- 相关推荐
本文共计874个文字,预计阅读时间需要4分钟。
在进行多卡训练时,常遇到GPU利用率低的情况,无法发挥硬件的最大潜能。这种现状最可能的原因是CPU生成数据的速度跟不上GPU处理数据的能力。解决方案之一是方法一:优化CPU到GPU的数据传输效率,确保数据传输速度与GPU处理速度相匹配。
在进行多卡训练的时候,经常会出现GPU利用率上不来的情况,无法发挥硬件的最大实力。 造成这种现象最有可能的原因是,CPU生成数据的能力,已经跟不上GPU处理数据的能力。
方法一
常见的方法为修改Dataloader里面的线程数量,利用多线程技术提高数据生产能力,但是这种方法提速并不是特别明显。
train_loader = DataLoader(dataset, batch_size,shuffle=True, num_worker=4)
而且windows机器上,num_worker大于0时,有时会出现卡死的情况,这应该是pytorch的bug,因此不是特别建议这种方法。
不过这种方法最简单,还是可以尝试一下更改线程数能否缓解你遇到的问题。nun_worker一般设置为处理器的物理线程数,不宜过大,因为会导致额外的线程开销。
本文主要介绍第二种方法,也就是Data Prefetcher,最早见于NVIDIA APEX。
本文共计874个文字,预计阅读时间需要4分钟。
在进行多卡训练时,常遇到GPU利用率低的情况,无法发挥硬件的最大潜能。这种现状最可能的原因是CPU生成数据的速度跟不上GPU处理数据的能力。解决方案之一是方法一:优化CPU到GPU的数据传输效率,确保数据传输速度与GPU处理速度相匹配。
在进行多卡训练的时候,经常会出现GPU利用率上不来的情况,无法发挥硬件的最大实力。 造成这种现象最有可能的原因是,CPU生成数据的能力,已经跟不上GPU处理数据的能力。
方法一
常见的方法为修改Dataloader里面的线程数量,利用多线程技术提高数据生产能力,但是这种方法提速并不是特别明显。
train_loader = DataLoader(dataset, batch_size,shuffle=True, num_worker=4)
而且windows机器上,num_worker大于0时,有时会出现卡死的情况,这应该是pytorch的bug,因此不是特别建议这种方法。
不过这种方法最简单,还是可以尝试一下更改线程数能否缓解你遇到的问题。nun_worker一般设置为处理器的物理线程数,不宜过大,因为会导致额外的线程开销。
本文主要介绍第二种方法,也就是Data Prefetcher,最早见于NVIDIA APEX。

