AIGC 商业化道路探索 - Stable Diffusion 商业化应用(上)

本文涉及的产品
资源编排,不限时长
无影云电脑企业版,4核8GB 120小时 1个月
无影云电脑企业版,4核8GB 120小时 1个月
简介: Stable Diffusion 应用到商业领域的案例越来越多,商用场景下的技术架构应当如何构建?本文基于阿里云近期的一个 Stable Diffusion 商业案例,对大规模底模切换、大量 LoRA 调优的场景提出一个商业场景适用的技术架构,并已实现部署交付,稳定运行。

Stable Diffusion 应用到商业领域的案例越来越多,商用场景下的技术架构应当如何构建?本文基于阿里云近期的一个 Stable Diffusion 商业案例,对大规模底模切换、大量 LoRA 调优的场景提出一个商业场景适用的技术架构,并已实现部署交付,稳定运行。


该方案下:实现推理速度对比pytorch提升2.5-6倍,xformers提升1.6-2.3倍、超大规模模型组合(底模 8k;LoRA 1w+;ControlNet 15)切换完全无感,可以做到内存保持条件下的无感插拔。


在客户场景下,全链路出图效率角度,G云方案出图峰值性能15s+,平均出图在20s+,遇到队列等待出图延迟可能上升至分钟级。

DeepGPU+Fluid极致方案可以实现峰值4s出图,平均8s出图;随着客户保持的实例规模上升,逐步可以将平均出图时长控制到6s以内。


文章创作鸣谢:(不分先后)

@大川,@元欢@倪祺@莫源@景祁@背包,@夏福


文章相关应用计算巢测试文档:

https://aliyun-computenest.github.io/quickstart-stable-diffusion-aiacctorch/




文章下篇:https://developer.aliyun.com/article/1352270



一、引言


谈起 Stable Diffusion,这里想引用《Stable Diffusion 倚天剑术》一文的一个形容,“如果把 Midjourney :一款架设在 Discord 社区的优秀 AI 绘画工具,我把它称作 AI 绘画界的『屠龙刀』。而今天我们要介绍的 Stable Diffusion,我则愿意称它为 AI 绘画界的『倚天剑』”。


确实,Midjourney 是以构建 AI 绘画社区,促进使用者之间的需求交互从而形成正向循环;而 Stable Diffusion,则是以开源模型权重,促进开发者使用生态的发展实现模型的迭代。两者的区别或许更类似于 LLM 领域的 ChatGPT 与 LLaMA。


正是因为 Stable Diffusion 的开源模型与权重,让我们得以在商业化之前可以详细探究一下,文生图与图生图的扩散模型基本原理,从而可以从最基本的单元理解 Stable Diffusion 的扩散行为为什么能够产生神奇的创作效果。


二、Stable Diffusion 是什么?

幻灯片2.jpeg


1. 图像

图像本质上是像素位置与灰度、颜色构成的真实分布。一张图,能够让人识别出来,是因为在特定的位置附近有足够的像素落在对应区域,从而模糊/精准地描绘了一个事物的平面外观,让人可以依据经验判断出是什么事物。但是,一张图尤其是高分辨率图,包含的数据量过于庞大,如果对原图直接进行训练,除了会产生天量计算资源消耗以外,同时也会将图片中全像素包含的冗余的信息都引入模型,这样反而会降低模型在特征提取方面的能力。


2. 为什么是 Diffusion ?

Stable Diffusion 不是一蹴而就的, 图像合成理论体系经过了一系列的完善工作。


i.  生成式图像合成模型


典型的是生成对抗性网络 GANs(Generative Adversarial Networks),GANs 对高分辨率的有效采样具有良好的感知力,但是缺点是优化非常困难,并且容易在尝试捕获完整数据分布过程中难以找到有效特征。


进而基于似然方法更注重密度估计,可以有效规避上述问题,诸如变分自动编码器 VAE (Variational Auto Encoders)和流式模型 Flow-based Models 能够有效合成高分辨率图像。但是有别于 GANs 的样本质量,这类自回归模型 ARMs(Auto Regressive Models)在密度估计上的高要求导致它需要被限制在较低分辨率的样本上。考虑到基于像素的表达中往往包含难以建模的高频细节,为了扩散到更高的分辨率,衍生出了几种使用 ARMs 来建模压缩到潜空间 (Latent Space)的 2 阶段模型方法。


