CUDA out of memory

用户在 Transformers 5.12.0 环境下,参考 qubvel/transformers-notebooks 中的 RT DETR v2 微调笔记本,对自定义数据集进行目标检测模型微调。训练约 10 个 epoch 后出现 DataLoader worker 被 bus error 杀死

CUDA out of memory

CUDA out of memory

快速结论:该报错在使用 Transformers 微调 RT DETR v2 目标检测模型时触发,主要因 DataLoader 共享内存不足导致。优先排查 Docker 容器的 --shm-size 参数是否设置过小。

问题场景

用户在 Transformers 5.12.0 环境下,参考 qubvel/transformers-notebooks 中的 RT DETR v2 微调笔记本,对自定义数据集进行目标检测模型微调。训练约 10 个 epoch 后出现 DataLoader worker 被 bus error 杀死的错误,提示共享内存不足。用户已将 batch size 设为 1 仍无法避免崩溃。

报错原文

ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).
RuntimeError: DataLoader worker (pid 365) is killed by signal: Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit.

原因分析

根本原因是在 Docker 容器中运行 PyTorch DataLoader 时,默认的 /dev/shm 共享内存大小(通常 64MB)远小于 PyTorch 多进程数据加载的需求。当训练进行到评估(evaluation)阶段时,DataLoader 尝试分配共享内存用于 worker 间通信,超出限制导致 bus error。这与 batch size 大小无直接关系,即使 batch size=1 仍可能触发,因为数据预处理和加载过程的整体内存需求超过共享内存容量。

环境排查

  • Python 版本:3.12.13
  • Transformers 版本:5.12.0
  • 系统环境:Linux 6.1.0-40-amd64 (Docker)
  • 需确认 Docker 容器的 --shm-size 参数设置(默认通常为 64MB)
  • 需确认宿主机内存和共享内存大小:df -h /dev/shm
  • 需确认 torch.utils.data.DataLoadernum_workers 设置(可能默认较高)

解决步骤

  1. 增大 Docker 共享内存:在启动容器时添加 --shm-size=8g 或更高(如 16g)。例如:
    docker run --shm-size=8g ... your_image

    如果使用 Docker Compose,在 docker-compose.yml 中添加:

    shm_size: '8g'
  2. 降低 DataLoader worker 数量:在 Transformers Trainer 配置中设置 dataloader_num_workers=0 或 1,减少多进程争抢共享内存:
    training_args = TrainingArguments(
        dataloader_num_workers=0,
        ...
    )
  3. 降低图像尺寸(可优先尝试):之前用户使用宽度 1936 不可被 32 整除,导致 RT-DETR 混合编码器中的特征图拼接尺寸不匹配。将图像尺寸改为可被 32 整除的值(如 1920),但共享内存问题与图像尺寸无直接因果关系,此步骤主要解决早期 tensor size mismatch 问题。
  4. 设置 ignore_mismatched_sizes=True:在加载预训练模型时,处理因类别数不同导致的权重尺寸不匹配。

验证方法

修改共享内存设置后重新训练,观察是否还能复现 “Bus error” 和 “out of shared memory” 报错。如果训练能正常完成多个 epoch 并通过评估循环,则问题解决。可在训练期间监控 free -hdf -h /dev/shm 确认 /dev/shm 使用率未满。

参考来源

huggingface/transformers #46657

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 8815

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注