You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用YOLOv8处理10万张图片时触发OSError: [Errno 24]报错求助

解决YOLOv8批量处理10万张图片时的“Too many open files”错误

问题重现

使用YOLOv8对10万张图片批量预测时,执行以下代码触发报错:

model = YOLO(self.weightpath)
src_dir = self.src_Dir
src_dir = src_dir+ '*'        
img_list = glob.glob(src_dir)
results = model(img_list, max_det = 1)

错误栈:

Traceback (most recent call last):
  File "/home/ec2-user/Deployment/main/Quality_check.py", line 63, in <module>
  File "/home/ec2-user/Deployment/utils/save_img_bins.py", line 19, in run
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/engine/model.py", line 102, in __call__
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/engine/model.py", line 202, in predict
  File "/home/ec2-user/.local/lib/python3.7/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/engine/predictor.py", line 116, in __call__
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/engine/predictor.py", line 147, in stream_inference
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/engine/predictor.py", line 135, in setup_source
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/data/build.py", line 164, in load_inference_source
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/data/build.py", line 148, in check_source
  File "/home/ec2-user/.local/lib/python3.7/site-packages/ultralytics/yolo/data/dataloaders/stream_loaders.py", line 339, in autocast_list
  File "/home/ec2-user/.local/lib/python3.7/site-packages/PIL/Image.py", line 3227, in open
OSError: [Errno 24] Too many open files: '/home/ec2-user/car/1016780737.jpg'

错误原因

Errno 24是系统级错误,说明当前进程同时打开的文件数超过了操作系统的文件描述符上限。一次性将10万张图片路径传给YOLOv8的model()方法时,内部会尝试批量加载大量图片,导致打开的文件数突破限制。

解决方案

1. 分批处理图片(推荐)

将图片列表拆分为小批次,每次处理一批后释放资源,从根源上控制同时打开的文件数量:

model = YOLO(self.weightpath)
src_dir = self.src_Dir
src_dir = src_dir + '*'        
img_list = glob.glob(src_dir)

# 自定义每批处理的图片数量,根据系统配置调整,比如100-500
batch_size = 200

for start_idx in range(0, len(img_list), batch_size):
    # 截取当前批次的图片路径
    batch_imgs = img_list[start_idx:start_idx + batch_size]
    # 执行预测
    results = model(batch_imgs, max_det=1)
    
    # 在这里添加你的结果处理逻辑(如保存标注、提取检测框等)
    
    # 显式释放资源,帮助GC回收
    del results

2. 临时调高系统文件描述符限制

如果需要临时提升单进程的文件打开上限,可以在终端执行:

ulimit -n 65535

该命令仅对当前终端会话有效,重启后失效。

3. 永久修改系统文件描述符限制

若需要长期生效,可修改系统配置文件:

  • 编辑/etc/security/limits.conf,添加以下内容:
    ec2-user soft nofile 65535
    ec2-user hard nofile 65535
    
  • 编辑/etc/pam.d/common-session,确保包含:
    session required pam_limits.so
    
  • 重启系统后生效。

注意:修改系统限制需要管理员权限,且过高的限制可能影响系统稳定性,优先推荐分批处理方案。

内容的提问来源于stack exchange,提问作者Hitesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:35:21