技术分享 | 如何基于阿里云AIACC加速Stable-Diffusion AI绘画

简介: AIACC是基于阿里云IaaS资源推出的神龙AI性能加速套件,用于优化基于AI主流计算框架搭建的模型,能显著提升训练和推理性能。AIACC神龙AI推理加速套件由AIACC-Torch(Pytorch推理加速引擎)、AIACC-MLIR(MLIR推理加速引擎)、AIACC-HRT(AIACC算子深度加速引擎)等组件构成。AIACC神龙AI性能加速套件能够为Stable-Diffusion提供加速优化支持,在512x512分辨率下,可将单张图片的延迟从2秒降低至0.88秒,吞吐提速至原来的2.2倍。

社区 2.png

2023628日,阿里云与智东西公开课联合出品的系列课程「阿里云弹性计算技术公开课」正式播出,当前系列课程共7节课,阿里云弹性计算高级开发工程师吕倪祺作为第二位课程主讲人,带来了主题为《基于神龙AI加速 AIACC 加速Stable-Diffusion AI绘画》的课程分享。

 

AIACC是基于阿里云IaaS资源推出的神龙AI性能加速套件,用于优化基于AI主流计算框架搭建的模型,能显著提升训练和推理性能。AIACC神龙AI推理加速套件由AIACC-Torch(Pytorch推理加速引擎)AIACC-MLIR(MLIR推理加速引擎)AIACC-HRT(AIACC算子深度加速引擎)等组件构成。AIACC神龙AI性能加速套件能够为Stable-Diffusion提供加速优化支持,在512x512分辨率下,可将单张图片的延迟从2秒降低至0.88秒,吞吐提速至原来的2.2倍。

本篇文章根据吕倪祺的课程整理而成,供读者阅览。

 

大家好,我是来自阿里云弹性计算团队的吕倪祺,今天希望可以和大家一起体验如何使用阿里云计算巢平台去搭建一个包含AIACC神龙AI加速套件的Stable-Diffusion的部署环境,并进行测试使用。


幻灯片2.PNG


一、基于计算巢搭建Stable-Diffusion开发环境

 

Stable-Diffusion是目前AIGC在生图方向上集质量高、速度快、成本低等众多优点于一身的,可以说是目前AI生图领域的六边形战士,综合实力非常强大。通过使用Diffusion Model(扩散模型),其在保证高分辨率创作图的同时,极大地降低了资源消耗量。同时在文生图、图生图等多个场景,都有不错的表现。


同时要强调的是:Stable-Diffusion的模型和整体框架都是开源的,因此Stable-Diffusion可以发展成一个大型的开源社区。我们可以从Civitai上下载所需要的模型,然后从Github 上去安装一些需要的插件,也可以嵌入自己的修改模型。这对于开发者或者进阶的使用者提供了更多的可能性。

 

由于此篇内容的分享主要是基于已经训练好的Stable-Diffusion模型来进行推理,因此接下来我将着重介绍Stable-Diffusion的推理流程。


幻灯片4.PNG


以文生图场景为例,文字首先通过一个特殊的Transformer语言模型(Cli模型),将文字进行编码,编码为token embeddings的向量。经过Clip后,我们就可以用embeddings去控制图片的生成,所谓的"DIffusion"过程也是指的这部分。我们会从个随机成的隐变量开始,通过循序渐进的式,逐步扩散,直变为个清晰的图

 

Image Information Creator包含两部分,UNetSchedulerUnet个噪声预测器,也就是我们上下载到的模型的主要部分。通过将前中的embeddingscross attention 层的计算,我们可以预测每step的噪声,并使这个噪声更贴合我们输字。

 

Scheduler Web UI中也被称之为采样器,它控制了unet的输出结果的处理方式个好的Scheduler可以更少的step 数获得更好的效果。 通过若UnetScheduler的迭代,我们最终得到了噪的隐变量。我们还需要将这个隐变量恢复成眼可的图。这时就需要 Autoencoder上线了,我们可以使Autoencoderdecoder部分去解码这个隐变量,变成个最终的图


幻灯片5.PNG


神龙AI加速套件AIACC是基于阿里云IaaS资源推出的AI加速套件,用于优化基于AI主流计算框架搭建的模型,能显著提升训练和推理性能。当前AIACC推理引擎包含AIACC-TorchPytorch推理加速引擎)、AIACC-MLIRMLIR推理加速引擎)、AIACC-HRTAIACC算子深度加速引擎)几个组件。

 

