facechain icon indicating copy to clipboard operation
facechain copied to clipboard

FACT版本疑似内存泄露

Open Pevernow opened this issue 1 year ago • 7 comments

QQ_1721984465923

搭配sd webui运行,仅使用sd1.5 fp16模型,占用内存高达50.5GB,远高于说明文档上的30G->20GB和同类产品Easyphoto 28GB

而且Windows下要怎么用jemalloc?

Pevernow avatar Jul 26 '24 09:07 Pevernow

RuntimeError: free_upper_bound + pytorch_used_bytes[device] <= device_total INTERNAL ASSERT FAILED at "..\c10\cuda\CUDAMallocAsyncAllocator.cpp":540, please report a bug to PyTorch.

开启使用共享显存的选项,在共享显存未满的情况下,仍报错 QQ_1721984800311

Pevernow avatar Jul 26 '24 09:07 Pevernow

似乎FACT版本并不比原版降低配置需求,甚至还更高了。

Pevernow avatar Jul 26 '24 09:07 Pevernow

内存泄漏源于diffusers中pipeline在CPU和GPU切换时的内存碎片,FACT版本由于包含inpainting和text-to-image的多个pipeline,为节省显存故而使用上述切换,该问题须使用jemalloc解决。

You-Cun avatar Jul 26 '24 09:07 You-Cun

想问一下,Windows下要怎么安装jemalloc?

Pevernow avatar Jul 26 '24 09:07 Pevernow

内存泄漏源于diffusers中pipeline在CPU和GPU切换时的内存碎片,FACT版本由于包含inpainting和text-to-image的多个pipeline,为节省显存故而使用上述切换,该问题须使用jemalloc解决。

即使是用APC inject注入jemalloc.dll也节省不了内存。

Pevernow avatar Jul 27 '24 05:07 Pevernow

翻了一下源码,启动时没必要把两个sdxl模型都加载上吧。 这俩才是吃内存的关键,而且导致启动速度极慢。 sdwebui还会预加载用户默认的模型,相当于同时载入了三个sd模型。 根据https://github.com/modelscope/facechain/issues/567 所说,理论上是可以支持别的模型的。 直接用sd webui预加载的模型不就好了。 easyphoto也可以复用sd webui的预加载模型。 @sunbaigui

Pevernow avatar Jul 27 '24 06:07 Pevernow

感谢您的建议。针对加载多个sd模型的问题,该设计可以避免后续用户切换模型时重新加载的时间,但的确导致内存和初始启动时间的增加,如有需要,可以添加用户手动切换并加载模型的版本。针对sd webui预加载模型复用的问题,当前版本的facechain由于涉及到对sd模型inference流程的修改,故无法直接支持sd webui模型的复用,须重构webui中推理步骤的底层代码,如有兴趣,可以考虑加入facechain开发群,召集开发者合作开发该功能。

You-Cun avatar Jul 29 '24 02:07 You-Cun