【玩转AIGC系列】基于AIACC加速器快速实现Stable Diffusion生成特定物体图片

简介: 本文介绍如何使用GPU云服务器搭建Stable Diffusion模型,并基于ControlNet框架,快速生成特定物体图片。

背景信息

Stable Diffusion(简称SD)是一种AI模型,它经过训练可以逐步对随机高斯噪声进行去噪以生成所需要的图像。


DreamBooth是一种定制化text2image模型的方法,只需提供特定物体的3~5张图片,就能生成该物体的图片。我们使用DreamBooth对模型进行Finetune,并利用阿里云AI加速器中的AIACC-AGSpeed加速Finetune,同时引入ControNet增加生成图片的多样性。


ControlNet是一组网络结构,通过对SD添加额外的Condition来控制SD,目前提供的预训练Condition包括:Canny Edge,M-LSD Lines,HED Boundary,User Scribbles,Fake Scribbles,Human Pose,Semantic Segmentation,Depth,Normal Map,Anime Line Drawing。您可以同时添加多个ControlNet进行多Condition的控制。训练其他Condition来控制SD的具体操作,请参见Train a ControlNet to Control SD


本文基于阿里云GPU服务器搭建Stable Diffusion模型,并基于ControlNet框架,快速生成特定物体图片


重要

  • 阿里云不对第三方模型“Stable Diffusion”的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。
  • 您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。

操作步骤

创建ECS实例

提供2种方式完成ECS实例的创建:控制台方式或FastGPU方式。

控制台方式

1.在ECS实例创建页面,创建ECS实例。关键参数说明如下,其他参数的配置,请参见自定义购买实例

  • 实例规格:选择ecs.gn7i-c8g1.2xlarge(单卡NVIDIA A10)。
  • 镜像:使用云市场镜像,名称为aiacc-train-solution,您可以直接通过名称搜索该镜像,选择最新版本即可。
  • 公网IP:选中分配公网IPv4地址,带宽计费方式选择按使用流量,带宽峰值选择100 Mbps,以加快模型下载速度。

2.添加安全组规则。
在ECS实例安全组的入方向添加安全组规则并放行7860端口。具体操作,请参见添加安全组规则
以下示例表示向所有网段开放7860端口,开放后所有公网IP均可访问您的WebUI。您可以根据需要将授权对象设置为特定网段,仅允许部分IP地址可以访问WebUI。


FastGPU方式

说明: FastGPU方式仅支持在Linux系统或macOS系统中使用。如果您使用Windows系统,请采用控制台方式。

FastGPU是一套阿里云推出的人工智能计算极速部署工具。您可以通过其提供的便捷的接口和自动工具,实现人工智能训练和推理任务在阿里云IaaS资源上的快速部署。关于FastGPU命令行的更多信息,请参见命令行使用说明

1.登录客户端。
您的ECS实例、本地机器、阿里云Cloud Shell工具等均可以作为客户端安装FastGPU来构建人工智能计算任务。

2.执行以下命令,安装FastGPU软件包。

pip3 install --force-reinstall https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/fastgpu/fastgpu-1.1.6-py3-none-any.whl

3.执行以下命令,配置环境变量。



export ALIYUN_ACCESS_KEY_ID=**** # 填入您的AccessKey ID
export ALIYUN_ACCESS_KEY_SECRET=**** # 填入您的AccessKey Secret
export ALIYUN_DEFAULT_REGION=cn-beijing # 填入您希望使用的地域(Region)

4.执行以下命令,创建ECS实例。
本示例以创建1台实例规格为ecs.gn7i-c32g1.32xlarge的ECS实例为例,镜像类型为aiacc_train_solution
说明:本文使用云市场的aiacc-train-solution镜像作为示例,该镜像已部署好训练所需环境。

fastgpu create --name aiacc_solution -i ecs.gn7i-c32g1.32xlarge --machines 1 --image_type aiacc_train_solution

5.执行以下命令,将本机公网IP的22端口添加到默认安全组中。

fastgpu addip -a