AIACC-TorchPytorch推理加速引擎)主要用于业界主流的PyTorch 模型的推理加速引擎;AIACC-MLIRMLIR推理加速引擎)是基于MLIR用于优化tensorflow的加速引擎;AIACC-HRTAIACC算子深度加速引擎)是阿里云底层高性能的限制加速库。在Stable-Diffusion的场景中,我们使用了AIACC-TorchAIACC-HRT两大组件进行了优化加速的支持。

 

上图左侧是AIACC-Torch的架构图,在使用AIACC-Torch时,首先会将原始的PyTorch模型训练成一个Toy scribe的模型,然后在Toy scribeAR上进行一系列优化,包括图融合等,然后就可以得到一个更干净、更高效的一个图片。之后通过PyTorch Operation Parser自动将底层模型转化成AIACC-HRT模型,以提供一个极致的性能加速。加速后的模型会跟原始模型一样,可以通过torch.jit.load的方式进行加载。总体来讲,使用是比较方便的,而且支持动态的尺寸。

 

针对Stable-Diffusion这个场景中,我们使用了AIACC-TorchAIACC-HRT这两大组件进行了优化加速支持。在512×512的分辨率下,我们将单图推理延迟从1.88s降低至0.78s,吞吐提速至原有的2.4倍,相较xformers也可降低44%的延迟,同时我们⽀持了Lora的性能⽆损加速,⽀持任意多的Lora权重加载,且不损失性能。⽽原始的Web UI性能会随着Lora权重的变多⽽下降。使用controlnet时,AIACC-Torch可吞吐提升至原有的2.37倍,单张图片推理时间低至1.28s

 

如果有更多的除了Stable-Diffusion之外的模型的推理优化需求,可以参考如下通用文档:https://help.aliyun.com/document_detail/317822.html


幻灯片6.PNG


阿里云计算巢是一个面向ISVSIMSP(统称为服务商)的云集成PaaS平台,方便ISV服务商更好地将自身产品、服务和阿里云的产品集成,借助云原生的能力提升软件服务在交付、部署及后续管理等环节的效率和用户体验。最终用户可以通过计算巢管理其在阿里云上订阅的各类软件服务。计算巢为服务商和最终用户提供了一个云原生的服务交付平台和连接器,提供更高效、便捷、安全的软件服务和使用体验。

 

Stable diffusion AIACC加速社区版》现已作为推荐服务,上线计算巢。为了方便客户使用,推荐使用计算巢进行服务搭建。


幻灯片7.PNG


接下来我介绍一下如何在计算巢上搭建Stable-Diffusion服务实例并访问实例。

 

第一步,创建实例。可以选择在计算巢的推荐服务栏目中,直接点击《Stable diffusion AIACC加速社区版》的正式创建按钮开始创建,也可点击以下链接进行创建:https://computenest.console.aliyun.com/user/cn-hangzhou/serviceInstanceCreate


幻灯片8.PNG


第二步,地域、付费方式及实例类型选择。可以根据自己的需要选择北京、上海、杭州等国内地域,或者日本、新加坡等海外地域部署ECS实例,建议选择按量付费使用,在不使用时,可以选择停机不收费的模式,以节省开支。

 

可预选实例均为单卡A10实例,规格为ecs.gn7i-c16g1.4xlargeecs.gn7i-c32g1.8xlargeecs.gn7i-c48g1.12xlarge三种,主要区别是CPU及内存大小的不同。当部署大量模型时,大规格实例可以减少由于内存不足导致的OOM问题,大家可以根据需求选择适合自己的实例进行部署。


幻灯片9.PNG


第三步,密码及网络设置。实例密码用于ECS登录,当我们需要下载模型或检查系统运行状态时,我们可以使用此密码登录实例背后的ECS机器。而软件登录名及软件登录密码用于网页访问。由于创建的ECS将会暴露在公网上面,因此我们加入了nginx组件,进行网页鉴权,以避免网页被不明用户登录。此密码用于访问stable-diffusion网页客户端。

 

