PaddlePaddle / PaddleSlim

PaddleSlim is an open-source library for deep model compression and architecture search.
https://paddleslim.readthedocs.io/zh_CN/latest/
Apache License 2.0
1.56k stars 345 forks source link

请问OCR识别自动压缩要消耗至少多少内存? #1707

Closed sanbuphy closed 9 months ago

sanbuphy commented 1 year ago

我在一台64G内存,V100显卡的机器上尝试自动压缩,发现内存缓慢不断增长但没有任何新的输出,等待很久后最后出现了Segmentation fault (core dumped)

image

请问这个现象要怎么解决? 谢谢

zzjjay commented 1 year ago

V100进行自动压缩ocr训练是足够显存的。

还有更多的报错信息吗?

或者执行paddle.utils.run_check() 看看paddle是否正确安装

sanbuphy commented 1 year ago

V100进行自动压缩ocr训练是足够显存的。

还有更多的报错信息吗?

或者执行paddle.utils.run_check() 看看paddle是否正确安装

你好,自动压缩ocr(识别)的训练也是足够的吗,那就好奇怪哇(没有更多报错信息,直接段错误或者killed),我是直接在aistudio上操作的,paddle应当是正确安装。如果需要的话,我可以准备一个可复现的jupyter notebook文档

zzjjay commented 1 year ago

自动压缩ocr(识别)的训练也是足够的吗

示例中 ppocr_det 和 ppocr_rec 都是在v100上完成的实验,显存都够用的。

这种段错误更像是paddle的问题,可以执行paddle.utils.run_check() 再检查下paddle安装是否正确

sanbuphy commented 1 year ago

自动压缩ocr(识别)的训练也是足够的吗

示例中 ppocr_det 和 ppocr_rec 都是在v100上完成的实验,显存都够用的。

这种段错误更像是paddle的问题,可以执行paddle.utils.run_check() 再检查下paddle安装是否正确

好的,我再去尝试一下

sanbuphy commented 1 year ago

自动压缩ocr(识别)的训练也是足够的吗

示例中 ppocr_det 和 ppocr_rec 都是在v100上完成的实验,显存都够用的。

这种段错误更像是paddle的问题,可以执行paddle.utils.run_check() 再检查下paddle安装是否正确

你好,我的情况不是显存问题,是内存的问题。内存不够用:(运行后就一直停留在这个界面,随后内存缓慢增长直到内存溢出) image

我的运行代码是:

!export CUDA_VISIBLE_DEVICES=0
!python run.py --save_dir='./save_quant_ppocr_rec/' --config_path='./configs/ppocrv3_rec_qat_dist.yaml'

其中配置文件的信息为:

Global:
  model_dir: ch_PP-OCRv3_rec_infer
  model_filename: inference.pdmodel
  params_filename: inference.pdiparams
  model_type: rec
  algorithm: SVTR
  character_dict_path: ./ppocr_keys_v1.txt
  max_text_length: &max_text_length 25
  use_space_char: true

Distillation:
  alpha: [1.0, 1.0]
  loss: ['skd', 'l2']
  node:
   - ['linear_43.tmp_1']
   - ['linear_43.tmp_1']

QuantAware:
  use_pact: true
  activation_bits: 8
  is_full_quantize: false
  onnx_format: True
  activation_quantize_type: moving_average_abs_max
  weight_quantize_type: channel_wise_abs_max
  not_quant_pattern:
  - skip_quant
  quantize_op_types:
  - conv2d
  - depthwise_conv2d
  weight_bits: 8

TrainConfig:
  epochs: 10
  eval_iter: 2000
  logging_iter: 100
  learning_rate: 
    type: CosineAnnealingDecay 
    learning_rate: 0.00005
  optimizer_builder:
    optimizer:
      type: Adam
    weight_decay: 5.0e-05

PostProcess:
  name: CTCLabelDecode 