6.执行以下命令,开放7860端口。
以下命令示例表示向所有网段开放7860端口,开放后所有公网IP均可访问您的WebUI。您可以根据需要将0.0.0.0/0改为特定网段,仅允许部分IP地址可以访问WebUI。

fastgpu addip {aiacc_solution} 0.0.0.0/0 7860

7.执行以下命令,通过SSH连接创建的ECS实例。
通过task{N}.aiacc_solution命令可以连接到创建的ECS实例,task{N}的N表示实例序号,0表示第1台实例,以此类推。您可以通过task{N}的N表示实例序号,0表示第1台实例,以此类推。fastgpu ls命令获取实例序号。

fastgpu ssh task0.aiacc_solution


配置模型

1.下载sd_dreambooth_extension,并将该项目代码放到/root/stable-diffusion-webui/extensions路径中。

2.依次执行以下命令,下载文件。

wget https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/sd_utils/train_dreambooth.py -O /root/stable-diffusion-webui/extensions/sd_dreambooth_extension/dreambooth/train_dreambooth.py 
wget https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/sd_utils/utils.py -O /root/stable-diffusion-webui/extensions/sd_dreambooth_extension/dreambooth/utils/utils.py
wget https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/sd_utils/image_utils.py -O /root/stable-diffusion-webui/extensions/sd_dreambooth_extension/dreambooth/utils/image_utils.py
wget https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/sd_utils/log_parser.py -O /root/stable-diffusion-webui/extensions/sd_dreambooth_extension/helpers/log_parser.py

启动并访问WebUI服务

1.使用root用户远程登录ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例

2.依次执行以下命令,启动WebUI服务。
重要:WebUI服务启动后请不要关闭,否则无法访问WebUI页面。

cd /root/stable-diffusion-webui
source /root/stable-diffusion-webui/venv/bin/activate
python ./launch.py --listen --port 7860 --enable-insecure-extension-access --disable-safe-unpickle --xformers

WebUI服务成功启动后,回显信息类似如下所示。

3.在ECS实例页面,获取ECS实例的公网IP地址。

4.在浏览器中输入http://:7860,访问WebUI。

模型微调(Finetune)

仅使用预训练的权重的模型,只能生成预训练数据集相似的图片。若您希望生成自定义的图片,可以通过Finetune自定义物体图片,使得模型生成所对应物体的图片。

1.创建模型权重。

a.单击DreamBooth页签,在Model区域,单击Create

b.输入待生成的模型权重名称,例如:aliyun_example,并选择创建模型权重的来源v1-5-pruned-emaonly.safetensors [6ce0161689])

c.单击Create Model,创建模型权重。
等待模型权重创建完成后,在Output区域会显示Checkpoint successfully extracted to /root/stable-diffusion-webui/models/dreambooth/aliyun_example/working

2.设置训练参数。

a.单击Select,选择生成的模型权重aliyun_example

b.选择Input区域,在Settings页签下,选中Use LORA,并调整训练参数。

  • Training Steps Per Image (Epochs):指训练的迭代次数。默认为100,可根据实际需要调整。
  • Batch Size:训练数据的大小。默认为1,一般设置为1或2。

如果您希望Finetune流程更快,可将Save Model Frequency (Epochs)Save Preview(s) Frequency (Epochs)参数值调大(如果设置的值较小,可能会导致Finetune时间较长且不稳定),不超过最大的Epochs数即可,最大的Epochs数=每张图片训练迭代次数Epochs*图片数量N。关于性能提升的更多信息,请参见Aiacc-training性能提升

c.滚动鼠标将页面下拉,取消选中Gradient Checkpointing

d.在Optimizer中选择Torch AdamWMixed Precision选择fp16或者noMemory Attention选择xformers或者no,当Mixed Precision选择fp16时,才能选择xformers

3.选择训练数据集。

a.在Input区域的Concepts页签下,在Dataset DIrectory中填入云服务器ECS中的数据集路径。
您可以将10张以内同一物体的图片上传到指定路径。
本示例中上传图片的路径为/root/stable-diffusion-webui/test_imgs

