您的位置首页 >要闻 > 人工智能 >

AI 工程师踩坑实录Windows 多进程造成 DataLoader 卡在第一个 batch 排查教程

这篇踩坑文章专门讲解 PyTorch 在 Windows 平台训练时非常经典的故障,就是程序启动之后一直卡死,停在读取第一个 batch,没有报错、也不会继续往下跑,绝大多数新手甚至不少有经验的 AI 工程师都会踩这个多进程的坑,根源在于 Windows 的多进程创建方式和 Linux 完全不一样,Linux 使用 fork,而 Windows 只能走 spawn,子进程会重新加载整个脚本,如果代码没有做好隔离,就会反复创建子进程,形成死锁,表面现象就是 DataLoader 一直卡住不动。除了最核心的主入口没有保护之外,自定义数据集、回调函数没法序列化、IDE 调试器干扰、OpenCV 线程冲突,也会加重这个问题。

故障快速定位清单

  • 现象特征:脚本运行,模型初始化正常,迭代 DataLoader,卡在第一组 batch,无崩溃报错,GPU、CPU 占用异常,长时间没有输出。
  • 优先判断:把 num_workers 设置为 0,如果可以正常跑通,就确认是 Windows 多进程 spawn 带来的问题。
  • 次要排查点:如果改成单进程依旧卡住,再去检查磁盘 IO、样本损坏、transform 里的死循环、内存溢出。
  • IDE 区分测试:VSCode、Jupyter 里更容易复现;换到原生 CMD、PowerShell 运行,用来排除调试钩子干扰。

核心修复方案

  • 使用 if __name__ == "__main__": 包裹训练入口
  • 调低或者直接关闭多进程
  • 规避不可序列化对象
  • 控制第三方库线程

所有创建 DataLoader、启动训练循环的代码,都放到这个判断里面,防止子进程再次执行训练逻辑,不断派生新进程,形成循环。自定义 Dataset、collate_fn、transform 类建议写在全局作用域,不要写在主函数内部,否则序列化失败。

临时方案:num_workers=0,使用单进程加载数据,适合调试;如果需要提速,可以少量开启 worker,同时搭配 multiprocessing_context="spawn" 显式指定。

不要在数据集内部携带锁、打开的文件句柄、CUDA Tensor,这些对象无法 pickle,会造成子进程静默失败。

OpenCV、MKL、OMP 如果不限制线程数量,多 worker 下容易出现内部死锁,可以在脚本最开头设置环境变量限制线程数。

避坑对照表

项目Linux(fork)Windows(spawn)
进程创建复制进程现场,开销低重启解释器,重新导入全部代码
入口保护不强制,推荐加上强制,不加极易死锁
CUDA IPC支持不支持,不要在 worker 里操作 CUDA
序列化要求宽松严格,自定义类必须可 pickle

【相关 FAQ】

问题 1:Windows 下 DataLoader 卡死在第一个 batch,是不是一定就是多进程 spawn 的问题?

回答 1:Windows 下 DataLoader 卡死在第一个 batch,最常见元凶就是多进程 spawn 机制,但不是唯一原因;需要先把 num_workers 改成 0,如果正常运行,才能确认是这个坑。

问题 2:修复 Windows 多进程导致 DataLoader 卡在第一个 batch,只加 if __name__ == "__main__" 就够吗?

回答 2:修复 Windows 多进程导致 DataLoader 卡在第一个 batch,加上 if __name__ == "__main__" 是最关键一步,同时还要保证数据集、回调函数可以序列化,不在子进程内操作 CUDA。

问题 3:如果我需要速度,Windows 能不能一直开高 num_workers 跑 DataLoader?

回答 3:Windows 虽然可以开启 num_workers,但受限于 spawn 和 CUDA IPC 的限制,稳定性不如 Linux;想要避开 DataLoader 卡在第一个 batch,优先控制 worker 数量,必要时使用单进程加载。

【参考资料】

[2026-10-26](Python 环境下 PyTorch 如何避免多进程 DataLoader 死锁问题)PHP 中文网

[2025-12-26](训练每隔几步就 “卡半天”?PyTorch DataLoader 阻塞与吞吐骤降的三连坑)腾讯云开发者社区

[2025-09-13](踩坑实录:PyTorch DataLoader 多进程陷阱,Windows 多进程机制刨根问底)DevPress

[2024-06-09](Dataloader slow on pc fast on colab)PyTorch 官方论坛

[2024-03-01](PyTorch Windows 平台官方注意事项)PyTorch 中文文档

【免责声明】

本文仅整理该篇 AI 工程师踩坑实录以及 PyTorch 社区公开排障方案;不同 PyTorch 版本、显卡驱动、系统版本、第三方库版本,都会改变复现难度;如果业务需要稳定高速的数据加载,生产环境优先考虑 Linux。