Metric:
  name: RecMetric
  main_indicator: acc
  ignore_space: False 

Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/icdar2015/text_localization/
    ext_op_transform_idx: 1
    label_file_list:
    - ./train_data/icdar2015/text_localization/train_icdar2015_label.txt
    transforms:
    - DecodeImage:
        img_mode: BGR
        channel_first: false
    - RecConAug:
        prob: 0.5
        ext_data_num: 2
        image_shape: [48, 320, 3]
        max_text_length: *max_text_length
    - RecAug:
    - MultiLabelEncode:
    - RecResizeImg:
        image_shape: [3, 48, 320]
    - KeepKeys:
        keep_keys:
        - image
        - label_ctc
        - label_sar
        - length
        - valid_ratio
  loader:
    shuffle: true
    batch_size_per_card: 64
    drop_last: true
    num_workers: 4

Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/icdar2015/text_localization/
    label_file_list:
    - ./train_data/icdar2015/text_localization/test_icdar2015_label.txt
    transforms:
    - DecodeImage:
        img_mode: BGR
        channel_first: false
    - MultiLabelEncode:
    - RecResizeImg:
        image_shape: [3, 48, 320]
    - KeepKeys:
        keep_keys:
        - image
        - label_ctc
        - label_sar
        - length
        - valid_ratio
  loader:
    shuffle: false
    drop_last: false
    batch_size_per_card: 64
    num_workers: 4
zzjjay commented 1 year ago

把config中的num_workers设置为0再试试

sanbuphy commented 1 year ago

把config中的num_workers设置为0再试试

你好,设置为0的话也会有这个现象(64G内存直接溢出),然后也是没有任何的显示,就只有打印cuDNN version那一步,然后逐渐增长内存直至溢出(这个我试了好几个参数然后换本地也是如此,很奇怪

zzjjay commented 1 year ago

我在v100机器上无法复现这个问题。 要不你准备一个可复现的jupyter notebook文档吧,我复现看看。

sanbuphy commented 1 year ago

我在v100机器上无法复现这个问题。 要不你准备一个可复现的jupyter notebook文档吧,我复现看看。

好的,我直接共享一下我的那个aistudio的

sanbuphy commented 1 year ago

我在v100机器上无法复现这个问题。 要不你准备一个可复现的jupyter notebook文档吧,我复现看看。

Paddle版本是:'2.4.0' 数据集使用的是:https://aistudio.baidu.com/aistudio/datasetdetail/46088 (下载后放到对应地址,加一层文件夹名字叫train_data以至变成有./train_data/icdar2015的目录) jupyter notebook为:(在jupyter notebook执行了Paddleocr下载后直接把整个文件夹搬运到auto_compression文件夹内了) main.zip

运行后,会发现只打印到cudnn那一行(正常应该加载完了后开始加量化算子),随后内存不断缓慢增加,直到溢出被操作系统kill

sanbuphy commented 1 year ago

我在v100机器上无法复现这个问题。 要不你准备一个可复现的jupyter notebook文档吧,我复现看看。

hi 请问还需要我做哪些部分的补充吗,我可以再进行整理

zzjjay commented 1 year ago

定位到问题所在了。是数据集不匹配,导致程序卡在构建dataloader的地方。

数据集使用的是:https://aistudio.baidu.com/aistudio/datasetdetail/46088

这个数据集是icdar的检测数据集,而你跑的是PPOCR_rec 识别模型,所以出错了。需要使用识别数据集才可以。

从aistudio上搜了一个icdar识别数据集:https://aistudio.baidu.com/aistudio/datasetdetail/113821 经测试可用。 PPOCR也为该识别数据集准备好了可用的label files (不要使用icdar自带的label txt,路径略有差异),可参考文档准备。

sanbuphy commented 1 year ago

定位到问题所在了。是数据集不匹配,导致程序卡在构建dataloader的地方。

数据集使用的是:https://aistudio.baidu.com/aistudio/datasetdetail/46088

这个数据集是icdar的检测数据集,而你跑的是PPOCR_rec 识别模型,所以出错了。需要使用识别数据集才可以。

从aistudio上搜了一个icdar识别数据集:https://aistudio.baidu.com/aistudio/datasetdetail/113821 经测试可用。 PPOCR也为该识别数据集准备好了可用的label files (不要使用icdar自带的label txt,路径略有差异),可参考文档准备。

明白了,谢谢,挂载数据集的时候搞错了。。。 让我尝试以下