Stable Diffusion 迁移和部署

这篇具有很好参考价值的文章主要介绍了Stable Diffusion 迁移和部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


此实验需要最新的sdk实现模型的迁移,最终在1684X上进行推理。

代码地址为:
http://219.142.246.77:65000/sharing/sgZNjWcYK

1. 模型概述

Stable Diffusion 是一个文本生成图像的模型,它是基于 Diffusion 模型的一个变体,Diffusion 模型是一个基于随机游走的生成模型,它可以生成高质量的图像。Stable Diffusion 模型在 Diffusion 模型的基础上,通过引入稳定性约束,使得生成的图像更加稳定,更加逼近真实图像。

2. 模型架构

Stable Diffusion 模型的架构如下图所示:
Stable Diffusion 迁移和部署

模型由3部分组成:

  1. CLIP text encoder: 处理文本的输入,得到语义特征
  2. Text conditioned unet: 通过逆扩散过程,得到图像的特征
  3. VQ-VAE : 通过Auto-Encoder的方式,得到图像的重构以及图像的latent space vector

3. 模型迁移流程

3.1 前置准备

  1. 安装必要的库 pip install diffusers==0.2.4 transformers scipy ftfy
from diffusers import StableDiffusionPipeline

# get your token at https://huggingface.co/settings/tokens
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN)

prompt = "a photograph of an astronaut riding a horse" #输入文本
image = pipe(prompt)["sample"][0] #得到生成的图片

由此可以从huggingface下载预训练模型

Stable Diffusion 迁移和部署

原始仓库提供了多个版本

Stable Diffusion 迁移和部署

下载的模型会在.cache里面

Stable Diffusion 迁移和部署

stable diffusion 模型由4个模型构成,需要迁移4个模型:

3.2 CLIP text encoder

可以直接使用官网上的onnx模型进行推理:

直接迁移 CLIP 中的 TextEncoder 模型。
需要注意的是: TextEncoder 模型的输入是一个文本token序列,token是从0开始的整数,对应在设置模型的描述时添加数据类型的声明。

转换脚本是:

python3 -m bmneto --model=./text_encoder.onnx \
                  --outdir="./" \
                  --target="BM1684" \
                  --shapes="1,77" \
                  --opt=1 \
                  --cmp=false \
                  --net_name="text_encoder" \
                  --descs="[0,int64,0,49409]"

3.3 VQ-VAE (fp16)

VAE decoder onnx 无法使用bmneto转换, 因此本次采用的是 PyTorch 的方式:

import torch
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained("/mnt/sdb/wangyang.zuo/.cache/huggingface/diffusers/CompVis--stable-diffusion-v1-4.main.7c3034b58f838791fc1c581d435c452ea80af274")

def fn(input_tensor): # 构造输入函数 
    with torch.no_grad():
        return pipe.vae.decode(input_tensor)
    
jitmodel = torch.jit.trace(fn, torch.rand(1,4,64,64))
jitmodel.save("vae_decoder.pt")

转换命令


export BMCOMPILER_LAYER_DTYPE_MODE=auto
export GLOG_v=4
export BMCOMPILER_STAT_ERR=1

python3 -m bmnetp   --model=./vae_decoder.pt \
                    --outdir="./" \
                    --target="BM1684" \
                    --shapes="1,4,64,64" \
                    --net_name="vae_decoder" \
                    --opt=2 \
                    --cmp=false 

encoder 也可以采用类似的方式进行转换。

3.4 Text conditioned unet

这个模型较大,得到的jit模型有3.4G,首先需要注意的是,模型是多输入,其输入顺序如源码所示:

Stable Diffusion 迁移和部署

通过构造输入,得到jit模型, 其中各个输入信息如下:

timestep 1
latent_model_input.shape
(2, 4, 64, 64)
text_embeddings.shape
(2, 77, 768)

通过调试可以指导timestep的初始值为999, 因此timestep 为 torch.tensor(999).

查看源码可以看到,
Stable Diffusion 迁移和部署

继续查看源码,发现只有这一处出现了boardcast_to算子, 而且是在网络前半部分出现的,只于timestamp有关,其作用时将timestemp的维度改为输入的batch维度. 因此,此算子可以抽离出来,将其转化为预处理, 因此修改源码为:

