欢迎 Stable Diffusion 3.5 Large 加入 Diffusers

作为Stable Diffusion 3的改进版本,Stable Diffusion 3.5 如今已在 Hugging Face Hub 中可用,并可以直接使用 🧨 Diffusers 中的代码运行。

https://hf.co/blog/sd3

本次发布包含两套模型参数:

https://hf.co/collections/stabilityai/stable-diffusion-35-671785cca799084f71fa2838

  • 一个大型的模型 (large,8B)

  • 该模型经过时间步蒸馏的版本,仅需几步推理即可生成图片

在本文中,我们将介绍如何在 Diffusers 中使用 Stable Diffusion 3.5 (SD3.5),涵盖推理和训练两方面内容。

模型结构改进

对于 SD3.5-large 使用的 transformer 模型,其结构基本和 SD3-medium 里的相同,但有以下更改:

  • QK normalization: 对于训练大型的 Transformer 模型,使用QK normalization已经成为标准做法,所以 SD3.5-large 也不例外。https://research.google/blog/scaling-vision-transformers-to-22-billion-parameters/

  • 双注意力层: 在 MMDiT 结构中,文本和图像两个模态都在使用同一个注意力层; 而 SD3.5-large 则使用了两个注意力层。

除此之外,文本编码器 (text encoder)、图像的变分自编码器 (VAE) 以及噪声调度器 (noise scheduler) 均和 SD3-medium 保持一致。如果对 SD3 感兴趣,可以参考这篇论文。

https://arxiv.org/abs/2403.03206

在 Diffusers 中使用 SD3.5

首先你需要确保安装的 Diffusers 是最新版本:

pip install -U diffusers

由于模型存在访问限制,你还需要到Hugging Face 上 Stable Diffusion 3.5 Large 的页面填写表格并同意相关条款。完成后你还需要登陆账号,才能访问到模型。使用如下方法登陆 Hugging Face 账号:

https://hf.co/stabilityai/stable-diffusion-3.5-large

huggingface-cli login

下列代码将下载 SD3.5 的 8B 模型。下载的模型使用 torch.bfloat16 精度,这是 Stability AI 的原版格式,也推荐使用该精度进行推理。

import torch
from diffusers import StableDiffusion3Pipelinepipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3.5-large", torch_dtype=torch.bfloat16
).to("cuda")image = pipe(prompt="a photo of a cat holding a sign that says hello world",negative_prompt="",num_inference_steps=40,height=1024,width=1024,guidance_scale=4.5,
).images[0]image.save("sd3_hello_world.png")
1c3c6c3a47f43f5445b0080fbd90b90c.png
hello_world_cat

本次发布也包含了一个 “时间步蒸馏” 的模型,该模型推理时无需 classifier-free guidance,可在短短几步推理内生成图片 (通常是 4 到 8 步)。

import torch
from diffusers import StableDiffusion3Pipelinepipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3.5-large-turbo", torch_dtype=torch.bfloat16
).to("cuda")image = pipe(prompt="a photo of a cat holding a sign that says hello world",num_inference_steps=4,height=1024,width=1024,guidance_scale=1.0,
).images[0]image.save("sd3_hello_world.png")
bc21e5a47693b8c967cba0f9c9501cc1.png
hello_world_cat_2

此外,在SD3 博客和官方 Diffusers 文档中出现过的优化策略在 SD3.5 中都可使用。这些策略都对推理时显存优化做了大量工作。由于 SD3.5-large 是一个比 SD3-medium 大得多的模型,显存优化对于消费级场景下的使用显得尤为重要。

  • SD3 博客https://hf.co/blog/zh/sd3

  • 官方 Diffusers 文档https://hf.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_3

在推理过程中使用量化策略

Diffusers 原生支持使用bitsandbytes进行量化,这可以进一步降低显存使用。

https://github.com/bitsandbytes-foundation/bitsandbytes

首先,我们需要安装必要的库:

pip install -Uq git+https://github.com/huggingface/transformers@main
pip install -Uq bitsandbytes

接下来加载“NF4”精度的模型:

https://hf.co/blog/4bit-transformers-bitsandbytes

