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

YOLOv5大尺寸输入训练时CUDA显存不足问题求助

YOLOv5大输入尺寸训练CUDA显存不足问题排查与解决

问题背景

  • 正在重要项目中训练YOLOv5 "L6"模型,数据集包含无人机拍摄图像
  • 此前用RTX 3060训练"M"模型(输入尺寸640x640),车辆、着陆点等大目标检测效果良好,但人物等小目标检测表现不佳
  • 为优化小目标检测,改用1280x1280输入尺寸,购入RTX 3090 TI,在已配置好DL/ML环境的WSL 2中运行代码
  • 核心问题:输入尺寸超过640x640时均出现CUDA显存不足错误:
    • 运行"M6"模型(批量大小8、输入尺寸1280x1280):显存占用仅约12GB仍报错
    • 运行"L6"模型(批量大小16、输入尺寸1280x1280):显存占用超过24GB后立即崩溃,触发内存分配错误

错误堆栈信息

File "/mnt/d/Ubuntu-WSL-Workspace/Code_Space/Code Workspace/Python Projects/AI Workspace/Teknofest-AI-in-T/2023YOLOV5/Last-YOLOV5/yolov5/train.py", line 640, in <module>
    main(opt)
  File "/mnt/d/Ubuntu-WSL-Workspace/Code_Space/Code Workspace/Python Projects/AI Workspace/Teknofest-AI-in-T/2023YOLOV5/Last-YOLOV5/yolov5/train.py", line 529, in main
    train(opt.hyp, opt, device, callbacks)
  File "/mnt/d/Ubuntu-WSL-Workspace/Code_Space/Code Workspace/Python Projects/AI Workspace/Teknofest-AI-in-T/2023YOLOV5/Last-YOLOV5/yolov5/train.py", line 352, in train
    results, maps, _ = validate.run(data_dict,
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
  File "/mnt/d/Ubuntu-WSL-Workspace/Code_Space/Code Workspace/Python Projects/AI Workspace/Teknofest-AI-in-T/2023YOLOV5/Last-YOLOV5/yolov5/val.py", line 198, in run
    for batch_i, (im, targets, paths, shapes) in enumerate(pbar):
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/tqdm/std.py", line 1178, in __iter__
    for obj in iterable:
  File "/mnt/d/Ubuntu-WSL-Workspace/Code_Space/Code Workspace/Python Projects/AI Workspace/Teknofest-AI-in-T/2023YOLOV5/Last-YOLOV5/yolov5/utils/dataloaders.py", line 172, in __iter__
    yield next(self.iterator)
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/data/dataloader.py", line 634, in __next__
    data = self._next_data()
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/data/dataloader.py", line 1346, in _next_data
    return self._process_data(data)
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/data/dataloader.py", line 1372, in _process_data
    data.reraise()
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/_utils.py", line 644, in reraise
    raise exception
RuntimeError: Caught RuntimeError in pin memory thread for device 0.
Original Traceback (most recent call last):
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/data/_utils/pin_memory.py", line 34, in do_one_step
    data = pin_memory(data, device)
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/data/_utils/pin_memory.py", line 67, in pin_memory
    return [pin_memory(sample, device) for sample in data]  # Backwards compatibility.
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/data/_utils/pin_memory.py", line 67, in <listcomp>
    return [pin_memory(sample, device) for sample in data]  # Backwards compatibility.
  File "/home/yigit-ai-dev/.pyenv/versions/3.10.9/lib/python3.10/site-packages/torch/utils/data/_utils/pin_memory.py", line 55, in pin_memory
    return data.pin_memory(device)
RuntimeError: CUDA error: out of memory
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

解决方案

1. 调整批量大小与梯度累积

  • 对于L6模型,直接将批量大小从16降至8或4,配合梯度累积参数--accumulate n模拟大批量训练效果。例如批量大小设为4,--accumulate 4,等价于批量16的梯度更新频率,但显存占用仅为原来的1/4
  • M6模型批量8仍报错时,先降至4尝试,同时开启梯度累积

2. 关闭Pin Memory

错误堆栈显示问题出在pin memory线程,WSL2环境下pin memory可能导致额外显存占用。在训练命令中添加--pin-memory 0,或修改dataloader配置,关闭pin_memory选项

3. 启用自动混合精度训练

添加--amp参数,自动混合精度能大幅降低显存占用,且几乎不影响模型精度,对大输入尺寸场景效果显著

4. 优化WSL2显存分配

WSL2默认可能限制GPU显存使用或显存回收不及时:

  • 在Windows用户目录下创建.wslconfig文件,添加以下配置(根据主机内存调整):
    [wsl2]
    memory=32GB
    localhostForwarding=true
    
  • 执行wsl --shutdown重启WSL,确保显存能被充分利用且及时回收

5. 模型轻量化调整

若上述方法仍不足,可尝试:

  • 对L6模型使用--depth 0.75或--width 0.75降低模型深度/宽度,减少显存占用
  • 保留1280x1280输入的同时,平衡模型复杂度与小目标检测效果

6. 清理显存碎片

训练前手动清理显存:

import torch
torch.cuda.empty_cache()

或在训练命令前添加export PYTORCH_NO_CUDA_MEMORY_CACHING=1,禁用PyTorch显存缓存,减少碎片


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:37:02