可用区配置则用于选择新创建的ECS所在的可用区。如有多机器部署需求,需要注意此选项,同一可用区内实例之间的网络延时更小。当希望将机器创建于已有VPC环境中时,可以关闭新建VPC选项,否则默认将新建VPC。当两台ECS处于相同VPC时,内部网络可以互通,而新建的VPC的内部网络则会和其他VPC隔离。


幻灯片10.PNG


第四步,配置完成后点击创建就可以进入到控制界面,查看服务部署状态,等待部署完成,用时大概消耗3-5分钟。部署完成后,点击实例ID,可以看到“EndPoint”公网地址,点击访问此公网地址,可以打开登录界面。输入软件登录名及软件登录密码(也就是步骤三中软件的登录名&密码),点击登录,即可打开Web UI界面。


第五步,登录实例所在ECS


幻灯片11.PNG


而当我们需要检查Stable-diffsion运行状态,下载软件/模型,或者查看Stable-diffsion运行日志时,我们可以登录ECS实例进行查看,进入服务实例详情的资源选项卡,点击远程连接,点击免密登录,即可进入网页terminal


图片.png


实例中的Stable-diffusion位于/root/stable-diffusion-webui/。如果需要重启服务,可以使用sudo systemctl stop sdwebui命令停止服务,而后使用sudo systemctl start sdwebui命令启动服务,日志文件会被写入/var/log/sdwebui.log,大家也可任意查看。


二、文生图和图生图的基础操作与使用


幻灯片13.PNG

SD模型选择:当有下载新的模型或者需要切换模型的时候,下拉此选项卡进行选择。镜像里预装了4个模型,包含Taiyi中文模型、Taiyi动漫中文模型、Stable-diffusion 1.5 基准模型和OpenJourney模型。

 

提示词和反向提示词:提示词由多部分组成,以英文逗号分隔,提示词应尽量具象,指明场景、事物、事件、风格等。这是文生图中最重要的可选参数,直接控制了生成图片的质量效果和生成图片的场景和物体。提示词由多个部分组成,用英文逗号分隔。建议大家使用提示词时,尽量具象的指明场景、事务、事件或是风格。

 

采样器和迭代步数:采样器用于控制Unet输出结果使用方式。迭代步数越高,最终出图的清晰度和画质就越好。

 

扩散度设置:CFG ScaleAI自由创作度,越小越保守,越大越开放。如果扩散度设置越大,它就会生成更多的多样性;反之如果越小,它就会越符合你的限制。

 

如上图所示,底部是图片生成种子。如果你从网上看到一张别人的比较优秀的这个图片,可以把它的种子填到这个地方。这样能保证在相同的参数配置下,你生成的图片和别人的是一样或是相似的。图片生成种子的右侧是图片保存设置。这里可以将你生成的图片发送到文图生图的地方去重新生成或者做局部绘制。


幻灯片14.PNG


下面我们以预装的Taiyi中文模型作为例子,来演示如何去使用文生图,具体步骤见上图:

 

首先,输入如下提示词,词语之间用逗号隔开。提示词:铁马冰河入梦来,概念画,科幻,玄幻,3D。反向提示词留空,其他选项均为默认选项,点击生成,即可生成一张与提示词描述相近的图片。此外可见当使用AIACC加速时,生成一张与提示词描述相近的图片,分辨率为512x512,用时为0.78s


幻灯片15.PNG


作为对比,如需禁用AIACC加速,我们可以在设置选项卡的AiaccTorch选项中关闭“Apply Aiacctorch”选项,并点击应用设置,重新执行一个图片生成。如需打开AIACC,也可在此界面打开“Apply Aiacctorch”选项,并点击应用设置。禁用AIACC性能加速后进行相同图片生成的时间则增加至1.88s。因此可见,AIACC能缩短58%的推理时间,或增加图片生成的吞吐量至原有的2.41倍。


幻灯片16.PNG


我们也可以用相同的操作在不同模型下进行图片生成,比如在Taiyi中文动漫模型中进行测试,见上图。

 

首先,输入提示词。提示词:1个女孩,绿眼,棒球帽,金色头发,闭嘴,帽子,看向阅图者,短发,简单背景,单人,上半身,T恤。

 

然后,输入反向提示词。反向提示词:水彩,漫画,扫描件,简朴的画作,动画截图,3D,像素风,原画,草图,手绘,铅笔。其他选项均为默认选项,点击生成。

 