from diffusers import BitsAndBytesConfig, SD3Transformer2DModel
import torchmodel_id = "stabilityai/stable-diffusion-3.5-large"
nf4_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_quant_type="nf4",bnb_4bit_compute_dtype=torch.bfloat16
)
model_nf4 = SD3Transformer2DModel.from_pretrained(model_id,subfolder="transformer",quantization_config=nf4_config,torch_dtype=torch.bfloat16
)

然后我们就能进行推理了:

from diffusers import StableDiffusion3Pipelinepipeline = StableDiffusion3Pipeline.from_pretrained(model_id,transformer=model_nf4,torch_dtype=torch.bfloat16
)
pipeline.enable_model_cpu_offload()prompt = "A whimsical and creative image depicting a hybrid creature that is a mix of a waffle and a hippopotamus, basking in a river of melted butter amidst a breakfast-themed landscape. It features the distinctive, bulky body shape of a hippo. However, instead of the usual grey skin, the creature's body resembles a golden-brown, crispy waffle fresh off the griddle. The skin is textured with the familiar grid pattern of a waffle, each square filled with a glistening sheen of syrup. The environment combines the natural habitat of a hippo with elements of a breakfast table setting, a river of warm, melted butter, with oversized utensils or plates peeking out from the lush, pancake-like foliage in the background, a towering pepper mill standing in for a tree. As the sun rises in this fantastical world, it casts a warm, buttery glow over the scene. The creature, content in its butter river, lets out a yawn. Nearby, a flock of birds take flight"
image = pipeline(prompt=prompt,negative_prompt="",num_inference_steps=28,guidance_scale=4.5,max_sequence_length=512,
).images[0]
image.save("whimsical.png")
0808a8fb8ab618ea0a6e02561603b2fd.png
happy_hippo

如果你想调节 BitsAndBytesConfig 中其它配置,你可以在这里参考官方文档。

https://hf.co/docs/diffusers/main/en/quantization/bitsandbytes

直接载入相同 nf4_config 配置的已量化模型也是可以的,这对 RAM 较低的机器来说非常实用,读者可以在这里的 Colab Notebook来获取完整示例。

https://colab.research.google.com/drive/1nK5hOCPY3RoGi0yqddscGdKvo1r-rHqE?usp=sharing

在 SD3.5-large 上使用量化策略训练 LoRA

借助 bitsandbytespeft ,我们可以在消费级显卡 (24GB 显存) 上微调像 SD3.5 这样的大模型。我们提供的SD3 训练脚本可以在这里用来训练 LoRA,使用如下命令即可:

https://hf.co/blog/zh/sd3#使用-dreambooth-和-lora-进行微调

accelerate launch train_dreambooth_lora_sd3.py \--pretrained_model_name_or_path="stabilityai/stable-diffusion-3.5-large" \--dataset_name="Norod78/Yarn-art-style" \--output_dir="yart_art_sd3-5_lora" \--mixed_precision="bf16" \--instance_prompt="Frog, yarn art style" \--caption_column="text"\--resolution=768 \--train_batch_size=1 \--gradient_accumulation_steps=1 \--learning_rate=4e-4 \--report_to="wandb" \--lr_scheduler="constant" \--lr_warmup_steps=0 \--max_train_steps=700 \--rank=16 \--seed="0" \--push_to_hub

但如果想在训练中加入量化,还需要调整一些地方,这包括以下几个大概方向:

  • 在初始化代码中的 transformer 时,加上量化配置,或者直接加载量化过的模型。

  • 然后使用 peft 中的 prepare_model_for_kbit_training() 函数对模型进行准备操作。

  • 其它步骤和原代码保持一致即可 (感谢 peftbitsandbytes 的强力支持)。

读者可参考这里的完整示例。

https://gist.github.com/sayakpaul/05afd428bc089b47af7c016e42004527

使用 single-file 方法加载 SD3.5 的 Transformer 模型

Stable Diffusion 3.5 的 transformer 模型还可以使用 Stability AI 发布的原生参数文件来进行初始化 。这里需要使用 from_single_file 方法:

import torch
from diffusers import SD3Transformer2DModel, StableDiffusion3Pipelinetransformer = SD3Transformer2DModel.from_single_file("https://huggingface.co/stabilityai/stable-diffusion-3.5-large-turbo/blob/main/sd3.5_large.safetensors",torch_dtype=torch.bfloat16,
)
pipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3.5-large",transformer=transformer,torch_dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
image = pipe("a cat holding a sign that says hello world").images[0]
image.save("sd35.png")

重要链接

  • SD3.5-large 在 Hugging Face Hub 上的模型集合https://hf.co/collections/stabilityai/stable-diffusion-35-671785cca799084f71fa2838

  • Diffusers 中 SD3.5 的官方文档https://hf.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_3

  • 用来运行 SD3.5 量化推理的Colab Notebookhttps://colab.research.google.com/drive/1nK5hOCPY3RoGi0yqddscGdKvo1r-rHqE?usp=sharing

  • LoRA训练代码https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/README_sd3.md

  • Stable Diffusion 3官方论文https://arxiv.org/abs/2403.03206

  • Stable Diffusion 3中文博客https://hf.co/blog/zh/sd3

声明: 感谢Daniel Frank为本博客提供了封面图,感谢Pedro Cuenca和Tom Aarsen对本文的审校。

  • Daniel Frankhttps://www.pexels.com/@fr3nks/

  • Pedro Cuencahttps://hf.co/pcuenq

  • Tom Aarsenhttps://hf.co/tomaarsen


英文原文:https://hf.co/blog/sd3-5

原文作者: YiYi Xu, Aryan V S, Dhruv Nair, Sayak Paul, Linoy Tsaban, Apolinário from multimodal AI art, Alvaro Somoza, Aritra Roy Gosthipaty

译者: hugging-hoi2022

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10491.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Docker入门系列——DockerFile的使用

前面了解了Docker的基本概念,今天来认识一下DockerFile。 Dockerfile 是一个文本文件,包含一系列指令来组装 Docker 镜像。每个指令执行一个特定动作,例如安装包、复制文件或定义启动命令。正确使用 Dockerfile 指令对于构建高效容器至关重要…

2-146 基于matlab的双摆杆系统建模分析

基于matlab的双摆杆系统建模分析。连接方式为铰接,两杆均视为均质杆,动态输出摆杆末端轨迹。程序已调通,可直接运行。 下载源程序请点链接:2-146 基于matlab的双摆杆系统建模分析

基于java+SpringBoot+Vue的美发门店管理系统设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

基于vue框架的的楼盘销售管理系统6n60a(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 用户,房源类型,员工,房源信息,购房预订,购房合同 开题报告内容 基于Vue框架的楼盘销售管理系统开题报告 一、研究背景 随着房地产市场的蓬勃发展,楼盘销售行业的竞争日益激烈。传统的销售管理方式依赖于人工记录和纸质文档,效率低下…

值得一看的小模型技术全面总结及RAG文档处理及切分小模型工具

、 本文还是来看看RAG,不过是从另一个角度,从小模型(其实这个小不太好说,7B或者以下?)角度; 因此,讲两件事,一个是回顾下小模型,推荐一个写的很好的小模型进展技术总结综述&#xf…

大模型好书案例——《BERT基础教程:Transformer大模型实战》(附PDF)

《BERT基础教程:Transformer大模型实战》是一本关于自然语言处理(NLP)的书籍,专注于谷歌公司开发的BERT模型。这本书由印度作者苏达哈尔桑拉维昌迪兰(Sudharsan Ravichandiran)撰写,周参翻译。 …

关于Markdown的一点疑问,为什么很多人说markdown比word好用?

markdown和word压根不是一类工具,不存在谁比谁好,只是应用场景不一样。 你写博客、写readme肯定得markdown,但写合同、写简历肯定word更合适。 markdown和word类似邮箱和微信的关系,这两者都可以通信,但微信因为功能…

ASR 点屏

ASR翱捷科技 ASR kernel 5.10 android14 ASR EVB平台 以gc7202 jd9365这两块屏为例 新旧DTBO点屏配置是有区别的,主要差异是体现在 asr\kernel\u-boot\board\asr\dove\dovc.c这个文件上 旧DTBO: 新DTBO: 目前我们的代码已经合入新的DTBO 以前在没有合入asr新的DTBO时点亮…

Ubuntu24.04网络异常与应对方案记录

PS: 参加过408改卷的ZJU ghsongzju.edu.cn 开启嘲讽: 你们知道408有多简单吗,操作系统真实水平自己知道就行~~ Requested credits of master in UWSC30,in ZJU24,domestic master is too simple dmesg dmesg 是一个用…

【Zynq FPGA】基于 Zynq FPGA 的雷龙 SD NAND 测试

对于芯片正常读写的测试结果,还是很让人满意的,芯片的价格也很合理。并且LGA-8封装更适合无卡槽的嵌入式开发板设计,在一定的应用领域有着简化硬件设计、减小硬件面积的功能。贴上测试工程的链接,还迎复现实验: https://gitee.com…

【PyTorch][chapter31][transformer-5] MQA,CQA, GQA

