前言
这段时间以来,基于深度学习的内容生成在图像、视频、语音、音乐、文本等生成领域都取得了令人瞩目的成果,也越来越多的身边人在讨论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介绍
1.2. Stable Diffusion原理解析
2. 什么是Amazon SageMaker?
3. 通过Amazon SageMaker搭建基于Stable Diffusion模型的AIGC应用
3.1. 创建Notebook
3.2. 利用Hugging Face克隆模型
3.3. 了解模型的超参数
3.4. 配置和微调Stable Diffusion模型
3.5. 部署和使用训练好的模型
3.6. 清理资源
3.7. 整体流程的视频介绍
4. 对Stable Diffusion模型的评估
4.1. CPU和GPU对生成速度的影响
4.2. 超参数对模型性能的影响
5. 总结
5.1. 基于Amazon SageMaker搭建的AIGC应用的功能评价
5.2. 对开发过程有帮助的产品文档汇总
正文
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∈RH×W×3,我们先利用一个编码器ε 来将图像从原图编码到潜在表示空间(即提取图像的特征)z = ε ( x ) 其中z∈Rh×w×c。然后,用解码器从潜在表示空间重建图片x ~ = D ( z ) = D ( ε ( x ) ) 训练的目标是使x = x ~
(2) 隐扩散模型(Latent Diffusion Models)
扩散模型(DM)从本质上来说,是一个基于马尔科夫过程的去噪器。其反向去噪过程的目标是根据输入的图像xt去预测一个对应去噪后的图像x t + 1,即 x t + 1 = ϵ t ( x t , t ) , t = 1 , . . . , T 。相应的目标函数可以写成如下形式:
这里默认噪声的分布是高斯分布N ( 0 , 1 ) ,这是因为高斯分布可以应用重参数化技巧简化计算;此处的x 指的是原图。
而在潜在扩散模型中(LDM),引入了预训练的感知压缩模型,它包括一个编码器 ε \varepsilonε 和一个解码器 D。这样在训练时就可以利用编码器得到z t = ε ( x t ) ,从而让模型在潜在表示空间中学习,相应的目标函数可以写成如下形式:
(3) 条件机制(Conditioning Mechanisms)
条件机制,指的是通过输入某些参数来控制图像的生成结果。这主要是通过拓展得到一个条件时序去噪自编码器(Conditional Denoising Autoencoder,CDA)ϵ θ ( z t , t , y ) 来实现的,这样一来我们就可通过输入参数y yy 来控制图像生成的过程。
具体来说,论文通过在UNet主干网络上增加cross-attention机制来实现CDA,选用UNet网络是因为实践中Diffusion在UNet网络上效果最好。为了能够从多个不同的模态预处理参数y yy,论文引入了一个领域专用编码器(Domain Specific Encoder) τ θ ,它将y 映射为一个中间表示 τ θ ( y ) ∈ R M × d r 这样我们就可以很方便的将y yy设置为各种模态的条件(文本、类别等等)。最终模型就可以通过一个cross-attention层映射将控制信息融入到UNet的中间层,cross-attention层的实现如下:
其中是UNet的一个中间表征分别是三个权重矩阵。此时,带有条件机制的隐扩散模型的目标函数可以写成如下形式:
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的快捷键汇总。