ii. 2 阶段图像合成


规避上述单个合成方法的弊端,采用 VQ-VAEs 可以使用自回归模型来学习在潜空间上的离散图像和文本表示的联合分布,并将这种方法扩散到文生图。进一步针对网络的可逆性,可以采取 VQ-GANs 来实现更普遍的潜空间到离散域的表达。 然而这种方法需要引入十亿级的训练参数来完成,计算开销依然庞大。


iii. 潜空间扩散模型

LDMs (Latent Diffusion Models)的引入可以更好的解决上述问题,LDMs 使用了卷积主干网络,所以可以更平滑地扩散到高维潜空间,同时实现了最优的感知压缩与高保真度重建效果的权衡。


首先 DMs(Difffusion Models)是一个概率模型,旨在对非均匀分布的变量进行去噪来获得数据分布,对应于学习长度固定的马尔可夫链的反向过程。LDMs 即 DMs 在潜空间上的建模,则需要根据感知压缩的模型进行训练,并在潜空间中提取出高频、难以察觉的细节特征,这个特征与高维像素空间的高频细节相比,更适合似然估计,因为其与数据的重要语义位有对应关系,且在潜空间中的计算效率要比像素空间高得多。实现方法就是大家耳熟能详的 UNet。


3.  为什么是 Stable Diffusion?

有了上面的理论基础,我们来看画一张图需要的过程。创作的输入,离不开语言或图像,对应 Stable Diffusion 具有文生图,图生图应用 2 种。 要支撑这样的应用,决定了 Stable Diffusion 的基本组件的 3 部分: CLIP,VAE,UNet


