ppocr Out of memory error on GPU 0. Cannot allocate 128.000000MB memory on GPU 0,

Hint: 'CUBLAS_STATUS_ALLOC_FAILED'.  Resource allocation failed inside the cuBLAS library. This is usually caused by a cudaMalloc() failure.  To correct: prior to the function call, deallocate previously allocated memory as much as possible. ] (at /paddle/paddle/phi/backends/gpu/gpu_resources.cc:235)
  [operator < linear > error]
(ppocr) keqikeji@keqikeji-System-Product-Name:~/PaddleOCR$ Out of memory error on GPU 0. Cannot allocate 128.000000MB memory on GPU 0, 23.607361GB memory has been allocated and available memory is only 35.562500M^C

你的配置文件似乎是一个用于图像处理任务(如文本识别)的配置文件。以下是对这个配置文件的详细解释:

MultiScaleSampler

  • name: MultiScaleSampler: 这是一个采样器的名称,可能用于数据加载过程中对图像进行多尺度采样。
  • scales: [[320, 32], [320, 48], [320, 64]]: 这是多尺度采样的具体尺寸列表。在训练过程中,会使用这些不同尺寸的图像。
  • first_bs: &bs 192: 设置第一个batch size为192,并且将这个值作为bs变量存储,供后续引用。
  • fix_bs: false: 指定是否固定batch size。
  • divided_factor: [8, 16]: 这是宽度和高度的除数因子,可能用于图像尺寸调整或特征图缩放。
  • is_training: True: 指定是否为训练模式。

Loader (训练数据加载器)

  • shuffle: true: 启用数据打乱,确保数据在每个epoch之间的随机性,有助于提高模型的泛化能力。
  • batch_size_per_card: *bs: 设置每个GPU卡上的batch size为前面定义的bs(即192)。
  • drop_last: true: 如果最后一个batch的数据量小于batch size,则丢弃这个batch。
  • num_workers: 8: 使用8个工作线程来加载数据,加快数据加载的速度。

Eval (评估配置)

  • dataset:
    • name: SimpleDataSet: 使用的评估数据集名称。
    • data_dir: ./train_data: 数据集的目录。
    • label_file_list: 标签文件列表。
      • - ./train_data/rec/val.txt: 标签文件路径。
    • transforms: 图像和标签的预处理步骤。
      • DecodeImage: 解码图像。
        • img_mode: BGR: 使用BGR颜色模式。
        • channel_first: false: 通道是否放在第一个维度。
      • MultiLabelEncode: 多标签编码。
        • gtc_encode: NRTRLabelEncode: 使用NRTRLabelEncode进行编码。
      • RecResizeImg: 调整图像尺寸。
        • image_shape: [3, 48, 320]: 图像调整后的尺寸。
      • KeepKeys: 保留关键字段。
        • keep_keys: 需要保留的字段列表。
          • - image: 图像。
          • - label_ctc: CTC标签。
          • - label_gtc: GTC标签。
          • - length: 长度。
          • - valid_ratio: 有效比率。

Loader (评估数据加载器)

  • shuffle: false: 不打乱数据顺序。
  • drop_last: false: 保留最后一个batch的数据,即使它的大小小于batch size。
  • batch_size_per_card: 12: 每个GPU卡上的batch size为12。
  • num_workers: 4: 使用4个工作线程来加载数据。

总结

这个配置文件用于设置训练和评估文本识别模型的各项参数。MultiScaleSampler部分主要用于多尺度训练,而loader部分则分别定义了训练和评估时的数据加载方式。各项参数的设置旨在优化训练效率和模型性能。

4o

那个会导致内存不足

ChatGPT

如果当前配置导致内存不足,可以考虑以下几种解决方案来优化内存使用:

减小Batch Size

减小batch_size_per_card可以显著减少每次训练所需的内存。

  • 训练数据加载器

     yaml 

    复制代码

    loader: shuffle: true batch_size_per_card: 128 # 例如,从192减小到128 drop_last: true num_workers: 8

  • 评估数据加载器

     yaml 

    复制代码

    loader: shuffle: false drop_last: false batch_size_per_card: 8 # 例如,从12减小到8 num_workers: 4

调整图像尺寸

如果减小batch size仍然不能解决内存不足的问题,可以考虑减小图像尺寸(但要注意这可能会影响模型性能)。

  • 调整MultiScaleSamplerscales

     yaml 

    复制代码

    scales: [[320, 32], [320, 48], [320, 64]] # 例如,将320减小为256

  • 调整RecResizeImgimage_shape

     yaml 

    复制代码

    - RecResizeImg: image_shape: [3, 48, 256] # 例如,将320减小为256

使用更少的工作线程

减少num_workers可以减少内存开销,但可能会增加数据加载时间。

  • 训练数据加载器

     yaml 

    复制代码

    loader: shuffle: true batch_size_per_card: 128 # 适当减少batch size drop_last: true num_workers: 4 # 例如,从8减小到4

  • 评估数据加载器

     yaml 

    复制代码

    loader: shuffle: false drop_last: false batch_size_per_card: 8 # 适当减少batch size num_workers: 2 # 例如,从4减小到2

使用梯度累积

通过梯度累积技术,可以使用较小的batch size进行多次前向传递,然后一次性进行反向传播和参数更新。这样可以减少每次前向传递所需的显存。

在代码实现中,可以在训练循环中添加梯度累积的逻辑,例如每累积一定数量的小batch后进行一次反向传播。

确保释放不必要的内存

在训练和评估过程中,确保及时释放不再使用的内存。例如,在每个epoch结束后,可以手动清理缓存:

 

python

复制代码

import torch # 在每个epoch结束后 torch.cuda.empty_cache()

优化数据加载和预处理

确保数据加载和预处理的过程尽量高效,可以减少不必要的内存占用。例如,在数据加载器中使用pin_memoryprefetch_factor参数:

 

yaml

复制代码

loader: shuffle: true batch_size_per_card: 128 drop_last: true num_workers: 4 pin_memory: true prefetch_factor: 2

总结

上述方法可以帮助减轻内存不足的问题。具体使用哪些方法可以根据实际情况逐步调整,直到找到适合的配置。如果需要更多的帮助,请随时提供更多的上下文或具体的错误信息。

4o


 

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无证驾驶梁嗖嗖

让我们解决Jetson使用问题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值