当前位置:要闻 > 要闻 > 正文
亚马逊云科技提供扩容迅速、成本低、维护方便的Stable Diffusion开源方案
2023-11-08 12:54:37 来源:

Stable Diffusion是当下生成式AI领域最受欢迎的开源多模态语言-图像模型,由于其易用的接口和良好的使用体验,受到了开源社区和广大设计行业从业者的追捧。Stable Diffusion模型版本正在快速迭代,并带动了各行各业的生产力变革。目前市场上有多种围绕Stable Diffusion模型的行业解决方案,比如亚马逊云科技推出的Stable Diffusion插件解决方案。本文中,将介绍一种更加适合toC场景的解决方案,它将帮助客户从容应对大并发量的请求,达到分钟级冷启动;使用更简单的控制平面,为客户提供更灵活的架构,轻松实现各种功能模块设计;同时,它还利用Amazon Spot instances,帮助客户有效控制成本。

方案特点

根据实际客户需求和案例经验,提炼出该方案的特点如下:

更快速的扩容,基于KEDA、Karpenter、Bottlerocket,提供可自定义的任务粒度的自动扩容能力,且最快可以达到1分钟内业务就绪,适合高并发且对响应时间有要求的情况。

大幅降低成本,通过使用Amazon Spot instances和Amazon EFS,使得计算成本相较于On-demand instances可节省最高约70%,多节点场景下的存储成本相较于EBS更可节省数倍。

运维非常方便,方案是云原生架构,基于Amazon EKS、无服务器(Serverless)和事件驱动(Event-Driven),大部分组件无需自行管理,适合运维人手不足的情况。

可视化监控,提供调用流程详细的可视化,历史统计与异常检测功能,有效缩短MTTI(Mean Time to Identify)。

自动化部署,方案使用AWS CDK,借助编程语言的强大表达能力和高效执行效率,仅需30-40分钟就可以自动完成构建。

方案架构

方案流程如下:

用户将提示词和参数通过http请求的方式,经过Amazon CloudFront加速,传递到应用服务器(可通过AWS Fargate部署)。

应用服务器完成相关业务处理后(如:认证鉴权/task跟踪/参数优化等),调用Amazon API Gateway提供的推理API接口,之后请求交由AWS Lambda校验并发布到Amazon SNS服务,并拿到同步响应。

Amazon SNS借助可自定义的filter规则将请求以异步消息的方式发布到对应的队列服务Amazon SQS中,多队列的设计可灵活适应复杂的业务需求。

KEDA会根据Amazon SQS中的消息数量,动态扩容Amazon EKS集群中的工作负载Pod。

扩容动作会借助Karpenter启动Amazon GPU Spot instances作为工作节点,并使用基于Bottlerocket构建的snapshot来快速启动Stable Diffusion WebUI工作负载。

Stable Diffusion WebUI以指定配置参数启动,并从Amazon EFS中加载基础模型文件。

Queue Agent从任务队列中拉取任务,完成相关处理(下载输入图片/切换基础模型等),调用Stable Diffusion WebUI的API完成推理并生成结果,将结果图片保存到Amazon S3中。

Queue Agent将任务响应数据发布到Amazon SNS服务,以便应用服务器能够通过多种方式(Amazon SQS/Http Endpoint)获取异步响应数据并进行后续业务处理。

方案使用Amazon CloudWatch、AWS Distro for OpenTelemetry和AWS X-Ray来采集、追踪和展示相关过程中产生的日志和指标。

方案还使用了AWS IAM来控制资源的访问授权,使用Amazon ECR存储容器镜像,使用AWS DataSync同步模型文件,使用AWS CDK来完成自动化部署。

主要服务列表:

Amazon Elastic Kubernetes Service(Amazon EKS):是一项托管Kubernetes服务,用于在AWS Cloud上运行Kubernetes。在云中,Amazon EKS可自动管理负责安排容器、管理应用程序可用性、存储集群数据和其他关键任务的Kubernetes控制面板节点的可用性和可扩展性。

Amazon ECR:Amazon Elastic Container Registry是完全托管式容器注册表,提供高性能托管,让您能在任何地方可靠地部署应用程序映像和构件。

AWS Lambda:AWS Lambda是一项事件驱动、随用随付的计算服务,让您无需预置或管理服务器即可运行代码。

Amazon SQS:Amazon Simple Queue Service(SQS)是一种消息队列服务,可让您分离和扩展微服务、分布式系统和无服务器应用程序。

Amazon SNS:Amazon Simple Notification Service(SNS)是一项用于应用与应用之间(A2A)以及应用与人之间(A2P)通信的完全托管式消息收发服务。

Amazon API Gateway:Amazon API Gateway是一种完全托管式服务,可以轻松创建、发布任意规模的API。

Amazon CloudWatch:Amazon CloudWatch会在自动化控制面板中收集并可视化实时日志、指标和事件数据,从而简化您的基础设施和应用程序维护。

AWS X-Ray:AWS X-Ray通过您的应用程序时会提供完整的请求视图,并通过无代码和低代码移动过滤负载、函数、轨迹、服务、API等方面的可视化数据。

