首页IT科技amazon prime视频(20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用)

amazon prime视频(20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用)

时间2025-06-15 16:04:13分类IT科技浏览4955
导读:真火!...

真火!

作为最近一段时间人工智能领域内的顶流之一             ,AIGC(AI-Generated Content)早已火爆出圈                    ,频登各大互联网平台热搜             。

cite: 微软亚洲研究院官方微博

这段时间以来       ,基于深度学习的内容生成在图像              、视频                    、语音      、音乐       、文本等生成领域都取得了令人瞩目的成果             ,也越来越多的身边人在讨论AIGC                    。但你知道AIGC背后的有哪些技术支持吗?

实际上                    ,最早引爆AIGC话题的是AI作图       ,它是以Stable Diffusion技术为基础实现的       。以前      ,AI 作图还只是简单的风格迁移                    、头像生成             、磨皮       、P图等功能应用                    ,直到Stable Diffusion模型的降临              ,AI 作图发生了质的变化      ,人们第一次见识到了生产力AI的力量:画家                    、设计师不用再绞尽脑汁思考色彩             、构图                   ,只要告诉 Stable Diffusion 模型自己想要什么              ,就能言出法随般地生成高质量图片             。

那么我能不能自己实现一个以Stable Diffusion模型为基础的AIGC作画应用呢?

答案是可以的!最近我恰好受邀参与了亚马逊云科技【云上探索实验室】活动,利用Amazon的SageMaker平台搭建了自己的 AIGC 应用                   ,整个过程只用了不到20分钟                    。

使用 Amazon SageMaker 基于Stable Diffusion模型搭建的AIGC应用

总体而言                    ,在Amazon SageMaker上搭建AIGC应用的体验十分出色,不仅仅是流程清晰             ,简单易实现       。使用者可以直接从Hugging Face上提取预训练的模型                    ,参考Amazon提供的简明教程       ,使得SageMaker可以很容易地将模型转化为Web应用      。

下面是一些图像生成的结果:

感觉还不错             ,现在我们就来复盘一些怎么利用亚马逊云服务使用Amazon SageMaker在20分钟内搭建一个属于自己的AIGC应用                    。

我将首先简单说明AIGC是什么以及讲解Stable Diffusion的技术原理              。然后介绍Amazon SageMaker是做什么的      。之后将基于Amazon SageMaker搭建AIGC应用的整体流程复盘一遍                   。最后对该应用进行测试和功能评价              。

1. 什么是Stable Diffusion?

1.1. 人工智能自动生成内容:AIGC介绍

人工智能自动生成内容(AIGC)是一种基于人工智能(AI)技术的内容创作方法                    ,旨在快速、高效地生成高质量                    、有创意的文本                   、图像、音频或视频等多种形式的内容。借助先进的深度学习和自然语言处理技术       ,AIGC能够理解和学习人类语言              、语境                   、知识和创意      ,从而根据用户需求生成各种类型的内容                   。这其中尤其以Stable Diffusion为代表性技术和应用                    ,它用于从自然语言描述生成数字图像                    。

1.2. Stable Diffusion原理解析

Stable Diffusion是一个基于Latent Diffusion Models(潜在扩散模型              ,LDMs)的文图生成(text-to-image)模型。

它包含三个模块:感知压缩      、扩散模型和条件机制             。

(1) 图像感知压缩(Perceptual Image Compression) 图像感知压缩通过VAE自编码模型对原图进行处理      ,忽略掉原图中的高频细节信息                   ,只保留一些重要              、基础的特征                    。该模块并非必要              ,但是它的加入能够大幅降低训练和采样的计算成本,大大降低了图文生成任务的实现门槛       。

基于感知压缩的扩散模型的训练过程有两个阶段:(1)训练一个自编码器;(2)训练扩散模型             。在训练自编码器时                   ,为了避免潜在表示空间出现高度的异化                    ,作者使用了两种正则化方法,一种是KL-reg             ,另一种是VQ-reg                    ,因此在官方发布的一阶段预训练模型中       ,会看到KL和VQ两种实现                    。在Stable Diffusion中主要采用AutoencoderKL这种正则化实现       。

具体来说             ,图像感知压缩模型的训练过程如下:给定图像

x

R

H

×

W

×

3

x\in \mathbb{R}^{H\times W\times 3}