b.在Training PromptsSample Prompts区域,配置以下参数。

  • Instance Prompt:输入对数据集物体的描述,格式例如:a <物体名称> <物体类别>。本示例输入a yunxiaobao doll
  • Class Prompt:输入数据集物体的类别,格式例如:a <物体类别>,本示例输入a doll
  • Sample Image Prompt:输入和Instance Prompt参数一致的内容。本示例输入a yunxiaobao doll

4.单击Train,在弹出的对话框中单击确定
训练大约需要3分钟,请您耐心等待。训练完成后,在Output区域显示类似如下图片。
说明:训练时间和实例规格、带宽峰值及其相关配置有关,这里的训练时间仅供参考。

生成图片

Finetune完成后,您可以通过以下3种方法生成图片。

使用Dreambooth生成图片

Finetune完成后,可以通过一些文字生成特定物体的图像。

1.单击Stable DIffusion checkpoint中的按钮,从下拉框中选择之前Finetune好的模型权重。例如:aliyun_example/aliyun_example_400_lora.safetensors [5b28fda46c]

2.单击txt2img,在Prompt框中输入之前Finetune使用的Instance Prompt的内容。例如:a yunxiaobao doll

3.在Batch count后输入生成图片的数量,默认为1。

4.单击右侧的Generate,即可生成对应的物体图片。

5.单击Save,保存图片。
您也可以单击Zip,压缩后保存图片,然后单击Download下载图片。

如果您选择Finetune前的模型权重v1-5-pruned-emaonly.safetensors [6ce0161689],生成的图片类似如下图所示。

用于Finetune的原图片如下图所示,可见Finetune后的模型能够很好地生成所需图片,而Finetune前的模型则无法生成所需要的云小宝玩偶图片。


使用Dreambooth+新的prompt生成图片

使用Dreambooth生成图片后,您可以通过修改Prompt可以对特定的物体添加不同的装饰和背景。例如:将a yunxiaobao doll改成a yunxiaobao doll wearing a red hat,可以生成戴着红帽子的云小宝玩偶。

1.单击txt2img,在Prompt框中输入a yunxiaobao doll wearing a red hat

2.单击右侧的Generate,即可生成类似下图的图片。


使用DreamBooth+ControlNet生成图片

使用Dreambooth生成图片后,您可以使用ControlNet生成特定姿态的图片。ControlNet通过Prompt+ControlNet Condition生成该Condition下特定姿态的图片。本示例通过ControlNet可以生成特定姿态的云小宝,操作步骤如下:

1.在txt2img页签下,单击ControlNet,然后上传希望生成的姿态的图片。

2.选中Enable,单击按钮,在Preprocessor下拉选项中选择Openpose

3.在Model下拉选项中,选择control_sd15_openpose
根据Condition的不同,PreprocessorModel的选择也不同,Openpose相关选项用于姿态的调整,其余设置与Dreambooth中的设置相同。

4.单击Generate,即可生成对应姿态的云小宝玩偶图片。


Aiacc-training性能提升

本示例以ECS实例的规格为ecs.gn7i-c32g1.32xlarge(4卡A10),Finetune4张图片,Training Steps Per Image(Epochs)设置为200为例,使用eager和AIACC-AGSpeed训练时间对比如下所示:

  • eager(原生训练方式)
  • AIACC-AGSpeed

从上图可以看出,加入AIACC-AGSpeed后,将Save Model Frequency (Epochs)Save Preview(s) Frequency (Epochs)设置为1000,以减少保存文件的时间对整体时间统计的影响,训练性能提升大约18%。如果您想要获取极致的加速性能,可在WebUI页面修改以下参数值:

  • Training Steps Per Image (Epochs):默认值为100,可修改为150或200。
  • Save Model Frequency (Epochs):默认值为25,可修改为1000。
  • Save Preview(s) Frequency (Epochs):默认值为5,可修改为1000。

了解更多AIGC实践和GPU优惠