Stable Diffusion 迁移和部署

另外U-Net模型的输出是一个dict,我们将其修改为输出tensor

Stable Diffusion 迁移和部署

通过trace得到jit模型,转换命令如下:

export BMCOMPILER_LAYER_DTYPE_MODE=auto
export GLOG_v=4
export BMCOMPILER_STAT_ERR=1
import bmnetp
## compile fp32 model
bmnetp.compile(
  model = "./unet/unet_jit_remove_pickle_error.pt",        ## Necessary
  outdir = "./compilation5",                 ## Necessary
  target = "BM1684X",              ## Necessary
  shapes = [[2,4,64,64], [2], [2,77,768]],  ## Necessary
  net_name = "unet2",              ## Necessary
  opt = 0,                        
  dyn = False,                    
  cmp = True,                     ## optional, if not set, default equal to True
  enable_profile = False,           ## optional, if not set, default equal to False
  desc="[1,int64,0,100]", # 额外添加的参数  
)

3.5 创建pipeline

使用 sophon sail 加载模型创建pipeline。
通过 python3 demo_with_bmodel.py --prompt "portrait photo of a asia old warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes, 50mm portrait photography, hard rim lighting photography–beta –ar 2:3 –beta –upbeta –upbeta, 4k" --num-inference-steps 32 进行测试。

可以得到如下图:

Stable Diffusion 迁移和部署

注意生成的图具有随机性,需要固定seed才能得到一摸一样的图。

3.6 web demo部署

运行 streamlit run demo_web.py 启动web服务,通过浏览器访问 http://localhost:8501 可以看到如下界面:

Stable Diffusion 迁移和部署

通过在输入框中输入文本描述,可以得到相应的图像,由于生成的图具有随机性,可能需要多次尝试才能得到一个比较好的结果。模型推理时间与输入文本长度无关,与 num_inference_steps 有关,其值越大,生成的图像越清晰,但是推理时间也越长。 注意根据diffusion原理,num_inference_steps不应太小,建议最少大于10.

4. 效果展示

Stable Diffusion 迁移和部署

5. 相关链接

样例开源仓库:https://github.com/sophon-ai-algo/examples

BM1684 BMNNSDK文档:https://developer.sophgo.com/site/index/document/6/all.html

编译工具用户开发手册: https://doc.sophgo.com/docs/2.7.0/docs_latest_release/nntc/html/index.html

量化工具用户开发手册:https://doc.sophgo.com/docs/2.7.0/docs_latest_release/calibration-tools/html/index.html

算能量化工具介绍及使用说明:https://www.bilibili.com/video/BV1DA4y1S75p?spm_id_from=333.999.0

官网视频教程:https://developer.sophgo.com/site/index/course/all/all.html

官网文档中心:https://developer.sophgo.com/site/index/document/all/all.html

官网下载中心:https://developer.sophgo.com/site/index/material/all/all.html

官网论坛:https://developer.sophgo.com/forum/view/43.html文章来源地址https://www.toymoban.com/news/detail-486292.html