xRH×W×3                    ,我们先利用一个编码器

ε

\varepsilon

ε
来将图像从原图编码到潜在表示空间(即提取图像的特征)

z

=

ε

(

x

)

z=\varepsilon(x)

z=ε(x)
      ,其中

z

R

h

×

w

×

c

z\in \mathbb{R}^{h\times w\times c}

zRh×w×c
      。然后      ,用解码器从潜在表示空间重建图片

x

~

=

D

(

z

)

=

D

(

ε

(

x

)

)

\widetilde{x}=\mathcal{D}(z)=\mathcal{D}(\varepsilon(x))

x=D(z)=D(ε(x))
                    。训练的目标是使

x

=

x

~

x=\widetilde{x}

x=x
              。

(2) 隐扩散模型(Latent Diffusion Models)

扩散模型(DM)从本质上来说                    ,是一个基于马尔科夫过程的去噪器      。其反向去噪过程的目标是根据输入的图像

x

t

x_t

xt去预测一个对应去噪后的图像

x

t

+

1

x_{t+1}

xt+1
              ,即

x

t

+

1

=

ϵ

t

(

x

t

,

t

)

,

t

=

1

,

.

.

.

,

T

x_{t+1}=\epsilon_t(x_t,t),\ t=1,...,T

xt+1=ϵt(xt,t),t=1,...,T
                   。相应的目标函数可以写成如下形式:

L

D

M

=

E

x

,

ϵ

N

(

,

1

)

,

t

=

[

ϵ

ϵ

θ

(

x

t

,

t

)

2

2

]

L_{DM}=\mathbb{E}_{x,\epsilon\sim\mathcal{N(0,1),t}}=[||\epsilon-\epsilon_\theta(x_t,t)||_{2}^{2}]

LDM=Ex,ϵN(0,1),t=[∣∣ϵϵθ(xt,t)22]
这里默认噪声的分布是高斯分布

N

(

,

1

)

\mathcal{N(0,1)}

N(0,1)
      ,这是因为高斯分布可以应用重参数化技巧简化计算;此处的

x

x

x
指的是原图              。

而在潜在扩散模型中(LDM)                   ,引入了预训练的感知压缩模型              ,它包括一个编码器

ε

\varepsilon

ε 和一个解码器

D

\mathcal{D}

D
。这样在训练时就可以利用编码器得到

z

t

=

ε

(

x

t

)

z_t=\varepsilon(x_t)

zt=ε(xt)
,从而让模型在潜在表示空间中学习                   ,相应的目标函数可以写成如下形式:

L

L

D

M

=

E

ε

(

x

)

,

ϵ

N

(

,

1

)

,

t

=

[

ϵ

ϵ

θ

(

z

t

,

t

)

2

2

]

L_{LDM}=\mathbb{E}_{\varepsilon(x),\epsilon\sim\mathcal{N(0,1),t}}=[||\epsilon-\epsilon_\theta(z_t,t)||_{2}^{2}]

LLDM=Eε(x),ϵN(0,1),t=[∣∣ϵϵθ(zt,t)22]

(3) 条件机制(Conditioning Mechanisms) 条件机制                    ,指的是通过输入某些参数来控制图像的生成结果                   。这主要是通过拓展得到一个条件时序去噪自编码器(Conditional Denoising Autoencoder,CDA)

ϵ

θ

(

z

t

,

t

,

y

)

\epsilon_\theta(z_t,t,y)

ϵθ(zt,t,y)来实现的             ,这样一来我们就可通过输入参数

y

y

y
来控制图像生成的过程                    。

具体来说                    ,论文通过在UNet主干网络上增加cross-attention机制来实现CDA       ,选用UNet网络是因为实践中Diffusion在UNet网络上效果最好。为了能够从多个不同的模态预处理参数

y

y

y             ,论文引入了一个领域专用编码器(Domain Specific Encoder)

τ

θ

\tau_\theta

τθ
                    ,它将

y

y

y
映射为一个中间表示

τ

θ

(

y

)

R

M

×

d

r

\tau_\theta(y)\in\mathbb{R}^{M\times d_r}

τθ(y)RM×dr
      ,这样我们就可以很方便的将

y

y

y
设置为各种模态的条件(文本                    、类别等等)             。最终模型就可以通过一个cross-attention层映射将控制信息融入到UNet的中间层      ,cross-attention层的实现如下:

A

t

t

e

n

t

i

o

n

(

Q

,

K

,

V

)

=

s

o

f

t

m

a

x

(

Q

K

d

)

V

Attention(Q,K,V)=softmax(\frac{QK^\top}{\sqrt{d}})\cdot V

Attention(Q,K,V)=softmax(dQK)V

Q

=

W

Q

(

i

)

φ

i

(

z

t

)

,

K

=

W

K

(

i

)

τ

θ

(

y

)

,

V

=

W

V

(

i

)

τ

θ

(

y

)

Q=W_{Q}^{(i)}\cdot \varphi_i(z_t),\quad K=W_{K}^{(i)}\cdot \tau_\theta(y),\quad V=W_{V}^{(i)}\cdot \tau_\theta(y)

Q=WQ(i)φi(zt),K=WK(i)τθ(y),V=WV(i)τθ(y)
其中

φ

i

(

z

t

)

R

N

×

d

ϵ

i

\varphi_i(z_t)\in \mathbb{R}^{N\times d_{\epsilon}^{i}}

φi(zt)RN×dϵi
是UNet的一个中间表征;

W

Q

(

i

)

W_{Q}^{(i)}

WQ(i)
      、

W

K

(

i

)

W_{K}^{(i)}

WK(i)

W

V

(

i

)

W_{V}^{(i)}

WV(i)

分别是三个权重矩阵                    。此时                    ,带有条件机制的隐扩散模型的目标函数可以写成如下形式:

L

L

D

M

=

E

ε

(

x

)

,

y

,

ϵ

N

(

,

1

)

,

t

=

[

ϵ

ϵ

θ

(

z

t

,

t

,

τ

θ

(

y

)

)

2

2

]

L_{LDM}=\mathbb{E}_{\varepsilon(x),\ y,\ \epsilon\sim\mathcal{N(0,1),\ t}}=[||\epsilon-\epsilon_\theta(z_t,\ t,\ \tau_\theta(y))||_{2}^{2}]

LLDM=Eε(x),y,ϵN(0,1),t=[∣∣ϵϵθ(zt,t,τθ(y))22]

2. 什么是Amazon SageMaker?

Amazon SageMaker 是一种完全托管式的机器学习服务              ,旨在帮助开发者和数据科学家快速       、轻松地构建                    、训练和部署机器学习模型       。Amazon SageMaker 提供了一个集成的开发环境      ,降低了创建机器学习解决方案的复杂性和成本             。Amazon云服务提供了三层架构                   ,即框架和基础架构服务-机器学习服务-人工智能服务相结合的服务架构              ,其中Amazon SageMaker是中间层服务的支撑平台,为机器学习提供自定义训练和部署服务                    。

3. 通过Amazon SageMaker搭建基于Stable Diffusion模型的AIGC应用

在我们开始部署Stable Diffusion模型之前                   ,先来了解一下整体的实验架构       。整体流程分为两大部分                    ,首先是在Amazon SageMaker Notebook中加载并准备AIGC模型,模型已经在机器学习开源社区Hugging Face中准备好了             ,我们需要把它加载到Notebook中      。然后将模型上传并部署该模型到Endpoint上                    ,创建属于自己的AIGC应用                    。

3.1. 创建Notebook

为了部署和使用我们的AIGC模型       ,我们采用Amazon SageMaker Notebook来编写代码和训练模型              。

首先我们进入到自己的 控制台主页(AWS Management Console)

             ,在最上方的搜索栏中搜索“Amazon SageMaker              ”                    ,点击进入即可      。

然后       ,我们在左侧的目录中选择“笔记本                    ”-“笔记本实例      ”      ,进入到笔记本实例控制页                   。在这里                    ,我们点击“创建笔记本实例       ”来创建一个新的实例              。

之后在创建笔记本实例详情页中配置笔记本实例的基本信息。主要配置以下4部分信息:(1)笔记本实例名称;(2)笔记本实例类型;(3)平台标识符(操作系统及Jupyter Notebook版本);(4)实例存储大小(卷大小)                   。

如果遇到无“IAM 角色                    ”的问题              ,那就采用默认配置创建一个新角色即可                    。

以上步骤完成之后点击“创建笔记本实例             ”就可以了      ,点击之后                   ,需要等待一段时间(约5分钟)才能完成创建。