反馈与建议

如果您在使用教程或实践过程中有任何问题或建议,可以使用钉钉扫描以下二维码加入客户钉钉群(也可以搜索钉钉群号28335015590加入)与我们的工程师线上交流,将有专人跟进您的问题和建议。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
人工智能 搜索推荐
AIGC工具——Stable Diffusion
【1月更文挑战第11天】AIGC工具——Stable Diffusion
392 2
AIGC工具——Stable Diffusion
|
6月前
|
前端开发 Linux PyTorch
Stable Diffusion 本地安装 | AIGC
今天要介绍Stable Diffusion webUI则第三方通过Gradio搭建的Stable Diffusion的web前端,功能丰富,而且所有功能都是开源的。 【1月更文挑战第7天】
348 0
|
6月前
|
机器学习/深度学习 自然语言处理
文生图模型-Stable Diffusion | AIGC
所谓的生成式模型就是通过文本或者随机采样的方式来得到一张图或者一段话的模型,比如文生图,顾名思义通过文本描述来生成图像的过程。当前流行的文生图模型,如DALE-2, midjourney以及今天要介绍的Stable Diffusion,这3种都是基于Diffusion扩散模型【1月更文挑战第6天】
834 0
|
6月前
|
编解码 人工智能 自然语言处理
AIGC基础模型——扩散模型(Diffusion Model)
【1月更文挑战第23天】AIGC基础模型——扩散模型(Diffusion Model)
432 1
AIGC基础模型——扩散模型(Diffusion Model)
|
4月前
|
机器学习/深度学习 数据采集 人工智能
「AIGC」Stable Diffusion教程详解
**Stable Diffusion教程摘要:** Stable Diffusion是AI绘画工具,利用GAN学习艺术家风格。基础教程涵盖软件介绍、配置需求(NVIDIA GPU、Windows 10/11)、安装及基础操作,如模型切换、VAE使用、采样步数调整等。AI作画原理涉及U-net、Diffusion模型、文本映射(如CLIP)和条件生成。Stable Diffusion运用Latent Diffusion Model从潜在空间生成高清图像,开源且在艺术创作中广泛应用。
148 0
|
6月前
|
人工智能 运维 API
基于PAI-EAS一键部署Stable Diffusion AIGC绘画
教程中,您将学习如何使用阿里云模型在线服务(PAI-EAS)的预置镜像,快速部署AIGC Stable Diffusion SDWebUI绘画的AI-Web应用,以及启动WebUI进行模型推理。
|
6月前
|
机器学习/深度学习 数据采集 人工智能
基于Stable Diffusion的AIGC服饰穿搭实践
基于Stable Diffusion的AIGC服饰穿搭实践
539 1
|
8天前
|
人工智能 自然语言处理 数据可视化
什么是AIGC?如何使用AIGC技术辅助办公?
2分钟了解AIGC技术及其如何提高日常办公效率!
42 4
什么是AIGC?如何使用AIGC技术辅助办公?
|
4月前
|
存储 自然语言处理 API
通义万相AIGC技术Web服务体验评测
随着人工智能技术的不断进步,图像生成技术已成为创意产业的一大助力。通义万相AIGC技术,作为阿里云推出的一项先进技术,旨在通过文本到图像、涂鸦转换、人像风格重塑及人物写真创建等功能,加速艺术家和设计师的创作流程。本文将详细评测这一技术的实际应用体验。
189 4
|
26天前
|
人工智能 自然语言处理 数据挖掘
Claude 3.5:一场AI技术的惊艳飞跃 | AIGC
在这个科技日新月异的时代,人工智能(AI)的进步令人惊叹。博主体验了Claude 3.5 Sonnet的最新功能,对其卓越的性能、强大的内容创作与理解能力、创新的Artifacts功能、视觉理解与文本转录能力、革命性的“computeruse”功能、广泛的应用场景与兼容性以及成本效益和易用性深感震撼。这篇介绍将带你一窥其技术前沿的魅力。【10月更文挑战第12天】
58 1