小编kyc*_*c12的帖子

Pytorch DataLoader 中的 num_worker 和 prefetch_factor 无法扩展

与 python 的多处理相关的序列化和反序列化似乎限制了并行处理数据的好处。

在下面的示例中,我创建一个返回 numpy 数组的自定义迭代。随着numpy数组大小的增加,数据获取过程成为瓶颈。这是预料之中的。然而,我预计会增加num_workerprefetch_factor通过提前准备批次来减少这一瓶颈。但我在下面的示例中没有看到这种行为。

我测试了两种MyIterable返回的情况

  1. 小物体np.array((10, 150))
  2. 大物体np.array((1000, 150))

两种情况下处理一个批次的平均时间如下:

# small np object
avg time per batch for num workers=0: 0.47068126868714444
avg time per batch for num workers=2: 0.20982365206225495
avg time per batch for num workers=4: 0.10560789656221914
avg time per batch for num workers=6: 0.07202646931250456
avg time per batch for num workers=8: 0.05311137337469063
Run Code Online (Sandbox Code Playgroud)
# large np object
avg time per batch for num workers=0: 0.6090951558124971
avg time per batch …
Run Code Online (Sandbox Code Playgroud)

python-multiprocessing pytorch pytorch-dataloader

7
推荐指数
0
解决办法
1964
查看次数