亚马逊AWS官方博客

生成式 AI 行业解决方案指南与部署实践

感谢大家阅读《生成式 AI 行业解决方案指南》系列博客,全系列分为 4 篇,将为大家系统地介绍生成式 AI 解决方案指南及其在电商、游戏、泛娱乐行业中的典型场景及应用实践。目录如下:

生成式 AI 和 Stable-diffusion

生成式 AI(Generative AI)可以生成自然语言、图像、视频和音乐等数字化内容。目前热点应用总体上可以分为基于 Stable Diffusion 的图片内容生成类任务以及基于大语言模型的文本生成任务。本方案指南将主要聚焦于图片内容生成任务,该领域已有大量客户在进行业务场景的探索和实践。例如在游戏客户通过生成式 AI,让游戏研发端的游戏策划通过文生图进行初步概念探索,美术原画师通过定制化的风格模型,加速生成新的角色和场景原画。泛娱乐客户使用生成式 AI 可以提升 IP 内容生产效率,从而扩大 IP 内容运营范畴与促进 IP 内容消费增长。电商客户通过生成式 AI 可以加速电商营销物料的生产以及提升面向最终消费者的商品设计质量。制造客户通过生成式 AI 提升诸如产品概念图设计、营销物料等的创意水平及生产效率。

客户在以上诸多行业创新场景的探索中,普遍采用开源项目 Stable Diffusion 来实现图片等创意数字内容的生产。Stable Diffusion 是一种基于深度学习的文本到图像模型,由创业公司 Stability AI 开发,使用亚马逊云科技云资源进行训练并于 2022 年发布。它主要用于生成以文本描述为条件的详细图像,但它也可以应用于其他任务,例如基于已有图像生成新的图像,或者对现有图像进行微调。

Stable-Diffusion-Webui 是一个开源项目,提供了基于 Web 界面来使用 Stable Diffusion 模型的图片生成工具,其功能丰富,提供美术人员用可视化、低代码的方式控制参数、选用各类插件和风格模型进行美术图像生成,例如原始的文生图/图生图、局部修复、外部扩展、颜色轮廓图、提示词矩阵、图片上采样、注意力机制、环路(多轮图生图绘制)、X/Y/Z 图表、图片缩放、CKPT 模型合并/转化、脚本化定制等,也支持多种模型(Dreambooth,ControlNet,Lora)微调的方法来进一步提升出图的效果来满足业务需求。但是该开源项目本质上是一个单体应用,利用本地的 GPU 完成图片生成、模型微调,在扩展性、健壮性、稳定性存在无法满足行业客户需求的问题。例如:

1)无论是图片生成还是模型微调都需要 GPU 资源,其他的图片生成和模型微调任务存在排队等待 GPU 可用;

2)不适合多人同时使用,配置信息是全局的,无法做到个性化设置;

3)缺少必要的用户认证、授权、资源访问控制、个性化配置、并行执行多个任务等功能;

4)开发者贡献的插件与主分支是分别开发的,易出现由于版本不匹配导致无法工作的现象。

生成式 AI 行业解决方案指南

针对图片生成领域的生成式 AI 行业解决方案指南是基于开源项目 stable-diffusion-webui 构建,并综合考虑它的特点和客户实际生产需求进行了一些功能增强。与开源项目对比,具有如下特点:

1)把原来的单体应用解耦为仅使用 CPU 的 UI 部分(托管在亚马逊云科技的弹性容器服务 Amazon ECS Fargate)以及需要使用 GPU 的图片生成和模型微调(使用亚马逊云科技的机器学习服务 Amazon SageMaker endpoint / training job)。

2)增强了用户认证、授权、资源访问控制、个性化配置,适合多用户同时使用,可以并行执行多个图片生成和模型微调任务、优化了训练和推理性能。

3)可以根据请求数利用 Amazon SageMaker endpoint 实现多实例自动伸缩,可以通过 Amazon SageMaker training job 同时发起多个模型微调任务。

4)针对社区版本和插件发展快,代码不一定稳定的情况,我们以某个阶段的社区版本为基础,不断更新迭代,在解耦过程中去有针对性的适配主流的插件:如 ControlNet、Lora、Dreambooth 等,定期升级主代码的版本。

5)提供了开箱即用的带有性能优化的 stable-diffusion-webui,支持 accelerate、deepspeeds、xformers、triton 等加速方案。

图 1:生产式 AI 解决方案指南系统架构

架构与工作原理

我们针对不同客户设计了不同版本的方案,1)UI 版本:比较适合企业内部用户同时使用,比如企业内部的设计师团队需要多人协同,并且需要一定程度的用户/权限隔离。2)API 版本:比较适合企业有自己的 UI,面向内部/外部的使用者,可以与我们方案指南提供的 API 集成,来使用运行在亚马逊云科技并使用本解决方案指南提供 Docker 镜像创建的训练和推理节点。