这里已经为大家准备好了相关的代码              ,打开链接(https://static.us-east-1.prod.workshops.aws/public/73ea3a9f-37c8-4d01-ae4e-07cf6313adac/static/code/notebook-stable-diffusion-ssh-inference.ipynb),下载保存Notebook代码文件             。

下载好代码(ipynb)文件之后                   ,我们在笔记本实例页面点击“打开Jupyter       ”                    ,然后上传代码                    。

选择好文件后,点击蓝色的“Upload                    ”按键             ,即可完成上传       。然后我们打开刚刚上传的notebook                    ,可以看到该文件就是一个完整的Stable Diffusion训练代码       ,这里我们的run kernel选择conda_pytorch_38或conda_pytorch_39             ,因为机器学习代码是用pytorch写的             。

在这里                    ,我们首先使用Shift+Enter运行1.1安装及环境配置工作中的两段代码       ,为接下来的实验配置好环境                    。

以下是一些使用Jupyter Notebook的快捷键汇总       。

3.2. 利用Hugging Face克隆模型

Hugging Face是一个人工智能/机器学习的开源社区和平台      ,在Hugging Face上有Stable Diffusion V1.4和Stable Diffusion V2.1两个版本                    ,无论使用V1.4版本还是V2.1版本              ,我们都要把模型下载下来      。

# Clone the Stable Diffusion model from HuggingFace #### Stable Diffusion V1 SD_SPACE="CompVis/" SD_MODEL = "stable-diffusion-v1-4" #### Stable Diffusion V2 # SD_SPACE="stabilityai/" # SD_MODEL = "stable-diffusion-2-1"

之后克隆模型仓库      ,等待模型下载完毕                    。

3.3. 了解模型的超参数

在正式训练模型之前                   ,我们来了解一下模型的超参数设置以及它们的含义              。

prompt

(str or List[str]):

引导图像生成的文本提示或文本列表 height

(int, optional, 默认为 V1模型可支持到512像素              ,V2模型可支持到768像素):

生成图像的高度(以像素为单位) width

(int, optional, 默认为 V1模型可支持到512像素,V2模型可支持到768像素):

生成图像的宽度(以像素为单位) num_inference_steps

(int, optional, defaults to 50):

降噪步数      。更多的去噪步骤通常会以较慢的推理为代价获得更高质量的图像 guidance_scale

(float, optional, defaults to 7.5):

较高的指导比例会导致图像与提示密切相关                   ,但会牺牲图像质量                   。 如果指定                    ,它必须是一个浮点数              。 guidance_scale<=1 被忽略。 negative_prompt

(str or List[str], optional):

不引导图像生成的文本或文本列表                   。不使用时忽略,必须与prompt类型一致(不应小于等于1.0) num_images_per_prompt

(int, optional, defaults to 1):

每个提示生成的图像数量

在这其中             ,height             、width和num_images_per_prompt会直接影响到GPU的内存开销                    。height       、width和num_images_per_prompt越大                    ,所需要的GPU开销就越大。

以上是主要要考虑的超参数       ,如果想进行更精细的调整             ,可以参考 pipeline_stable_diffusion.py                    ,539-593行             。

3.4. 配置和微调Stable Diffusion模型

在确定好超参数之后       ,我们就可以配置并使用刚才微调的模型了                    。首先使用stableDiffusionPipeline加载stable-diffusion-v1-4(或stable-diffusion-v2-1)      ,即SD_MODEL=stable-diffusion-v1-4

接下来                    ,通过输入prompts和调整超参数              ,我们就可以用Stable Diffusion模型来生成图像了      ,例如:

# move Model to the GPU torch.cuda.empty_cache() pipe = pipe.to("cuda") # V1 Max-H:512,Max-W:512 # V2 Max-H:768,Max-W:768 print(datetime.datetime.now()) # 提示词                   ,一句话或者多句话 prompts =[ "An eagle flying in the water", "A pig kite flying in the sky", ] generated_images = pipe( prompt=prompts, height=512, # 生成图像的高度 width=512, # 生成图像的宽度 num_images_per_prompt=

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
笔记本合盖后唤醒不了,按电源键也没反应(如何设置电源键、笔记本合盖系统响应的操作) php控制器不存在(phpcms无法添加栏目怎么办)