问题背景介绍
本人是windows系统,在使用torch.utils.data.Dataloader加载torchvision中的数据集时,将其中的形参num_workers设置为了大于0的数,然后出现以下错误。
原因
在 Windows 系统下,num_workers 参数在使用 PyTorch 的 torch.utils.data.DataLoader 加载数据时通常只能设置为 0,不能设置为大于 0 的值。这是因为在 Windows 系统下,Python 的多进程 multiprocessing 模块的实现方式与 Unix/Linux 系统有所不同。
在 Unix/Linux 系统中,可以使用 fork() 系统调用来实现进程的复制,从而实现进程的快速启动和高效的数据加载。而在 Windows 系统中,由于没有 fork() 系统调用,Python 使用了不同的实现方式来实现多进程,即使用了 spawn 或 forkserver 方法。然而,这种实现方式在加载数据时会遇到一些问题,特别是涉及到使用了共享内存的数据加载器(例如 DataLoader 中的 num_workers > 0 参数),可能会导致程序出现错误或崩溃。
因此,在 Windows 系统下,为了避免由于使用多进程加载数据而导致的问题,通常建议将 num_workers 参数设置为 0,即不使用多进程加载数据。这虽然会降低数据加载的速度,但可以避免潜在的问题,保证程序的稳定性。
总结
如果你是windows系统的话,乖乖把num_workers的设置为0就行了。当num_workers为大于0的值时,不代表你的代码有误,只是Windows操作系统与pytorch多进程的实现不兼容而已。