Closed NextGuido closed 3 years ago
大半个月前就有人开始反应的问题,其结果只能拿来跑icdar2015这个测试数据。
至今还没有好的解决办法吗?现在根本训练不起来,忧伤
我在win下,使用det_mv3_db.yml 预训练模型为:MobileNetV3_large_x0_5_pretrained.tar。 使用自己的数据集,在RTX2080下,图像尺寸归一化到3,640,640 train_batch_size_per_card 可以设为12。
@SixGodGG 我的是det_r50_vd_db模型,而且是在ubuntu系统下面,win还没有试过
那有可能
我也遇到这个问题了。貌似多进程会内存溢出,查了一遍也看不出来什么问题,期待官方吧。我这里有个暂时的解决办法就是把多进程关掉。
1.首先把 configs/det/det_db_icdar15_reader.yml 配置里面的 num_workers设置为1。
2.将ppocr/data/reader_main.py的75行
return paddle.reader.multiprocess_reader(readers, False)
修改为
return function(0)
。
这样就可以正常训练了,感觉速度也没有变慢,好像还快了一点点。。。
win下面 python的 multiprocessing不好用,所以PaddleOCR在 win 下面会自动关闭多进程,所以上面用win 的兄弟可以正常训练,用 AIStudio 和 Linux 的就只能修改代码关闭多进程了。
请问是否是在训练过程中eval时,遇到的内存溢出呢?可以尝试拉取最新的代码,最新代码中修改了起始eval的轮数,可能会对您有帮助。
@tink2123 好的,我这边有时间尝试一下,然后再和你反馈,感谢
@tink2123 我刚才重新跑了一下,还是用之前的数据,大概跑了15个epoch左右,还是会出现这个问题,训练配置如下:
Global:
algorithm: DB
use_gpu: true
epoch_num: 1200
log_smooth_window: 20
print_batch_step: 30
save_model_dir: ./output/det_db/
save_epoch_step: 100
eval_batch_step: 5000
train_batch_size_per_card: 14
test_batch_size_per_card: 14
image_shape: [3, 640, 640]
reader_yml: ./configs/det/det_db_chinese_reader.yml
pretrain_weights: ../../pretrain_models/ResNet50_vd_ssld_pretrained/
save_res_path: ./output/det_db/predicts_db.txt
checkpoints:
save_inference_dir:
我刚刚跑的时候,发现内存由40G增长到236G,感觉是不是哪里有什么泄露,还在观察中
我刚刚跑的时候,发现内存由40G增长到236G,感觉是不是哪里有什么泄露,还在观察中
你是怎么解决?我也遇到了,我的内存慢慢增长,知道超了。设置什么?可以控制内存呢?
@liyandongpy 你可试试我上面的方法,我测试过了没问题。而且只是修改 cpu 上reader 的线程数,不影响 GPU 训练。实测速度没有变慢。
@liyandongpy 你可试试我上面的方法,我测试过了没问题。而且只是修改 cpu 上reader 的线程数,不影响 GPU 训练。实测速度没有变慢。
谢谢。你训练的时候有没有infer?我基本上是在infer的时候内存爆的。
有的,内存正常。
今天发现了这个问题的原因,问题在与 reader_main.py的75行paddle.reader.multiprocess_reader(readers, False)这里。由于没有使用 pipe,使用的 queue,但是这里没有指定 queue_size,默认的值为1000。在显卡性能不够强,不能快速消耗的队列中的数据时,队列里的数据越来越多由于size 是1000,所以很容易就溢出了。百度开发人员用的应该都是多卡的设备,所以能队列不会积攒太多数据,所以他们没有这个问题。我今天试了一下,手动指定queue_size一个比较小的数值就不会溢出了。
@txyugood 改小点还是会有内存泄露,只是内存泄露速度慢了
@jesen8 你改到了多少?
@txyugood queue_size=20 num_workers: 4
@jesen8 确实比较小了,那是不是有其他的地方内存占的比较多。要不然你试试我上面的方法把多进程关掉试试。。
@txyugood 还是会的...
@jesen8 那你这个就不是多进程导致的,应该还有其他问题。。 跟我这个情况应该不太一样。还是看看数据读取的代码,看看异步读取的缓存什么的有没有问题。。
我发现只要是训练数据集图片数量过大且分辨率也较大就会溢出,感觉就是一直不停的读取图片到内存,用完之后没完全释放. 我追了下代码,想要手动释放一下,但没找到在哪里去释放合适
经长期观察,大数据集(上万),num_workers只要大于1就会泄露,等于1就没问题。问题应该出在多进程上。
同遇到这个问题,修改多进程代码,内存不会一直增加直到撑爆swap空间
可以试下最新代码 同时参考FAQ中,减小queue size试下
今天发现了这个问题的原因,问题在与 reader_main.py的75行paddle.reader.multiprocess_reader(readers, False)这里。由于没有使用 pipe,使用的 queue,但是这里没有指定 queue_size,默认的值为1000。在显卡性能不够强,不能快速消耗的队列中的数据时,队列里的数据越来越多由于size 是1000,所以很容易就溢出了。百度开发人员用的应该都是多卡的设备,所以能队列不会积攒太多数据,所以他们没有这个问题。我今天试了一下,手动指定queue_size一个比较小的数值就不会溢出了。
这个reader_main文件好像被移除了
这个问题在v2.1版本也出现, 有没有很好的解决办法?
我也遇到这个问题了。貌似多进程会内存溢出,查了一遍也看不出来什么问题,期待官方吧。我这里有个暂时的解决办法就是把多进程关掉。 1.首先把 configs/det/det_db_icdar15_reader.yml 配置里面的 num_workers设置为1。 2.将ppocr/data/reader_main.py的75行
return paddle.reader.multiprocess_reader(readers, False)
修改为return function(0)
。 这样就可以正常训练了,感觉速度也没有变慢,好像还快了一点点。。。win下面 python的 multiprocessing不好用,所以PaddleOCR在 win 下面会自动关闭多进程,所以上面用win 的兄弟可以正常训练,用 AIStudio 和 Linux 的就只能修改代码关闭多进程了。
现在没有ppocr/data/reader_main.py这个文件了
use_shared_memory = True, num_workers = 1还是不行啊,求助!
yml配置文件改为如下结构: Train: dataset: name: PGDataSet data_dir: PaddleOCR/train_data/total_text/train label_file_list: [PaddleOCR/train_data/total_text/train/train.txt] ratio_list: [1.0] transforms:
我在训练文本检测网络DB时候,经常会出现内存溢出的问题,如下: 其中,配置文件
det_r50_vd_db.yml
的内容如下:配置文件
det_db_chinese_reader.yml
的内容如下:训练数据集来自于https://tianchi.aliyun.com/competition/entrance/231685/information,手动划分数据,训练集和验证集的划分比例9:1(9043:1005)。我的batch_size从2~16都试过,一直会出现内存溢出的问题,num_workers=1的话,可以训练,但是训练的迭代速度就太慢了。请问,有什么好的解决方法吗?