到了这里,关于Stable Diffusion 迁移和部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stable-Diffusion部署web服务到公网,实现个人电脑远程访问

    在个人电脑上部署好了了Stable-Diffusion,用了一段时间后发现推理速度太慢。于是就想到部署服务器上使用,但这样有一个问题是每次使用web服务都得连远程桌面去控制,非常不方便,所以想能不能把Stable_Diffusion的web界面搬到公网上,直接在个人电脑上通过浏览器访问。 new

    2024年02月10日
    浏览(68)
  • stable-diffusion.cpp 一个文件解决stable diffusion所有环境,不需要python,stable-diffusion.dll动态库C#调用Demo

    stable-diffusion.cpp 一个文件解决stable-diffusion所有环境,不需要python,stable-diffusion.dll动态库C#调用Demo 目录 介绍 效果 Text To Image Image To Image Upscale 项目 代码 Native.cs SDHelper.cs MainForm.cs 下载  stable-diffusion.cpp 地址:https://github.com/leejet/stable-diffusion.cpp StableDiffusionSharp 地址:https://

    2024年04月14日
    浏览(48)
  • 如何本地部署基于stable-diffusion的AI绘画(jupyter,python实现,详细,附代码)

    自从Stable Diffusion 1.0模型发布以来,“AI文本图片生成”真正的变成普通人也能使用的技术。同时各种国内外AI绘图软件,也不断频繁更新,AI绘画的关注度也越来越高。 以下是本人自己生成出来的一些AI绘图(夹带私货木木枭^ ^) 对应的提示语prompt为: 那么如果我们想要 本

    2023年04月22日
    浏览(69)
  • Diffusion Transformer Family:关于Sora和Stable Diffusion 3你需要知道的一切

    转自知乎:叫我Alonzo就好了 近期,OpenAI和Stability两大AI巨头公司在同期分别发布了它们的新作品——Sora和Stable Diffusion 3。神奇的是,这两家公司的研究团队不约而同地采用了Diffusion Transformer这一架构。Diffusion Transformer这个词倒是并不陌生,回想在DiT[3]刚挂出arXiv的时候,当时

    2024年03月18日
    浏览(53)
  • 最简单粗暴的Stable Diffusion Webui本地部署教程!让每个人都能自己实现AI画图!

    先放两张自己画的图片镇楼。 ‍ ​ ​ ​ ​ ‍ 什么是Stable Diffusion Webui ​​ Stable Diffusion WebUI是 Stable Diffusion 的浏览器界面,Stable Diffusion 是一种 AI 模型,可以根据文本提示生成图像或用文本提示修改现有图像。 Stable Diffusion Web UI 是探索 Stable Diffusion 可能性的好方法,只需

    2024年01月16日
    浏览(60)
  • 【深度学习】风格迁移,转换,Stable Diffusion,FreeStyle : Free Lunch for Text-guided Style Transfer using Diffusion

    论文:https://arxiv.org/abs/2401.15636 代码:https://github.com/FreeStyleFreeLunch/FreeStyle 介绍 生成扩散模型的快速发展极大地推进了风格迁移领域的发展。然而,大多数当前基于扩散模型的风格转移方法通常涉及缓慢的迭代优化过程,例如模型微调和风格概念的文本反转。在本文中,我们

    2024年04月13日
    浏览(39)
  • Stable Diffusion InstantID 炸裂!只需要一张图就可以换脸 | 详细教程

    最近AI换脸又火起来了, 小红书 InstantX 团队发布了一款最新的换脸技术 InstantID 和之前的主流的训练 lora 换脸不同,InstantID 只需要上传一张图就可以实现换脸以及姿势替换! InstantID 主要分为了三部分 ID Embedding:通过预训练的面部识别模型,将语义人脸特征提取为 Face Embed

    2024年02月20日
    浏览(43)
  • 【Stable Diffusion】Stable Diffusion免安装在线部署教程

    一、开启Google Colab网址 官网:https://colab.research.google.com/ 点击添加代码: 二、执行如下代码指令 点击执行按钮 会自动安装相关的套件、模型,然后等待运行完 注意:如果发生如下错误,该如何解决 RuntimeError:No CUDA GPUs are available 解决办法: 1、点击右上角点选硬件资源 2、

    2024年02月04日
    浏览(49)
  • Stable Diffusion 本地部署

    注意:如果没有显卡或显卡性能较弱的同学们不要尝试,不然到最后也还是不行!当然这些同学们可以去(免费,效果稍逊) Stable Diffusion - a Hugging Face Space by stabilityai Discover amazing ML apps made by the community https://huggingface.co/spaces/stabilityai/stable-diffusion 或者(收费,但是效果更好) D

    2023年04月14日
    浏览(69)
  • Stable Diffusion本地部署

    网络很重要,安装会因为超时失败,我是失败了很多次才成功 Windows10,N 卡(我的是古早的1070) 安装conda,也可以安装miniconda 进入stable-diffusion-webui目录 创建conda 虚拟环境 激活conda 环境 安装依赖 安装其他依赖 安装好后终端会显示服务以运行 直接访问域名,以上步骤安装顺利

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包