stable diffusion内存溢出

想问一下有没有什么解决stable diffusion内存溢出的问题

  • 请看👉 :Stable diffusion安装经历踩坑
  • 除此之外, 这篇博客: Stable diffusion安装经历踩坑中的 问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 第一个问题官网是有说明的,但就是这个下载地址藏得很深不好找。
    在这里插入图片描述
    我也是找了一会才找到https://huggingface.co/CompVis/stable-diffusion-v-1-4-original,把这个sd-v1-4.ckpt文件下载下来(随便哪个都行),大概四个G。
    在这里插入图片描述

    下载模型文件放置到这个文件夹下,就是上面官方说明的那个位置,命名成model.ckpt。
    在这里插入图片描述
    运行下面的代码,不出意外会报错。

    python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
    

    在这里插入图片描述

    问题好像是原作者修改了这个库,将你的quantize.py(报错的信息里包含文件所在的绝对路径)文件替换成这个网址的文件
    https://github.com/CompVis/taming-transformers/blob/master/taming/modules/vqvae/quantize.py
    在这里插入图片描述

    再运行一次又报错
    在这里插入图片描述
    我只是12g的3060,看来这不是一般人能玩得起的-_-
    !!!!!!!!!!!!!!!!
    现在有一个简单的办法了,感谢数学系之耻的建议,直接降精度就可以释放显存了。
    !!!!!!!!!!!!!!!!
    如下修改txt2img.py文件第244行
    在这里插入图片描述
    效果 -->
    在这里插入图片描述

    或者接下去看比较复杂的方法!
    不知道需要多大的内存才可以,网上找到方法是用优化的库。网上还有一种办法说注释掉什么安全检查的我试了没有变化。
    https://github.com/basujindal/stable-diffusion
    下载完后在新的库上也是需要安装一些环境,在新的文件夹下运行下面的安装代码

    pip install -e .
    

    在这里插入图片描述
    优化的库代码放在optimizedSD文件夹下,也保留了之前的源代码,不要搞错了。
    重新安装一下这个优化库的环境,将ckpt放到对应的位置。

    python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style image of a Tesla car reflection in rain" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 5 --ddim_steps 50
    

    运行后报这个错。
    在这里插入图片描述

    查了一下,好像是最近优化的作者也换了一个库
    https://github.com/basujindal/stable-diffusion/issues/175
    用下面的办法就能解决了。
    在这里插入图片描述

    pip install git+https://github.com/crowsonkb/k-diffusion.git
    

    然后打开编辑optimizedSD/ddpm.py文件,将from samplers…改成上面图片的三个from k_diffusion…
    然后贫穷的显卡的电脑也就可以跑了,不说了要努力搬砖买24g的显卡了。
    实测效果 -->
    在这里插入图片描述
    在这里插入图片描述

方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”


Stable diffusion是一种分子动力学模拟软件,内存溢出问题可能是由于模拟系统过大或者模拟时间过长导致的。下面是一些解决内存溢出问题的建议:

  1. 减小模拟系统规模或者缩短模拟时间。内存溢出问题通常是由于需要过多的内存来存储计算结果,如果减小模拟系统规模或者缩短模拟时间可以降低内存需求,有可能解决内存溢出问题。

  2. 增加内存。如果您的计算机配置可以支持更多的内存,可以考虑增加内存。

  3. 优化代码。如果您有编程经验,可以尝试优化代码,以减少内存需求。例如,可以使用更高效的算法或者数据结构。

  4. 使用并行计算。分子动力学模拟通常是高度并行的,可以使用多线程或者分布式计算来减少单个计算节点的内存需求。