i. CLIP (Contrastive Language-Image Pre-Training

CLIP 是 OpenAI 在 2021 年初发布的用于匹配图像和文本的预训练神经网络模型。

CLIP.jpg


OpenAI 使用了收集的 4 亿图像文本对,经过对文本和图像的编码后使用 Metric learning 进行训练,目标是将文本与图像的相似性提高,从而能根据文本编码产生图像编码的预测。文本编码方法是 CBOW 或 Transformer,图像编码是 ResNet 或 Vision Transformer。模型使用余弦距离比较结果嵌入衡量相似性,通过不断的训练更新模型,编码器对图像和文本编码得到的嵌入会逐渐相似。训练完成后的模型,给定一些文本对和目标图像,会计算余弦相似度从而获取预测值。


ii. VAE(Variational Auto Encoders

VAEq.jpg

VAE.jpg


如前文叙述, VAE 是一个将像素空间图像压缩至潜空间的编码器,潜空间压缩是将一张像素图用更少的数据来表达的一种方法,例如输入一张 3*512*512 的猫图像,可以通过 VAE 压缩至 4*64*64 的潜空间向量来表示。 解码器是同样的潜空间向量表示到像素空间的逆过程。


iii. UNet

Unet 基本网络结构:

UNet.jpg


UNet,使用了残差连接作为骨干网,结构的关键在于编码部分和解码部分的跳跃连接( Skip Connection),将来自解码器的深层高级特征与来自编码器的浅层低级特征相结合。编码器的浅层结构可以提取断层的简单特征,而深层结构则能抓取到断层的复杂特征。


仅有 CLIP 的输入条件,依然是不足以产生创作效果的,因为 CLIP 实现的是封闭知识环境内的文本语义与图像映射关系,所得的预测仅仅是一个相似度结论,是判断性内容。此时就需要引入噪声输入来让创作具备基础材料(创作的本质是脱离封闭知识环境产生规律性新内容),针对前一章节论述的像素空间,VAE 主要通过将图像压缩到潜空间进行操作从而解决了像素空间开销问题和高频细节问题。


到目前为止,UNet 获得了 2 种可能的输入:CLIP 编码后的文本图像对的预测以及 VAE 压缩后的图像潜空间表达。这里流程会有一点区别:


对于文生图来说:

幻灯片1.jpeg


文字是唯一的输入,即提示词进入到 CLIP 后,获得的文本向量进入潜空间,与此同时在潜空间引入一个初始化的噪声图,(通过随机种子 Seed 标识),根据 CLIP 的文本图像对相似度预测,UNet 会对初始化图像进行迭代采样,从而获得一个在潜空间与文本语义相似的图像向量,经过 VAE 解码后获得一张图片。


对于图生图来说:

幻灯片2.jpeg


具备文字及图像 2 种输入,即提示词+输入图像,与文生图最大的区别是,图生图在潜空间引入的初始化噪声图是基于输入图像加噪得到的,同样在潜空间对图像进行。


UNet 中,Q 代表潜空间特征,K、V 都是文本向量连接全连接层后得到;Q、K 相乘后,softmax 得到一个分值,然后乘 V,变换维度输出,最后输出预测的噪声。这个过程使用了 Transformer 的特征提取能力实现了输出预测噪声的过程。



三、Stable Diffusion 组合应用

幻灯片5.jpeg

前文提到,Stable Diffusion 与 Midjourney 最大的区别在于 Stable Diffusion 开源了模型权重。与之对应的,大家可能会发现,在官方发布的 webUI 上直接使用底模出图,效果往往不尽如人意,与 Midjourney 客户端的效果也相去甚远。这里就涉及到,实际 Stable Diffusion 在使用时主流的一些使用方法。


1. 官方主模型

官方主模型,主要包括了 Text Encoder,UNet 以及 VAE Decoder 等组件。虽然拿来直接使用会使结果较为粗糙,但是主模型仍然是 Stable Diffusion 使用的最坚实的基础。Stable Diffusion v1-5 版本模型的训练使用了 256 个 40G 的 A100 GPU(专用于深度学习的显卡,对标 3090 以上算力),合计耗时 15 万个 GPU 小时(约 17 年),总成本达到了 60 万美元。除此之外,伴随着上万名测试人员每天 170 万张的出图测试,确保了基本的模型的出图效果。


2. 自训练 Checkpoint

可以通过 Dreambooth 训练得到新的大模型, 特点是出图效果好,但由于训练的是一个完整的新模型,所以训练速度普遍较慢,生成模型文件较大,一般几个 G,文件格式为 safetensors 或 ckpt。


3. 模型组合

Embeddings:对于文本部分也可以采用 Textual Inversion 进行文本提示训练模型,它根据模型引用给定的图像并选择最匹配的图像,做的迭代越多越好。通过寻找一个在潜空间的表达来描述一个近似训练图的复杂概念,并将该空间分配给关键字。 可以简单理解为一组打包的提示词,用于生成固定特征的人或事物。特点是对于特定风格特征的出图效果好,模型文件非常小,一般几十 K,但是训练速度较慢,以 png 文件格式分享。

经过训练的 Embedding 模型可以直接与主模型进行组合使用,对提词常见的避免错误画手、脸部变形等信息,Embeddings 模型都可以较好地解决,比如最出名的 EasyNegative 模型。


LoRA:一种轻量化的模型微调训练方法,是在原有大模型的基础上,对该模型进行微调,用于输出固定特征的人或事物。特点是对于特定风格特征的出图效果好,训练速度快,模型文件小,一般几十到一百多 MB,需要搭配大模型使用。LoRA 是一系列方法的总称,原则上可以使用 LoRA 方法训练 大多数模型模块,最直观的体现就是 LoRA 实质上是记录了特定连接位置的多层权重信息的一个插层信息块。


Hypernetwork:类似 LoRA,在扩散模型之外新建一个神经网络来调整模型参数,而这个神经网络也被称为超网络。但模型效果不如 LoRA,目前大多用于控制图像画风。


VAE:虽然主模型会包括 VAE 组件,但是同样可以采取外置不同的 VAE 来实现多样滤镜的出图效果。


ControlNet:前文有提到 GANs 对高分辨率的有效采样具有良好的感知力,我们可以利用这一点来做一个用于控制 AI 图像生成的插件。它使用了一种称为条件生成对抗网络(Conditional Generative Adversarial Networks)的技术来生成图像。目前主流的 ControlNet 大约有 15 种,诸如 MiDaS/LeReS 深度信息估算、HED 边缘检测、Canny 边缘检测、OpenPose 姿态检测、M-LSD 线条检测、Normal Map 法线贴图等等,每种模型都有特定的约束控制效果,组合使用可以极大提升出图质量。


幻灯片6.jpeg


当前主流的模型使用方法,往往是 Stable Diffusion 底模(ckpt)+ LoRA + ControlNet 组合,这样的组合背景下,随着底模和 LoRA 的扩充,在满足日益多样化的用户出图需求时,就会产生数量越来越庞大的模型使用组合,这对推理的支撑架构提出了极高的挑战。


四、Stable Diffusion 业务竞争力衡量基准探讨


基于上述讨论,我们提出 Stable Diffusion 业务竞争力的一个衡量基准,与大家探讨。考虑到社区的各类模型十分丰富,且满足开放式多样的用户需求前提下,模型组合会变得极其丰富。那么这样一个模型组,不同客户在走向商业化时的竞争力我们该如何评估衡量?


幻灯片7.jpeg


1. 用户体验

诸如 CivitAI ,SeaArt,LiblibAI 等应用,最直接的与用户交互的界面是其业务中非常重要的组成部分。搭建这样的界面前后端服务,往往需要云上的 PaaS、IaaS 资源支撑以实现稳定、高效、安全的运行环境。


用户端服务在当下是一个复杂而高效的系统化应用,包括但不限于用户数据、登陆服务、安全监测、Prompt 缓存、消息队列等等一系列组件,在阿里云上的统一的运行环境可以助力客户搭建更具竞争力的服务端架构。


2. 营收效率

类似妙鸭、美图等应用,有直接的营收逻辑,与之对应的是提供类似的服务支撑所需要的计算、存储、网络等基础资源等支撑,当然 PaaS 化的应用成本也应当考虑在内。


阿里云推出的一系列 AIGC 高性能组件,从 DeepGPU 对推理的加速、模型的切换、模型的插拔、模型文件优化等方面极大提高了同等资源下的推理效率。DeepGPU 在 Stable Diffusion 推理性能上,与友商/开源框架实测对比,取得了碾压性的优势。更多的,在 PaaS 层我们同样有 Fluid 分布式缓存加速等组件,进一步优化全链路出图效率。


3. 业务稳定性

从业务上云本身来看,其核心优势自然需要纳入考量。云上提供了弹性算力确保了峰值业务稳定;云上提供了多 AZ 容灾确保了可靠的服务 SLA;同样,前文提到的随着客户业务发展而产生的大量的底模、LoRA,这些都是客户核心的数据资产,云上同样提供对这些数据资产的安全、备份、管理服务。


更多的,阿里云在长期服务 AIGC 客户中积累了大量的稳定性经验,对 Stable Diffusion 在商业化中可能遇到的问题可以更快、更好地定位和解决。我们会根据客户需求实际场景进行架构设计,融入稳定性经验的同时可以做到有预见性地提出一些风险规避措施,进一步确保客户的业务具备业内领先的稳定性。


五、Stable Diffusion 商业模式探讨

1. 潜在商业模式

幻灯片3.jpeg


上文有提到部分 Stable Diffusion 的玩家,但是并没有对其业务生态进行进一步分类。这里,我们从生图场景有需求的主体进行客户的基本业务形态粗分,基本可以分为个人用户或各类工作室、模型服务商等。


目前市场上爆火的妙鸭相机、美图,就是致力于服务证件照细分领域的 C 端客户,其初期采取 9.9 元的服务费,获得了大量的 C 端客户流量,近期更是增加了免费通道。而这类客户的使用特点主要是,对 Stable Diffusion 应用主要集中在少数底模范畴,但是具备海量的 LoRA。


针对工作室或模型服务商,市场上这类客户对 Stable Diffusion 的使用就是另一种形态。例如 CivitAI 和 SeaArt,都是保有了大量的底模 && LoRA,他们的平台能力可以覆盖 99%的用户生图需求,且随着用户的需求依然在持续迭代,底模库与 LoRA 库至少在现阶段是持续处于动态扩增的状态。


这类客户的业务特征是,往往在提供 C 端服务界面的同时,同样可以承接 B 端的需求。B 端需求服务,又可以细分为 API 级能力输出(SaaS 化及 PaaS 化均可)以及端到端私有化部署(打包项目或者 MaaS 社区)输出。


2. 阿里云的支撑形态

对于这两大类客户,或者说这两大类用户/客户服务需求,客户搭建面向下游的 C 端的服务需求,对阿里云来说相对完整,我们致力于提供端到端的服务,同时客户在应用端的决策可以牵引整个项目的落地,在这中场景中,客户往往会对阿里云的 IaaS、PaaS 产品了解较为深入并有动力做出合适的架构设计及开发,目前看来我们在其中做好模块化的技术支撑,就可以推动业务的落地。当然这个边界不是绝对的,端到端服务形态中,本质上是我们会依据客户的能力边界判断我们需要支撑的维度,只是说从业务落地上来讲,服务于 C 端需求的客户在目前看来需要我们做整体设计和架构把控的情况相对较少。


自然的, B 端的服务需求,是我认为目前还存在探索空间的领域。首先 Stable Diffusion 领域本身的第一个杀手级应用产生在 C 端,目前还没有来自 B 端需求的杀手级应用,从而 B 端服务框架也没有一个清晰的定义和行业公认的边界。


根据我有限的经验看来,客户服务于 B 端的 2 种细分服务形态,无论客户对外提供 API 级能力输出还是私有化部署输出形态,都需要我们深度参与,最重要的是明确阿里云在不同场景下的标准交付件及标准的交付工作流,乃至于协助客户定义其标准能力输出形态。



关于Stable Diffusion商业化推理架构,上篇内容受限于篇幅,目前暂时讨论到这里,主要讨论了Stable Diffusion基本原理、可能的商业模式及对应的竞争力衡量基准。


下篇内容将会展开叙述 DeepGPU 的推理加速、组合 Fluid 分布式缓存的优化加载方案等等内容,来介绍对于本文第四章节提出的业务竞争力衡量基准,阿里云具备怎样的支撑方案来确保客户的业务竞争力领先。



感谢阅读!

阿里云弹性计算PDSA

丁祎程(益成)

2023年10月17日


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
27天前
|
机器学习/深度学习 数据采集 人工智能
作为AIGC技术的一种应用-bard
8月更文挑战第22天
33 15
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
|
1月前
|
机器学习/深度学习 设计模式 人工智能
面向对象方法在AIGC和大数据集成项目中的应用
【8月更文第12天】随着人工智能生成内容(AIGC)和大数据技术的快速发展,企业面临着前所未有的挑战和机遇。AIGC技术能够自动产生高质量的内容,而大数据技术则能提供海量数据的支持,两者的结合为企业提供了强大的竞争优势。然而,要充分利用这些技术,就需要构建一个既能处理大规模数据又能高效集成机器学习模型的集成框架。面向对象编程(OOP)以其封装性、继承性和多态性等特点,在构建这样的复杂系统中扮演着至关重要的角色。
48 3
|
1月前
|
机器学习/深度学习 自然语言处理 监控
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AIGC在创意产业的应用与影响
【7月更文第27天】近年来,人工智能生成内容(AI-Generated Content, AIGC)的发展为创意产业带来了前所未有的机遇。从艺术创作到音乐制作,再到游戏设计和广告营销,AIGC正在以惊人的速度改变着这些领域的面貌。本文将探讨AIGC在创意产业中的应用,并通过具体的代码示例来展示如何利用Python等工具创建一些基本的生成模型。
58 6
|
2月前
|
存储 Serverless Linux
函数计算产品使用问题之如何设置两个SD AIGC应用搭载同一个NAS
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
设计模式 数据采集 人工智能
面向对象设计在AIGC项目中的应用
【8月更文第12天】面向对象编程(Object-Oriented Programming, OOP)是一种软件开发方法,它通过将数据和行为封装到一起形成对象来组织代码。OOP提供了几个核心概念,包括封装、继承和多态性,这些概念有助于构建灵活、可维护和可扩展的软件系统。在人工智能生成内容(Artificial Intelligence Generated Content, AIGC)项目中,OOP的设计原则尤其重要,因为这类项目往往涉及复杂的算法和大量的数据处理。
32 0
|
2月前
|
存储 自然语言处理 API
通义万相AIGC技术Web服务体验评测
随着人工智能技术的不断进步,图像生成技术已成为创意产业的一大助力。通义万相AIGC技术,作为阿里云推出的一项先进技术,旨在通过文本到图像、涂鸦转换、人像风格重塑及人物写真创建等功能,加速艺术家和设计师的创作流程。本文将详细评测这一技术的实际应用体验。
127 4
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
|
1月前
|
人工智能
AIGC图生视频技术下的巴黎奥运高光时刻
图生视频,Powered By「 阿里云视频云 」
92 4