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

Maleah ·
更新时间:2024-09-20
· 540 次阅读

原文地址

分类目录——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这个模块包)是没有这项限定的。


作者:BBJG_001



worker pid

需要 登录 后方可回复, 如果你还没有账号请 注册新账号