Optimized Stable Diffusion 是 Stable Diffusion 的一个修改版本,旨在通过牺牲推理速度来降低 GPU 显存占用。该项目由 basujindal 维护,代码托管在 GitHub 上。
用途
该项目的主要用途是让显存较小的 GPU 也能运行 Stable Diffusion 模型,进行文本生成图像(txt2img)、图像生成图像(img2img)和图像修复(inpainting)等任务。
主要能力
- 降低显存占用:通过将模型分片、分块计算注意力等优化,显著减少显存需求。例如,在 RTX 2060 上,img2img 生成 512x512 图像仅需不到 2.4GB 显存,耗时不到 20 秒;txt2img 同样显存下耗时不到 24 秒。
- 支持多种任务:包括 txt2img、img2img 和 inpainting。
- 提供命令行和 Gradio 图形界面:用户可以通过命令行参数或 Gradio 界面操作。
- 支持种子复现:通过指定种子可以复现之前生成的图像。
- 支持批量生成:可以一次生成多张图像,通过调整批量大小平衡显存和速度。
- 支持混合精度:默认启用混合精度,也可使用全精度模式。
- 支持加权提示词:可以对提示词中的词语赋予不同权重。
- 支持多种采样器:txt2img 支持多种采样器。
使用方式
- 安装:可以克隆整个仓库并按照原始 Stable Diffusion 的安装步骤进行(主要是创建 conda 环境并将权重文件放在指定位置)。如果已经克隆了原始仓库,只需下载 optimizedSD 文件夹并复制到原始仓库中即可。
- Docker 部署:安装 Docker、Docker Compose 插件和 NVIDIA Container Toolkit,克隆仓库,将模型文件放入指定目录,然后运行 docker compose up --build。
- 命令行使用:例如,生成 10 张 512x512 图像的命令:python optimizedSD/optimized_img2img.py --prompt "Austrian alps" --init-img ~/sketch-mountains-input.jpg --strength 0.8 --n_iter 2 --n_samples 5 --H 512 --W 512。
- Gradio 界面:安装 gradio 后,运行 python optimizedSD/img2img_gradio.py、python optimizedSD/txt2img_gradio.py 或 python optimizedSD/inpaint_gradio.py 启动相应界面。
适用场景
- 显存有限的 GPU 用户,如 GTX 系列或 RTX 2060 等。
- 需要快速生成图像但显存不足的场景。
- 需要图像修复功能的用户。
限制
- 推理速度较慢:为了降低显存,牺牲了速度。
- 图像质量可能受影响:inpainting 结果尚不完美,需要通过提示词加权、提示词工程和调整 --strength 参数来改善。
- 兼容性问题:GTX 系列显卡可能不支持混合精度,导致输出绿色图像,需使用 --precision full 参数,但会增加显存占用。
- 最大尺寸限制:在 6GB GPU 上最大支持约 1152x1088 的图像。
- 需要自行准备模型权重文件。