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)
Apache License 2.0
38.98k stars 7.31k forks source link

显存占用远大于模型大小 #12022

Closed charliedream1 closed 1 week ago

charliedream1 commented 2 weeks ago

请提供下述完整信息以便快速定位问题/Please provide the following information to quickly locate the problem

问题:

  1. 看着下载的模型也只有20M,但显存占用在810M,为什么这么大呢?是一次占用了最大可能的大小?能否设置?
  2. 多路并发的时候,怎么共享权重呢?目前我并发了4个,就得占4个810M的显存,怎么样让4个线程共享同一个模型参数?
UserWangZz commented 2 weeks ago

显存的占用不仅仅取决于模型的大小,还与模型结构、批量大小等有关。

zhanghengjiayou commented 2 weeks ago

显存的占用不仅仅取决于模型的大小,还与模型结构、批量大小等有关。

训练ppocrV4的rec(hgent)和det(teacher)需要多大显存啊,老师,btach size较小的情况下

charliedream1 commented 2 weeks ago

为什么cpu内存占用也会增加好几个G。按理说,模型不是全都加载到GPU了吗?

zhanghengjiayou commented 2 weeks ago

为什么cpu内存占用也会增加好几个G。按理说,模型不是全都加载到GPU了吗?

读取图像是从内存到显存的,跟bs有关

charliedream1 commented 2 weeks ago

就是在不跑的时候,也会占用好几个G. 从模型初始化到就绪,发现一直占着好几G的cpu内存. GPU占810M,CPU内存占2个G左右。从启动以后就一直占着,不跑也一直占着。就算跑,一副图也不会占这么大把?

UserWangZz commented 2 weeks ago

显存的占用不仅仅取决于模型的大小,还与模型结构、批量大小等有关。

训练ppocrV4的rec(hgent)和det(teacher)需要多大显存啊,老师,btach size较小的情况下

微调det db++的情况下batch size 16的情况下 显存大概消耗 18G, 这两个模型可以根据机器情况测一下

charliedream1 commented 2 weeks ago

我可能忘说了,是在推理的情况下,不是在训练的情况下

zhanghengjiayou commented 2 weeks ago

显存的占用不仅仅取决于模型的大小,还与模型结构、批量大小等有关。

训练ppocrV4的rec(hgent)和det(teacher)需要多大显存啊,老师,btach size较小的情况下

微调det db++的情况下batch size 16的情况下 显存大概消耗 18G, 这两个模型可以根据机器情况测一下

谢谢老师

zhanghengjiayou commented 2 weeks ago

我可能忘说了,是在推理的情况下,不是在训练的情况下

我这边也很大,你可以用异步并发的方式,起一个服务调一个卡就可以了

charliedream1 commented 2 weeks ago

就是为什么CPU内存占用会这么多,跑GPU不是应该全都加载到GPU上了吗?是什么导致CPU占用?

UserWangZz commented 2 weeks ago

就是在不跑的时候,也会占用好几个G. 从模型初始化到就绪,发现一直占着好几G的cpu内存. GPU占810M,CPU内存占2个G左右。从启动以后就一直占着,不跑也一直占着。就算跑,一副图也不会占这么大把?

框架的加载,数据的预处理后处理等等都是在CPU阶段执行的,因此会占用比较大的内存,显存占用是正常的,输入图像大小的不同,也会导致推理阶段显存使用的不同。

charliedream1 commented 2 weeks ago

但没有跑推理时,也一直占用着,主要是框架的一些占用吗?

tink2123 commented 2 weeks ago

框架会自动分配一块显存用于推理,这块显存 / 内存被框架占有了,在未预测时候不会给系统,看起来占用多,但是下次推理会更快。

只有在退出进程后才会完全释放。

charliedream1 commented 2 weeks ago

好,谢谢