前言: Trans 翻译 《Variants of Multi-head attention: Multi-query (MQA) and Grouped-query attention (GQA) 为例兼顾性能,和模型的效率Google 又陆续提出了三种注意力架构. 当一个模型训练过度时,它会过度拟合或记忆训练数据,从而降低…

数据结构之排序--选择排序详解

选择排序 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 直接选择排序: 在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素 若它不是这组元…

spring组件介绍

1. Spring Core(Spring核心): • BeanFactory:Spring IoC容器的基础接口,提供了配置框架和基本的功能,用于管理任何类型的对象。 • ApplicationContext:BeanFactory的子接口,提供了…

软件测试基础:单元测试与集成测试

单元测试的重要性 单元测试是软件开发过程中的必要步骤。它通过针对软件的最小可测试单元进行测试,可以及早发现代码中的逻辑错误和缺陷。根据统计数据显示,单元测试可以在软件开发初期就发现约70%的错误,从而减少了后期修改的成本和时间消耗…

sql专题 之 常用命令

文章目录 查询基础语法查询全表查询选择查询&#xff1a;常量和运算&#xff1a; 条件查询where运算符&#xff1a;、 !、<、>空值&#xff1a;null模糊查询&#xff1a;like逻辑运算&#xff1a;and or not 去重&#xff1a;distinct排序&#xff1a;order by截断和偏移…

LocalSend:开源跨平台文件传输工具,让设备互通无阻

在现代社会中&#xff0c;文件共享和设备之间的互联互通已经成为日常生活中不可或缺的一部分。无论是在工作中分享文档&#xff0c;还是在朋友间传输照片和视频&#xff0c;快速而便捷的文件传输工具都显得尤为重要。通常情况下&#xff0c;我们依赖互联网或蓝牙进行文件传输&a…

解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递

引言 本文介绍如何在开发环境下解决 Vite 前端&#xff08;端口 3000&#xff09;和后端&#xff08;端口 80&#xff09;之间的跨域问题&#xff1a; 在开发环境中&#xff0c;前端使用的 Vite 端口与后端端口不一致&#xff0c;会产生跨域错误提示&#xff1a; Access to X…

C/C++/PYTHON 改变 console terminal cmd 字体输出颜色

C代码 #include <stdio.h>// 定义一些常用颜色的转义序列 #define RED "\x1b[31m" #define GREEN "\x1b[32m" #define YELLOW "\x1b[33m" #define BLUE "\x1b[34m" #define RESET "\x1b[0m"int main() {// 在控制台输…

android studio 更改gradle版本方法(备忘)

如果出现类似以下&#xff1a; Your build is currently configured to use Java 17.0.11 and Gradle 6.1.1. 或者类似&#xff1a; Failed to calculate the value of task ‘:app:compileDebugJavaWithJavac‘ property ‘options.generatedSo 消息时需要修改gradle版本&…

游戏引擎学习第一天

视频参考: https://www.bilibili.com/video/BV1zGDCYHErA/ 创建一个保存项目的路径 VS的安装略过&#xff0c;个人自行百度 1. vs 创建第一个CMAKE的窗口项目 game.cpp 修改如下的代码 到https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain 去…