Amazon S3:Amazon Simple Storage Service(Amazon S3)是一项对象存储服务,旨在存储和保护任意量的数据。

Amazon EFS:适用于构建人员的无服务器、完全弹性的文件系统,可以轻松设置、扩展高可用性共享存储并对其进行成本优化。

AWS DataSync:安全的,可自动化并加速本地存储和亚马逊云科技存储服务之间的数据移动服务。

方案实践

前置条件

需提前熟悉Amazon EC2、AWS CDK、Docker、Amazon ECR、Amazon EKS。

本方案后续步骤的前置条件如下:

Kubernetes cluster 1.22+

Helm CLI

Node.js 16+

AWS CDK CLI

An AWS Account

Administrator or equivalent privilege

本方案默认使用G5系列机型(如需使用其它系列机型可修改运行时Helm Chart的配置karpenter.provisioner.instanceType),推荐的区域(Region)如下:

US East(N. Virginia)us-east-1

US West(Oregon)us-west-2

本方案建议准备一个可访问互联网的调试部署环境,该环境需要能运行AWS cli、Git、Docker、NPM、AWS CDK、kubectl、eksctl等命令。建议您使用AWS Cloud9或Amazon SageMaker Notebook来进行部署。

环境部署

环境准备:

此方案已在Github上开源。

方案效果

方案部署完成以后,可以使用代码或者Postman等方式构造http请求并发送,将获取的API Endpoint做为请求URL,Method为Post,Body为application/json。

文生图结果:

图生图结果:

注:结果图片和响应数据,会存储到相关的S3 output bucket中以便后续访问。

方案细节

更快的启动时间:toC业务往往具有高并发的特点,为了迅速响应请求,本方案使用Karpenter进行node的弹性伸缩,底层直接调用了EC2 fleet API,结合基于Bottlerocket构建的snapshot,使得服务冷启动时间最快可达到1分钟内。

更低的成本:通过使用Spot实例和混合GPU实例大幅度降低推理成本。虽然Spot实例有被回收的风险,但由于Stable Diffusion单任务耗时短且无状态,而且在Spot实例回收前会处理相应事件并重新启动新的实例,故Spot实例完全可以胜任该场景推理需求。Karpenter默认使用pricing-capacity-optimized的Spot实例选择策略,会优先使用回收风险最低,且最廉价的Spot实例类型。当遇到Spot实例无法启动时,将以On-demand方式启动,且支持异构和不同家族的实例。

更简单的控制平面:EKS可直接使用Karpenter和KEDA等社区组件进行任务调度和弹性伸缩,使用Amazon SQS的消息数作为弹性指标更贴近实际业务需求。

更灵活的设计:可以使用多个Amazon SQS队列并结合Amazon SNS的filter功能,来满足不同业务场景的架构设计需求。例如通过创建针对特定基础模型的专用队列,避免基础模型频繁切换以加快特定模型的生图速度,而对于需要切换主模型的请求可以将其路由到专门的动态队列处理。例如为付费用户的请求设置单独的专用队列,用更多的资源提供更好的服务等。

更精细的并发控制:将Queue Agent与SD WebUI部署在同一Pod,以拉的模式来处理异步任务,能够对并发进行灵活精细的控制,缓解了SD WebUI负载过重无法响应或超时等问题,同时也方便调整超时时间和重试策略等参数来进行针对性优化。

更好的兼容性:对SD WebUI Runtime无侵入,可兼容官方各版本的Runtime或客户定制的Runtime,将定制化的部分放到Queue Agent以方便二次开发。支持异步响应以多种方式(Http/Https/SQS)发送到目标和Amazon SageMaker异步响应规范。

更直观的监控:集成了AWS X-Ray、Amazon CloudWatch和AWS Distro for OpenTelemetry,可以更直观地跟踪整个流程,查看日志和相关指标(例如:流程各环节调用状态和耗时/共享存储的IO/工作节点的负载等)。

更方便易用:方案基于AWS CDK自动进行部署(根据不同环境估算约30-40分钟),并提供了模型文件自动同步(Amazon S3→Amazon EFS)、模型文件批量下载上传、图片浏览应用等辅助工具。

结论

根据Gartner披露的“人工智能技术成熟度曲线”,生成式AI仍处于需求的快速增长期,其广阔的应用场景和巨大需求空间吸引着大量资本和技术的投入,预计将在2-5年内实现规模化应用。作为开源多模态生成式AI领域的领导者,Stability.ai推出了更为强大的Stable Diffusion XL 1.0,并发布在Amazon BedRock上。

本文介绍了一种扩容迅速、成本低、维护方便的Stable Diffusion开源方案,适合熟悉容器,无服务器并需要以快速扩展和低成本方式部署Stable Diffusion模型的学生、设计师和开发人员,应用在高速发展的toC业务中。亚马逊云科技致力于为客户提供丰富而功能强大的图像生成方案,也支持开源并持续推动优化,为业务创新提供更好的助力。

原标题:云端生成式AI——基于Amazon EKS的Stable Diffusion图像生成方案

原链接:https://aws.amazon.com/cn/blogs/china/stable-diffusion-image-generation-solution-based-on-amazon-eks/

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。

关键词:
责任编辑:zN_0802