RuntimeError: DataLoader worker (pid(s) 9528, 8320) exited unexpectedly

时光怂恿深爱的人放手 提交于 2020-02-18 03:27:24

原文地址

分类目录——Pytorch

关键词:

Data.DataLoadernum_workersbatch

Pytorch在开进行小批量数据下降时开多进程报错

报错内容

RuntimeError: DataLoader worker (pid(s) 9528, 8320) exited unexpectedly

去网上搜教程,说是在loader定义的时候多进程的参数指定的问题,我的loader定义如下

loader = Data.DataLoader(
    dataset=torch_dataset,      # torch TensorDataset format
    batch_size=BATCH_SIZE,      # mini batch size
    shuffle=True,               # 要不要打乱数据 (打乱比较好)
    num_workers=2,              # 多线程来读数据
)

其中num_workers是用来指定开多进程的数量,默认值为0,表示不启用多线程。

网上给出的解决方案是

设置 num_workers=0; 或者

删掉这个属性的设置(也就是取默认值0)

但是这终归是个意淫的解决方式,当遇到大量数据处理时,势必要采用并行的处理方式才是科学高效的。

最终在 这里 找到了解决方案,就是把含有多线程操作的部分放在if __name__ == '__main__'的范围内,在我这里即

if __name__ == '__main__':
    for epoch in range(3):
        for step, (batch_x, batch_y) in enumerate(loader): 
            # 假设这里就是你训练的地方...

里面的loader就是上面定义的loader,指定了多进程的。另外只需要loader的执行部分放在main之内即可,定义部分可以在main内,也可以在main之外

后来我也恍悟,Python中多进程(multiprocessing这个模块包)的内容必须放在if __name__ == '__main__'之内才可以。多线程(threading这个模块包)是没有这项限定的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!