总的来说,两个版本具有以下一些共同特点:

  • 云原生:训练和推理任务运行在 Amazon SageMaker 上。
  • 支持多种模型: Stable-diffusion、ControlNet、Lora、VAE 等。
  • 支持多种模型微调方法:embedding、hypernetwork、Dreambooth,可以训练任务、对象、风格等。
  • GPU 支持:训练和推理任务都可以运行在 NVIDIA T4 / A10G / V100 / A100 GPUs。
  • 支持基于 5 和 SD2.1 Checkpoint 模型的动态切换。
  • 在创建训练任务时,可以动态加载某些预训练模型并将训练结果上传到亚马逊云科技的对象存储服务 Amazon S3 上。
  • 在创建推理任务时,可以在创建推理节点时指定来自于 Hugging Face、HTTP 站点、Amazon S3,在创建推理节点后,可以通过动态加载 Amazon S3 上的模型。
  • 基于 Amazon SageMaker Endpoint 节点动态伸缩功能,动态响应某个指标的变化。

图 2:UI 版 AIGC 解决方案指南系统架构

UI 版还有下述特点:

  • 在 Amazon ECS 的 CPU 实例上托管 stable-diffusion-webui。
  • 多用户支持:支持多用户同时使用,在执行训练/推理任务时可以使用每个用户的个性化设置,并实现多用户在训练/推理任务上的资源隔离和审计。

图 3:API 版解决方案指南系统架构

API 版还有下述特点:

  • 通过 API 网关 / Lambda 来管理各种运行在 Amazon SageMaker 上的训练/推理任务。
  • 紧跟最新的社区发展,可以灵活使用各种 stable-diffusion-webui 插件。

生成式 AI 行业解决方案指南部署

本文简要介绍 UI 版和 API 版部署过程,完整的过程请联系亚马逊云科技行业解决方案团队获得完整部署指南和源代码。

1. UI 版

1)构建和上传代码和训练/推理的 Docker 镜像分别到 Amazon S3 和 Amazon ECR。

cd deployment
./build_and_deploy.sh [s3url] [aws-region] stable-diffusion-webui

2)执行 CloudFormation,创建资源管理界面 web portal 和使用界面 stable-diffusion-webui 以及相应后端服务,在 CloudFormation 的输出页面找到资源管理界面 web portal 的 URL 和使用界面 stable-diffusion-webui 的 URL。

图 4:部署 CloudFormation 完成后的输出页面

3)在资源管理界面创建 Amazon SageMaker Endpoint。

图 5:在资源管理界面创建 Amazon SageMaker Endpoint

4)在使用界面 stable-diffusion-webui 通过 admin 账号管理用户。

图 6:在使用界面通过 admin 账号管理用户

5)在使用界面 stable-diffusion-webui 通过普通账号来选择 Amazon SageMaker endpoint 后生成图片和进行模型微调。

例 1 文生图
提示词 Portrait of gldot as a beautiful female model, georgia fowler, beautiful face, with short dark brown hair, in cyberpunk city at night. She is wearing a leather jacket, black jeans, dramatic lighting, (police badge:1.2)
负向提示词 anime, cartoon, penis, fake, drawing, illustration, boring, 3d render, long neck, out of frame, extra fingers, mutated hands, ((monochrome)), ((poorly drawn hands)), 3DCG, cgstation, ((flat chested)), red eyes, multiple subjects, extra heads, close up, man asian, text ,watermarks, logo, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, 3d, extra fingers, (((mutated hands and fingers)))
参数 Steps: 30, Sampler: Euler a, CFG scale: 6

表 1:文生图示例参数

图 7:UI 版文生图示例

例 2 图生图
提示词 Portrait of gldot as a beautiful female model, georgia fowler, beautiful face, with short golden hair, in cyberpunk city at night. She is wearing a leather jacket, black jeans, dramatic lighting, (police badge:1.2) <lora:galGadotLora_v10:0.8>
负向提示词 anime, cartoon, penis, fake, drawing, illustration, boring, 3d render, long neck, out of frame, extra fingers, mutated hands, ((monochrome)), ((poorly drawn hands)), 3DCG, cgstation, ((flat chested)), red eyes, multiple subjects, extra heads, close up, man asian, text ,watermarks, logo, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, 3d, extra fingers, (((mutated hands and fingers)))
参数 Steps: 30, Sampler: Euler a, CFG scale: 6

表 2:图生图示例参数

图 8:UI 版图生图示例

2. API 版

1)通过 Jupyter Notebook 创建和上传训练和推理的 Docker 镜像到 Amazon ECR、创建 Amazon SageMaker Endpoint、并使用脚本生成图片。

2)构建和上传代码到 Amazon S3。

3)执行 CloudFormation,创建 Amazon API 网关和相应的后端服务。

