Python本地部署Stable Diffusion实现在纯CPU环境下的实现

最近在研究使用 Stable Diffusion 通过提示词生成图片的实现,因为电脑配置问题,反复尝试不同模型版本,效率上都不理想(主要是电脑太烂,只能纯CPU模式运行,大一点的模型,生成一张图片都要两三分钟,头大),最后找到一个相对满意的大佬基于SD1.5训练的,再被另一大佬导出为OpenVINO格式后,时间可控制在二十多秒生成一图。

下面就以该模型的使用作一个简单部署,不再花时间在模型研究上了,继续往下进行了,后续会以提示词为主,让SD能按照自己想要的效果生图。

一、环境搭建

1. 啰嗦几句

这个是大头,需要安装的依赖比较多,而且很多组件版本有要求,也是反复踩坑后得出的结论

好多是建议使用Conda进行环境隔离搭建的,我试了下,有好有坏吧,每次使用都要先cmd进入命令行模式,再conda activate xxx 激活环境,后续再在该环境操作,可能我没研究明白,但我还是感觉直接使用pythonvenv虚拟环境搭配VS Code更直观,同样是环境隔离,VS Code又可以直接识别当前目录下的虚拟环境,不用担心全局环境的污染

说了这么多,是为了有个思想准备,就是如果中间出问题了,知道从哪解决,有个思路,实际命令就几句话

2. 开始安装

按照官方建议,Python版本最好是3.10.6(低了很多组件不支持,高了有些函数被舍弃了,其中踩坑的还有一点是pip的版本也可能会导致出错,如果有碰到,就降级到24.0及以下)

bash 复制代码
# 建立虚拟环境,建议先设置国内加速源,不然速度感人 
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
python -m venv .venv
# 安装大模型依赖 
pip install optimum-intel openvino diffusers transformers

3. 模型下载

Dreamshaper 8 是一个基于 Stable Diffusion 技术的文本生成图像模型。该项目由 Lykon 开发,是在runwayml/stable-diffusion-v1-5模型基础上进行微调得到的。

使用下面的openvino版本加上lcm优化,可以实现在cpu上也能跑出理想成绩(相对而言)

至于模型怎么下载下来,我是先使用的 git clone 下载所有配置文件,然后再手动下载指定目录下的LFS大文件,再放置到相应目录。科学上网这块我也没找到更好的方法!

bash 复制代码
https://huggingface.co/yujiepan/dreamshaper-8-lcm-openvino

二、代码调试

1. 文生图实现

如果环境顺利搭建起来,那恭喜你,后面就可以开心的测试你想要的提示词了

python 复制代码
from optimum.intel.openvino.modeling_diffusion import OVStableDiffusionPipeline
import torch
import os

# 多线程加速(根据自己的需要设置相应的核心线程数 4 8 12 16等)
os.environ["OMP_NUM_THREADS"] = "4"
torch.set_num_threads(4)

# 模型加载(根据你本地模型存放的路径设置)
model_id = "./modles/dreamshaper-8-lcm-openvino"
pipe = OVStableDiffusionPipeline.from_pretrained(
    model_id, device='CPU')

# 输入你喜欢的提示词吧(只支持英文,英文不好的借助翻译软件实现)
# 正向提示词(你想的结果)
prompt = 'cute girl typing at a laptop, 4k, details'  
# 负向提示词(你不想出现的情况)
nprompt = 'worst quality, blurry, duplicate'  

# 开始图片生成(输入相应参数即可,因为是lcm优化,步数4-8即可,参考值1-3即可)
image = pipe(prompt=prompt,
             negative_prompt=nprompt,
             num_inference_steps=5,
             guidance_scale=1).images[0]
image.save('output.jpg')
# print(image) # <PIL.Image.Image image mode=RGB size=512x512 at 0x214080BE950>
image.show()

2. 提示词公式

描述人物,场景,环境,画幅视角,其他画面要素,定义高品质标准化,画风,其他特殊要求

更多玩法,还在探索中,后续共同探讨......

再放两张上述提示词生成的图片效果,有时相同提示词也可能出现意想不到的惊喜或惊吓,多生成几张,挑选满意的即可,做好心理准备......

相关推荐
Jonathan Star43 分钟前
MediaPipe 在Python中实现人体运动识别,最常用且高效的方案是结合**姿态估计**(提取人体关键点)和**动作分类**(识别具体运动)
开发语言·python·分类
山顶听风1 小时前
分页条初始化
python
NewsMash2 小时前
PyTorch之父发离职长文,告别Meta
人工智能·pytorch·python
硅农深芯2 小时前
如何使用ptqt5实现进度条的动态显示
开发语言·python·qt
程序员杰哥2 小时前
软件测试之压力测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
Elastic 中国社区官方博客2 小时前
使用 Mastra 和 Elasticsearch 构建具有语义回忆功能的知识 agent
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
今天没有盐2 小时前
Pandas完全指南:从Series到DataFrame,掌握数据分析核心技能
python·pycharm·编程语言
暴风鱼划水2 小时前
算法题(Python)数组篇 | 4.长度最小的子数组
python·算法·力扣
B站计算机毕业设计之家3 小时前
大数据python招聘数据分析预测系统 招聘数据平台 +爬虫+可视化 +django框架+vue框架 大数据技术✅
大数据·爬虫·python·机器学习·数据挖掘·数据分析