亚马逊云科技面向游戏运营活动的AI生图解决方案

news2024/11/20 7:21:01

随着Stable Diffusion等AI生图方案逐步普及,越来越多的场景被开发和落地。其中面向游戏C端玩家的AI生图营销活动场景正在被逐步验证:在某个游戏社区中,玩家一键从手机上传一张照片,AI会将自动识别该照片中的元素并替换成游戏中相应的角色或物品,替换后的照片可以进一步被玩家传播,进而扩大活动影响力。这样的活动已经被应用于游戏新版本发布、展会等场景,能有效提升玩家与游戏之间的粘性,让玩家成为游戏的推广大使,为游戏拉新。

 本文将探讨如何高效地搭建方案架构——游戏AI生图活动,以下为要点:

  • 包含了游戏风格与素材的AI模型,并调试出相应的推理算法。

  • 有效触达游戏玩家的客户端,可以是游戏客户端本身,也可以是社交媒体,比如常见的游戏玩家聚集地,海外有Discord,国内有Fanbook、微信等。

  • 一套能快速伸缩承载高并发出图请求的后端架构:本方案选用EKS,搭载了EFS、Bottlerocket、GPU时间分片虚拟化和Karpenter等组件作为演示的后端架构。

 方案架构

 方案上大致可以划分两大部份:

 客户端和请求接入层:

 首先我们选择Discord作为我们的客户端。Discord是一款集语音、视频以及文字聊天于一体的服务软件。最早服务于电子游戏社区,但现在也用于AI、Web 3.0、艺术、音乐等领域。用户可以在Discord上创建和加入各种类型的服务器,与其他用户进行实时的聊天和交流。Discord服务器是Discord的核心功能,每个服务器里还能有自己的频道,用户可以在频道内与其他用户进行实时的文字、语音和视频聊天。在我们的场景里面,游戏玩家正是通过这些频道发起生图请求,并通过Discord服务器传递到接入层中。

 接入层实现了一个Discord bot,该bot包含两部分功能:1,更新command,command是用于引导游戏玩家便捷输入照片和提示词,并获得相应的输出照片。2,对来自游戏玩家的请求做筛选过滤和初步处理,在3秒钟之内(Discord协议规定)做出初步响应,同时把符合条件需要生图的请求转发给SQS。

 接入层的Discord bot的实现参考了Amazon Blog:An elastic deployment of Stable Diffusion with Discord on AWS,采用的是API Gateway+Lambda的Serverless架构,该架构提供了事件驱动型计算服务,使用者无需预置服务器便可快速构建自动扩展的程序。Discord bot是SQS消息队列的生产端,通过SQS来实现与后端AI推理层的解耦。

 后端AI推理集群:

 SQS的消费端是基于EKS构建起来后端AI推理集群。

 首先,是一个controller模块,它会从SQS消费来自游戏玩家的消息以及相应的消息回调接口,之后按频道把消息分发到不同的Stable Diffusion(SD)生图服务中,等待生图完成后,会再把生成的图片等结果发送到指定的消息回调接口,至此,一条游戏玩家生图请求就算最终完成了。

 其次,是sd-svc服务,每一个服务托管了一种我们预设好的Stable Diffusion模型和算法组合,在本文后续部份,我们将会用AUTOMATIC1111/stable-diffusion-webui来托管我们的模型和算法。AUTOMATIC1111/stable-diffusion-webui是一款当前流行的基于Stable Diffusion打造的工具应用,通过它可以方便进行文生图和图生图,并集成各种社区的插件,比如LoRA和ControlNet等。它自带Web界面,也同时支持Web API访问,本文中将使用Web API来访问。

 在模型选择上,我们将选择一个已经事先训练好的包含魔兽世界游戏素材的模型rpg_V4.safetensors,以及一个ControlNet Canny模型control_v11p_sd15_canny做为演示。在实际项目中,您还可以根据实际的游戏,利用该游戏素材,训练出具备该游戏特色的模型(关于Stable Diffusion模型训练,不是本文重点,如果感兴趣,可以参考如Hugging Face的训练一个diffusion模型文档)。

 在面向C端游戏玩家的场景,如何在满足高并发的服务的同时,也兼顾成本效益,这是绕不开的话题,为此我们做了以下优化:

  • bottlerocket-images-cache+高性能EBS:实现快速集群扩容。一般的扩容过程是:请求新增Node→启动并初始化Node→启动Pod→拉取Container镜像→启动进程初始化→开始提供服务,由于Stable Diffusion用到的pytorch框架以及相应依赖的工具包还有模型十分巨大,一个包含这些完整工具链+模型的镜像往往会达到10G以上,再加上Stable Diffusion webUI本身在第一次启动还有初始化过程,会导致集群扩容过程缓慢,一次扩容往往会达到10分钟以上。这样的扩容速度在面向C端场景里面,会显得比较滞后。我们的做法是:提前预设好优化过的容器镜像,并通过bottlerocket-image-cache把镜像制作成snapshot,做为volumn 被Node在启动时挂载,同时适当提升该volumn的IO吞吐,从而节省了大量的启动和初始化时间。在我们的实验环境里,总共13GB(运行环境78G+2G的Checkpoint模型文件+1.3G的ControlNet模型文件)的镜像在优化之后,搭配IO吞吐为500MB的GP3 EBS,从请求Node到可以开始提供服务(已加载ckpt模型)一共花了1:40分钟。

  • EFS:实现模型文件一份存储和被动态加载。所有pod都可以通过挂载同一个EFS文件系统,实现动态加载模型的效果,运维人员只需要维护一份模型文件即可。同时EFS优秀的IO吞吐(Gbit/s级别)也保障模型加载的速度。

  • GPU分片:提升GPU使用率,降低成本。如果您选用的GPU卡性能很强劲,而且AI推理的任务比较简单,无法占满该GPU卡,那么可以考虑让多个推理任务同时复用一张GPU卡来提升GPU卡的使用率。利用NVIDIA/k8s-device-plugin的时间分片能力可以很方便的管理GPU的算力。在我们的实验环境中,我们把一张型号为A10g的显卡切分为3个分片,每个分片各跑一个pod,在推理任务接连不断满负荷的情况下,GPU的利用率可以提升9%(相同工作量的任务,总完成时间减少11.9%)。

  • Karpenter+Spot:更高的集群利用率加上更好的成本方案,进一步优化成本。

 总结

 在游戏领域,AI生图营销活动正迅速兴起。本文以方案架构为基础,探讨了面向玩家的AI生图活动的工程化解决方案。通过在Discord等平台引入AIGC生图服务,玩家能够将照片转化为游戏元素,增强了互动与推广效果。这些创新措施共同提升了活动的性能与可扩展性,为玩家创造了流畅而个性化的体验,同时降低了运营成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4-2 张量的数据运算

