在使用 pytorch dataloader 时,出现了当把num_workers 设置不为0即报错的问题,本文记录两种此类错误的解决方案。
Dataloader - num_workers
Pytorch 中加载数据的模块Dataloader有个参数num_workers,该参数表示使用dataloader时加载数据的进程数量,可以理解为为网络搬运数据的工人数量;
所以如果dataloader比较复杂,工人多的时候自然可以节省大量数据加载时间,他们可以在网络训练时同时进行数据加载工作,等网络训练结束直接从内存中取走加载完成的数据,因此当num_worker大于1时可以对数据加载进行加速,当数量多到网络不需要加载数据的时间时就是工人们为加速训练做工作的极限收益了;
使用大于1的工人会占用更多的内存和cpu,同时也会占用更多的共享内存(share memory);
使用大于1的工人会调用多线程。
问题说明:
根据num_worker的工作思路,可能会在工作中出现两种错误(我遇到的两种):
- 共享内存不足:
RuntimeError: DataLoader worker (pid XXX) is kille