ai-infra-interview-305

第 7 题:PyTorch的DataLoadernum_workers设置多少合适?遇到过too many open files吗?

题目

PyTorch的DataLoadernum_workers设置多少合适?遇到过too many open files吗?


完整讲解

一、num_workers 在干什么?

num_workers > 0 时,DataLoader 会起多个子进程,每个进程负责从 dataset 里取样本、做 collate、放到队列里;主进程只从队列里取 batch。目的是把数据加载和预处理GPU 计算并行,避免 GPU 等数据(数据瓶颈)。workers 越多,理论上吞吐越高,但进程数多了会占 CPU/内存、增加 IPC 和打开文件数。


二、设多少合适?


三、too many open files 从哪来?

每个 worker 进程会打开数据文件(如每张图一个 fd、或每个 shard 一个 fd)、可能还有 pipe/socket(和主进程通信)。打开文件数 = 进程数 × 每进程打开文件数,超过系统 ulimit(open files) 就会报 too many open files(或 OSError 类似错误)。

常见场景:num_workers 较大 + 每个 sample 打开一个文件(如每张图一个文件)、或 dataset 里没及时 close、或系统默认 ulimit 较小(如 1024)。


四、怎么解决?


面试要点


记忆要点

  1. num_workers = 数据加载子进程数;一般 4–8 起步,按 GPU 利用率和 CPU 负载调。
  2. too many open files = 打开 fd 数 > ulimit;常为 workers 多 + 每 sample 一文件。
  3. 解决:ulimit -n、大文件/流式、及时 close、或减 workers。
返回模块 返回总览