张量数学运算主要有:标量运算,向量运算,矩阵运算,以及使用非常强大而灵活的爱因斯坦求和函数torch.einsum(重难点)进行任意维的张量运算。此外还会介绍张量运算的广播机制。 一,标量运算 (操作…

Vue3高频面试题+八股文

Vue3.0中的Composition Api 开始之前 Compos:1 tion API可以说是ue3的最大特点,那么为什么要推出Compos1t1on Api,解决了什么问趣? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的…

【JavaScript内置对象】Date对象,从零开始

【JavaScript内置对象】Date对象,从零开始 时间的表示方式 时间表示的基本概念 最初,人们是通过观察太阳的位置来决定时间的,但是这种方式有一个最大的弊端就是不同区域位置大家使用的时间是不一致的。 相互之间没有办法通过一个统一的时间…

15W SIP木质网络音箱

SV-7041VP15W SIP木质网络音箱 一、描述 SV-7041VP是深圳锐科达电子有限公司的一款壁挂式SIP网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率15W。同时它可以外接一个15W的无源副音箱&#xff0c…

LeetCode每日一题:1222. 可以攻击国王的皇后(2023.9.14 C++)

目录 1222. 可以攻击国王的皇后 题目描述: 实现代码与解析: 模拟 原理思路: 1222. 可以攻击国王的皇后 题目描述: 在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 …

Flutter与Native通信原理剖析与实践

通信原理 我们分几种场景来介绍Flutter和Native之间的通信。 Native发送数据给FlutterFlutter发送数据给NativeFlutter发送数据给Native,然后Native回传数据给Flutter Flutter与Native通信机制 在讲解Flutter与Native之间是如何传递数据之前,我们先了…

k8s集群中部署项目之流水线

微服务项目部署之流水线编写 一、部署微服务项目环境说明 1.1 代码托管到gitee 1.2 镜像托管到dockerhub 用户名:nextgomsb 密码:abc***.com1.3 流水线工具 KubeSphere 二、通过KubeSphere部署之拉取代码流水线编写 2.1 准备凭证 2.2 编辑流水线 pipe…

MySQL学习6:索引

来源 教学视频来源:黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括 简介 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着…

vue事件处理表单输入绑定

1.监听事件 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click"handler" 或 click"handler"。 事件处理器 (handler) 的值可以是: 内联事件处理器:事…

使用Git把项目上传到Gitee的详细步骤

1.到Git官网下载并安装 2.到Gitee官网进行注册,然后在Gitee中新建一个远程仓库 3.设置远程仓库的参数 4.返回Gitee查看仓库是否生成成功 5.新建一个文件夹作为你的本地仓库 6.将新建好的文件夹初始化成本地仓库 第一步:右键点击刚创建的本地仓库&#…

2003-2018年各省能源结构(煤炭占比)(含原始数据和计算过程)

2003-2018年各省能源结构(煤炭占比)(含原始数据和计算过程) 1、时间:2003-2018年 2、指标:原煤、洗精煤、其他洗煤、型煤、焦炭、焦炉煤气、其他煤气、其他焦化产品、原油、汽油、煤油、柴油、燃料油、液…

基于python解决鸡兔同笼问题

一、什么是鸡兔同笼问题? 鸡兔同笼问题是一个经典的数学问题。问题描述:鸡和兔子共有头数a和脚数b,求鸡和兔子的数量。 解析:设鸡的数量为x,兔子的数量为y,那么可以得到以下两个方程: 1. x y…

C++ PrimerPlus 复习 第二章 进入c++

第一章 命令编译链接文件 make文件 文章目录 创建C程序;C程序的一般格式;main()函数;使用cout对象进行输出,使用cin对象进行输入;coutcin #include编译指令;名称空间定义和使用简单函数。在C程序中加入注释&#xff1…

Nginx配置指南:如何定位、解读与优化Linux上的Nginx设置

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

Harmony系统更改手机IP

在当今的互联网环境中,我们经常需要更改手机的IP地址来绕过限制或保护我们的隐私。虽然在一些操作系统上更改IP地址相对较容易,但在Harmony系统上,这可能会有些困难。因此,本文将分享一种在Harmony系统上免费更改手机IP地址的方法…

linux 下实现一个进度条

倒计时 理解 printf 打印的内容是被放在输出缓冲区的 fflush(stdout) 刷新 输出缓冲区;\n 也是一种刷新的策略我们称之为行刷新 理解一下回车换行 首先:回车是回车 换行是换行 回车是回到这一行的开头 换行是换到下一行 所以我们平时使用的 Enter 键 …

一线大厂Redis高并发缓存架构实战与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失…

二叉树的概念及存储结构

目录 1.树的概念 1.1树的相关概念 1.2树的表示与应用 2.二叉树的概念及结构 2.1二叉树的概念 2.1.1特殊的二叉树 2.2.2二叉树的性质 2.2二叉树的结构 2.2.1顺序存储 2.2.2链式存储 这是一篇纯理论的博客,会对数据结构中的二叉树进行详细的讲解,让你对树的能有个清晰的…

智能语音机器人竞品调研

一、腾讯云-智能客服机器人 链接地址:智能客服机器人_在线智能客服_智能客服解决方案 - 腾讯云 二、阿里云-智能语音机器人 链接地址:智能对话机器人-阿里云帮助中心 链接地址:智能外呼机器人的业务架构_智能外呼机器人-阿里云帮助中心 三、火…

word文档怎么转换成pdf?几个实用文档转换方法

word文档怎么转换成pdf?PDF文档可以保护文档的格式和布局。如果你将Word文档发送给他人,他人可能会使用不同版本的Word软件打开文档,导致格式和布局发生变化。但是,如果你将Word文档转换为PDF文档,无论对方使用什么软件…