4)通过 Amazon API 网关提供的 RESTful API 来时使用图片生成和模型微调。

5)通过脚本来使用 ControlNet 模型来生成图片。

from sagemaker.serializers import JSONSerializer
from sagemaker.deserializers import JSONDeserializer

predictor.serializer = JSONSerializer()
predictor.deserializer = JSONDeserializer()

inputs = {
    "task": "text-to-image",
    "model": "v1-5-pruned.ckpt",
    "txt2img_payload": {
        "enable_hr": False,
        "denoising_strength": 0,
        "hr_scale": 2,
        "hr_upscaler": "",
        "hr_second_pass_steps": 0,
        "hr_resize_x": 0,
        "hr_resize_y": 0,
        "prompt": "masterpiece, best quality, highres,a fire balloon, sky, cloud ",
        "styles": [""],
        "seed": 1115411476,
        "subseed": -1,
        "subseed_strength": 0,
        "seed_resize_from_h": -1,
        "seed_resize_from_w": -1,
        "sampler_name": "",
        "batch_size": 1,
        "n_iter": 1,
        "steps": 20,
        "cfg_scale": 7,
        "width": 512,
        "height": 512,
        "restore_faces": False,
        "tiling": False,
        "do_not_save_samples": False,
        "do_not_save_grid": False,
        "negative_prompt": "easynegative",
        "eta": 0,
        "s_churn": 0,
        "s_tmax": 0,
        "s_tmin": 0,
        "s_noise": 1,
        "override_settings": {},
        "override_settings_restore_afterwards": True,
        "script_args": [],
        "sampler_index": "DPM++ SDE Karras",
        "script_name": "",
        "send_images": True,
        "save_images": False,
        "alwayson_scripts": {
            "controlnet": {
                "args": [
                    {
                        "enabled": True,
                        "module": "scribble_hed",
                        "model": "control_v11p_sd15_scribble [d4ba51ff]",
                        "weight": 0.7,
                        "image": encode_image_to_base64(image),
                        "low_vram": False,
                        "processor_res": 512,
                        "threshold_a": 32,
                        "threshold_b": 64,
                        "guidance_start": 0,
                        "guidance_end": 0.7,
                    }
                ]
            }
        }
    
}
prediction = predictor.predict_async(inputs)

6)通过 RESTful API 来使用 ControlNet 模型来生成图片。

将上述的 inputs 的内容放到一个文件 inference.json,通过 HTTP POST 方法来请求 API 网关。

curl -X POST -H 'Content-Type: application/json' "https://[ApiGatewayProdEndpoint] /inference?endpoint_name=all-in-one-ai-stable-diffusion-webui-in-XXXX" --data '@./inference.json'

7)最终使用 ControlNet 模型生成图片

ControlNet 输入图片 AI 生成效果图

总结

本文聚焦在目前生成式 AI 中图片等创意内容的生成任务,介绍了多个行业的业务场景,以及使用 Stable-diffusion 模型和开源项目 stable-diffusion-webui,构建了基于 stable-diffusion-webui 的生成式 AI 行业解决方案指南,并概述了相关的系统架构、部署方案、使用 UI 版和 API 版完成基本的图片生成任务。接下来我们会结合游戏、电商、泛娱乐等多个行业中不同业务场景在后续的博客中来介绍如何应用本解决方案指南去解决具体业务问题。

参考资料

本篇作者

解永良

亚马逊云科技高级行业解决方案架构师,负责人工智能/机器学习相关的行业解决方案的设计、开发和推广。拥有多年的分布式系统、人工智能/机器学习、复杂软件设计与研发、解决方案等相关经验。

汪竞帆

亚马逊云科技行业解决方案架构师,主要领域包含金融,零售与生成式 AI。曾就职于 IBM,负责金融行业客户解决方案。目前针对用户数据平台,生成式 AI 解决方案等在香港业务的推广。

王世帅

王世帅,亚马逊云科技机器学习产品技术专家,负责基于亚马逊云科技的机器学习方案的咨询与设计,专注于机器学习的推广与应用,对于云端深度学习模型分布式训练,NLP 等领域有丰富经验,多次面向开发者进行云端机器学习产品的介绍与最佳实践经验分享。

谢川

亚马逊云科技项目经理,负责云服务在中国的部署以及客户体验改进。曾在通信,电商,互联网等行业有多年的产品设计和开发经验,并且拥有多个 AI 应用方面的发明专利。

詹健宇

亚马逊云技术客户经理,在内核安全、电商推荐、机器学习领域均有经验。目前专注于 AI/ML 领域,致力于结合客户场景的 AI 解决方案的落地。

欧阳梅子

亚马逊云科技机器学习领域技术客户经理,专注于为企业级客户提供人工智能和机器学习技术域的架构设计,优化、和深度技术支持,具有丰富的解决客户实际问题、落地大型机器学习项目的经验。