运行PyTorch代码触发DataLoader worker进程意外退出报错如何解决?
问题排查与解决方案
1 优先验证多进程配置问题
这是该报错最常见的诱因,你使用的是macOS环境,PyTorch DataLoader的多进程加载容易触发进程启动异常:
- 先将DataLoader的
num_workers参数改为0,禁用多进程加载,使用主进程加载数据,修改后代码为:
train_dl = DataLoader(train_ds, batch_size, shuffle=True, num_workers=0, pin_memory=True)
运行后如果报错消失,证明是多进程配置问题。如果需要保留多进程提升加载速度,需要在代码最开头加入Python多进程入口保护,将所有执行逻辑放在if __name__ == '__main__'判断下:
import torch # 其他所有导入语句都放在最开头 if __name__ == '__main__': # 原本的所有代码都缩进放到该判断内部 batch_size = 128 # ... 剩下的全部业务代码
2 验证自定义数据集逻辑是否正确
如果修改num_workers=0后仍然报错,说明是你自定义的facesDataset类存在逻辑错误:
- 单独测试数据集读取逻辑,不要通过DataLoader加载,直接执行如下代码验证:
# 初始化数据集后直接遍历前10个样本排查问题 for i in range(10): try: img, label = train_ds[i] print(f"样本{i}读取正常,图片shape:{img.shape}") except Exception as e: print(f"样本{i}读取失败,错误:{e}")
常见的数据集错误包括:csv文件内的图片路径填写错误、对应路径下图片不存在、图片文件损坏无法读取、__getitem__方法返回的格式不符合要求。
3 其他可能的兼容问题
- macOS环境对
pin_memory支持不完善,可以尝试将DataLoader的pin_memory参数改为False - 内存不足也会导致子进程被系统强制杀死,可以将
batch_size从128调低到16再测试,确认是否是内存不足导致的问题
内容的提问来源于stack exchange,提问作者aidan.goetzinger
相关产品推荐
相关产品推荐

