PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
44.24k stars 7.82k forks source link

进行PaddleOCR识别训练时,内存不断泄漏,最终导致各种错误终止 #3235

Closed swagzhang closed 2 years ago

swagzhang commented 3 years ago

情况一: num_workers设置超过1 在这种情况下,训练到一定次数后,突然训练进程就会被kill, 就只有被killed提示,无多余报错 image 情况二:num_workers设置为1 这种情况下不会直接被kill, 而是随着训练的进行,内存会被不断占用直至溢出报错,在过往的issue中看到要在reader_main.py中关掉多线程,但是当前最新版本已经没有这个文件了 这种情况会有不同错误,一个是之前说要alloc mem然后失败,还有一种是说shared memory不够。。。 image 麻烦官方给予解决一下,感谢

swagzhang commented 3 years ago

image 又出现了这个报错,说打开了过多的file, 我一脸懵逼!

LDOUBLEV commented 3 years ago

首先清理你共享内存目录 /dev/shm

使用Dataloader 开启use_shared_memory 需要保证/dev/shm有8G以上的内存

如果遇到内存问题,建议把used_shared_memory 设置为False: https://github.com/PaddlePaddle/PaddleOCR/blob/2f4091e7163cf28f08b9e8ddc6772f6f89b72c60/configs/det/det_mv3_db.yml#L103

swagzhang commented 3 years ago

我按照你说的在loader下面加了use_shared_memory:Fasle image 但是,我训练num_workers > 1还是在100来个epoch后莫名其妙的被killed,没有额外报错 image 我现在跑一下num_workers 为1的情况,我估计还是会因为内存溢出或者too many open files 然后挂掉。。。

nuaa030710312 commented 3 years ago

官方什么时候能解决

swagzhang commented 3 years ago

我按照你说的在loader下面加了use_shared_memory:Fasle image 但是,我训练num_workers > 1还是在100来个epoch后莫名其妙的被killed,没有额外报错 image 我现在跑一下num_workers 为1的情况,我估计还是会因为内存溢出或者too many open files 然后挂掉。。。

image 跑完了,不出所料,报了一个OSError: [Errno 24] Too many open files的错误,这个要怎么办,求助

swagzhang commented 3 years ago

image 我把num_workers设置成0,然后batch size调到128,慢慢就会memory溢出了。。。 `Global: use_gpu: True epoch_num: 5000 log_smooth_window: 20 print_batch_step: 10 save_model_dir: ./output/rec_en_number_lite save_epoch_step: 10

evaluation is run every 5000 iterations after the 4000th iteration

eval_batch_step: [0, 200]

if pretrained_model is saved in static mode, load_static_weights must set to True

cal_metric_during_train: True pretrained_model: ./output/rec_en_number_lite/latest checkpoints: save_inference_dir: use_visualdl: False infer_img:

for data or label process

character_dict_path: ./ppocr/utils/en_dict.txt character_type: EN max_text_length: 250 infer_mode: False use_space_char: True

Optimizer: name: Adam beta1: 0.9 beta2: 0.999 lr: name: Cosine learning_rate: 0.001 regularizer: name: 'L2' factor: 0.00001

Architecture: model_type: rec algorithm: CRNN Transform: Backbone: name: MobileNetV3 scale: 0.5 model_name: small small_stride: [1, 2, 2, 2] Neck: name: SequenceEncoder encoder_type: rnn hidden_size: 48 Head: name: CTCHead fc_decay: 0.00001

Loss: name: CTCLoss

PostProcess: name: CTCLabelDecode

Metric: name: RecMetric main_indicator: acc

Train: dataset: name: SimpleDataSet data_dir: ./train_data/ label_file_list: ["./train_data/train_list.txt"] transforms:

Eval: dataset: name: SimpleDataSet data_dir: ./train_data/ label_file_list: ["./train_data/eval_list.txt"] transforms:

LDOUBLEV commented 3 years ago

我把num_workers设置成0,然后batch size调到128,慢慢就会memory溢出了。。。

/dev/shm 目录下还有多少空间

swagzhang commented 3 years ago

image 有8个G... 但我感觉跟shared mem没关系吧,是我内存不断被侵蚀。。。说明代码里被alloc的memory没有在一次epoch后释放掉,有地方泄漏了吧,然后慢慢越攒越多直至崩溃? image 我16G的内存开始跑的时候差不多占用4,5G然后慢慢就满了。。

swagzhang commented 3 years ago

image 跑了70个epoch就增加了2g内存 image 又增加了2g内存,而shm没有任何增加 image 快满了。。 image 我这样短短续续训练了好几天,才估计只有3,4千个epoch。。。太累了,有没有办法不断掉的,让我顺利训练完。。。

swagzhang commented 3 years ago

image 最后就是内存跑没了。。。这我换成32G的也不够啊。。。迟早也会溢出如果内存不断泄漏的话

neverstoplearn commented 3 years ago

遇到同样的问题

neverstoplearn commented 3 years ago

请问有解决方案吗?

MissPenguin commented 3 years ago

拉取最新dygraph分支代码试试呢

zjj421 commented 3 years ago

Release/2.1, 机器内存500多G,设置的共享内存250多G,同样训练文本检测模型ch_det_res18_db_v2.0.yml,每隔一段时间训练程序就会被killed,没有任何报错,官方可以在源码里的try...exception语句内打印出具体的报错信息吗?

qiujian1232 commented 3 years ago

同这个问题,内存一直被侵占,应该在哪里改才能边训练边释放内存呢?

lxhmark7 commented 3 years ago

遇到同样的问题,服务器上训练文本识别算法,运行会莫名的killed,没有找到原因。但使用docker发现可以,建议使用docker运行试试看。

paddle-bot-old[bot] commented 2 years ago

Since you haven\'t replied for more than 3 months, we have closed this issue/pr. If the problem is not solved or there is a follow-up one, please reopen it at any time and we will continue to follow up. It is recommended to pull and try the latest code first. 由于您超过三个月未回复,我们将关闭这个issue/pr。 若问题未解决或有后续问题,请随时重新打开(建议先拉取最新代码进行尝试),我们会继续跟进。