可见通过AIACC加速生成一张动漫风格的图片,分辨率为512x512,用时为0.77s。点击页面中的图生图按钮,我们可以将此图片发送至图生图选项卡,进行下一步骤。


幻灯片17.PNG


进入图生图选项卡,我们使用文字和图片共同引导图片生成。同样,输入提示词。提示词:1个男孩。输入反向提示词。反向提示词:水彩,漫画,扫描件,简朴的画作,动画截图,3D,像素风,原画,草图,手绘,铅笔。

 

可以观察到输出图片仍然保留了输入图片的布局和风格,但中间的人物已经从女孩换成了男孩。由图可见,当使用AIACC加速时,单张图片耗时仅0.69s,而不做任何加速时,则需要1.59s,降低了56%的延迟。

 

三、Stable-Diffusion高级特性使用

 

接下来主要介绍Stable-Diffusion的一些高级特性,包含如何去使用Lora修改生成图片的细节,如何使用ControlNet来控制图片的形状;同时也会介绍如何通过API调用的方式执行图生图和文生图的操作。


image.png


Lora权重,全称是Low-Rank Adaptation,原本应用于大语言模型LLM Large Language Models)但由于其训练成本低、参数量少、使用方便,在Stable-diffusion模型中也有较多应用。点击右侧的附加网络按钮,打开附加网络选项,点击下方的Lora权重,如果选择一个Lora权重,权重配置字段会自动填入上方的提示词中。

 

Lora权重的格式为权重名:权重比例大小>Lora权重可以同时选中多个进行叠加。在Web UI中,Lora权重是可以同时选择多个进行叠加,但建议所有权重之和不要超过1,因为过大的Lora权重可能会导致中间某些层的输出结果溢出。


image.png


使用Lora权重之后,我们可以针对性的修改图片的某些风格和效果,例如上图的左图和右图,使用相同的A Girl, best quality, ultra-detailed, masterpiece, finely detail, highres, 8k wallpaper 提示词,seed=10,使用iuV35.uv1P这一Lora权重之后的生成图有明显的东亚女生的特征。

 

同时,AIACC也支持性能无损的Lora权重计算功能,使用Lora权重时,仍能维持0.78秒的单张图片生成时间。而与之相对应的使用torch进行推理时,需要2.06秒,且推理时间随Lora权重数量增加而增加。


image.png


ControlNet组件实际上是为我们提供了一种精确控制Stable-diffusion生成图片的方式。我们可以选择不同的预处理,通过边缘检测、姿态检测等方式,使用参考图控制去噪过程,ControlNet有如下几个关键的可选项:

 

· 控制类型:通过选择控制类型,可以选择我们想要进行的操作;

· 预处理器:设置处理参考图的方式,例如canny则可用canny算子进行边缘检测;

· 模型:设置生成图片所用的ControlNet模型;

· 控制权重:设置ControlNet所作用的权重,默认为1


image.png


上图是以计算机视觉中常用的Lenna图为例,使用ControlNetCanny预处理器和模型进行图片生成。设置提示词:A Girl, best quality, ultra-detailed, masterpiece, finely detail, highres, 8k wallpaper,模型为control_v11p_sd15_canny,其他选项为默认选项,点击生成可生成图片。

 

可见生成的图片与输入的参考图的整体布局十分相似,使用ControlNet这种方式,我们可以非常精确地控制所生成的图片。由图可见,当使用AIACC加速时,单张图片耗时仅1.28s,而不做任何加速时,则需要3.04s,降低了57%的延迟,AIACC大幅提升了生图性能。


image.png


此外对于有远程使用或是命令行调用的场景而言,Stable-DiffusionWeb UI还可使用API的方式进行调用。点击Weui的主界面最下角的“API”链接,即可跳转到API说明文档和可测试文档。


image.png


上图是两个简单的代码示例,分别是文生图和图生图。对于文生图场景来说,可以用POST请求url加上/sdapi/vi/txt2img这样一个API。在使用计算巢的时候,需要注意与标准的Stable-DiffusionWeb UI所不同的地方。首先创建一个session,然后去配置用户名和密码。这是因为在计算巢的实例中,使用了nginx去做了端口的转发和健全以避免恶意的访问。所以当使用Web UI调用的时候,需要使用session的接口把用户名跟密码加上。

 

随后的操作就与Stable-Diffusion官方的操作比较相似了,如上图示例,输入非常简单的提示词,即A Girl,然后设置seed的数等于1,然后去POST之后,会返回一个response。我们用JSON去把这个response重新加载回来,然后可以看到它的image是在这样一个数据当中,然后用base64编码过的。所以我还需要用base64去解码这个image,然后将它写入到一个文件当中,这个文件就是我们是已经生产的这个文件了。

 

图生图与文生图类似,不同的是需要用base64的编码去编码输入的图片。示例中用了open CV去读取这个图片,然后用base64去编码图片。之后就跟文生图类似,去请求/sdapi/vi/txt2img这样的API。然后将这个读取的图片放入到这个images这样一个字段当中,然后去请求。对生成图片也是一样的,也会存在一个用base64做个编码的这样一个格式的这个字段当中,最后把它写入到文件就ok了。


幻灯片25.PNG


想要关注阿里云AIGC方案的同学可以钉钉扫描上图左侧二维码入群,同时也可以扫描右侧二维码关注阿里云AIGC最新活动。想要了解更多精彩直播/观看课程回放的同学,可以扫描下方海报中的二维码/点击观看,均可观看完整课程回放。


视频号封面9-16吕倪祺.jpg








相关实践学习
2048小游戏
基于计算巢&ECS云服务器快速部署,带您畅玩2048小游戏。
相关文章
|
5天前
|
JSON 分布式计算 数据处理
加速数据处理与AI开发的利器:阿里云MaxFrame实验评测
随着数据量的爆炸式增长,传统数据分析方法逐渐显现出局限性。Python作为数据科学领域的主流语言,因其简洁易用和丰富的库支持备受青睐。阿里云推出的MaxFrame是一个专为Python开发者设计的分布式计算框架,旨在充分利用MaxCompute的强大能力,提供高效、灵活且易于使用的工具,应对大规模数据处理需求。MaxFrame不仅继承了Pandas等流行数据处理库的友好接口,还通过集成先进的分布式计算技术,显著提升了数据处理的速度和效率。
|
17天前
|
人工智能 Java Serverless
阿里云函数计算助力AI大模型快速部署
随着人工智能技术的快速发展,AI大模型已经成为企业数字化转型的重要工具。然而,对于许多业务人员、开发者以及企业来说,探索和利用AI大模型仍然面临诸多挑战。业务人员可能缺乏编程技能,难以快速上手AI模型;开发者可能受限于GPU资源,无法高效构建和部署AI应用;企业则希望简化技术门槛,以更低的成本和更高的效率利用AI大模型。
77 12
|
7天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
6天前
|
人工智能 大数据 测试技术
自主和开放并举 探索下一代阿里云AI基础设施固件创新
12月13日,固件产业技术创新联盟产业峰会在杭州举行,阿里云主导的开源固件测试平台发布和PCIe Switch固件技术亮相,成为会议焦点。
|
20天前
|
人工智能 NoSQL MongoDB
阿里云与MongoDB庆祝合作五周年,展望AI赋能新未来
阿里云与MongoDB庆祝合作五周年,展望AI赋能新未来
|
15天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
1天前
|
人工智能
阿里云领跑生成式AI工程领域,两大维度排名Gartner®生成式AI工程Market Quadrant全球第二
阿里云凭借强劲实力入选Gartner 《Innovation Guide for Generative AI Technologies》所有领域的新兴领导者象限。
|
7月前
|
机器学习/深度学习 自然语言处理
文生图模型-Stable Diffusion | AIGC
所谓的生成式模型就是通过文本或者随机采样的方式来得到一张图或者一段话的模型,比如文生图,顾名思义通过文本描述来生成图像的过程。当前流行的文生图模型,如DALE-2, midjourney以及今天要介绍的Stable Diffusion,这3种都是基于Diffusion扩散模型【1月更文挑战第6天】
884 0
|
7月前
|
人工智能 开发工具 git
【AI绘画】Stable Diffusion 客户端搭建
【AI绘画】Stable Diffusion 客户端搭建
194 0
【AI绘画】Stable Diffusion 客户端搭建
|
人工智能 物联网
AI 绘画Stable Diffusion 研究(十七)SD lora 详解(上)
AI 绘画Stable Diffusion 研究(十七)SD lora 详解(上)
1489 0