亚马逊云科技面向游戏运营活动的AI生图解决方案
随着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生图服务,玩家能够将照片转化为游戏元素,增强了互动与推广效果。这些创新措施共同提升了活动的性能与可扩展性,为玩家创造了流畅而个性化的体验,同时降低了运营成本。
相关文章:
亚马逊云科技面向游戏运营活动的AI生图解决方案
随着Stable Diffusion等AI生图方案逐步普及,越来越多的场景被开发和落地。其中面向游戏C端玩家的AI生图营销活动场景正在被逐步验证:在某个游戏社区中,玩家一键从手机上传一张照片,AI会将自动识别该照片中的元素并替换成游戏中相应…...
腾讯mini项目-【指标监控服务重构】2023-07-30
今日已办 调研 CPU & Memory Cadivisor Cadivisor -> Prometheus -> (Grafana / SigNoz Web) google/cadvisor: Analyzes resource usage and performance characteristics of running containers. (github.com) services:cadvisor:image: gcr.io/ca…...
Windows 下 MySQL 8.1 图形化界面安装、配置详解
首先我们下载安装包 官方下载链接: MySQL :: Begin Your Download 网盘链接: https://pan.baidu.com/s/1FOew6-93XpknB-bYDhDYPw 提取码: brys 外网下载慢的同学可以使用上述网盘链接 下载完成后我们双击安装包即可进入安装界面 点击next 勾选同意协议&#…...
WebRTC 源码 编译 iOS端
1. 获取依赖工具 首先,确保你已经安装了以下工具: GitDepot ToolsXcode(确保已安装命令行工具) 2. 下载 depot_tools 使用 git 克隆 depot_tools 并将其添加到你的 PATH 中: /path/to/depot_tools 替换为自己的路径…...
Python编程指南:利用HTTP和HTTPS适配器实现智能路由
嗨,爬虫大佬们!今天我要为大家分享一篇关于如何利用HTTP和HTTPS适配器来实现智能路由的Python编程指南。在现代互联网应用中,路由功能起着至关重要的作用,而利用Python编程语言实现智能路由则可以为我们的应用带来更高的灵活性和性…...
MySQL 权限分配
有时候,您需要查看某个用户被授予的权限以便复核。 MySQL 允许您使用 SHOW GRANTS 语句来显示分配给用户帐户或角色的权限。 MySQL SHOW GRANTS 语句介绍 以下是 SHOW GRANTS 语句的基本语法: SHOW GRANTS [FOR {user | role} [USING role [, role] .…...
基于PHP的医药博客管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的医药博客管理系统 一 介绍 此医药博客系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。用户可注册登录,查看/评论/搜索博客,建议留言。管理员可对用户&a…...
spark SQLQueryTestSuite sql 自动化测试用例
把SQL 添加到自动化测试用例。 ./sql/core/src/test/resources/sql-tests/inputs 目录存放原始的SQL. ./sql/core/src/test/resources/sql-tests/results存放SQL的执行结果。在执行测试时,根据最新生成的结果和 ./sql/core/src/test/resources/sql-tests/results 进…...
Taro小程序隐私协议开发指南填坑
一. 配置文件app.config.js export default {...__usePrivacyCheck__: true,... }二. 开发者工具基础库修改 原因:从基础库 2.32.3 开始支持 修改路径:详情->本地设置->调试基础库 三. 用户隐私保护指引更新 修改路径:mp后台->设…...
iOS App上传到苹果应用市场构建版本的图文教程
使用hbuilderx的h5或uniapp框架写的前端,进行云打包ios应用,会生成一个ipa后缀的应用文件。这个文件是没有办法像安卓应用那样直接安装在手机上面的。需要上架到苹果应用商店,用户才能下载安装使用。 因此,我们这篇文章讲详细介绍…...
paddle框架的使用
Paddle是由百度开发的深度学习框架,支持声明式和命令式编程风格。它还支持深度神经网络的超大规模训练和神经架构的自动设计。您可以使用 Paddle 构建用于训练的神经网络模型,具体步骤如下: 导入桨模块和其他必要的模块,如numpy&…...
Spring Boot + Vue的网上商城之基于element ui后台管理系统搭建
Spring Boot Vue的网上商城之基于element ui后台管理系统搭建 在本篇博客中,我们将使用Spring Boot和Vue来构建一个基于element ui的后台管理系统。我们将详细介绍每个步骤,并提供完整的代码示例,包括配置文件和组件。此外,我们…...
Linux基础入门
一、操作系统安装方法 1、使用u盘安装 工具(前提条件): <1>u盘 <2>镜像文件iso/msdn.itellyou.cn <3>把u盘做成PE:大白菜/老毛桃/winPE/软碟通/ultralSO 设置BIOS:通过u盘启动 安装系统&…...
Unity工具——LightTransition(光照过渡)
需求描述 在游戏中,开发者为了让玩家更直接地看到待拾取的物品从而为其添加一种闪烁效果,或者模拟现实中闪烁的灯光效果,我能够想到的一种方案则是通过控制光照强度来实现,那么本篇文章我们就尝试通过这个方案来实现一下ÿ…...
【深度学习】 Python 和 NumPy 系列教程(十四):Matplotlib详解:1、2d绘图(下):箱线图、热力图、面积图、等高线图、极坐标图
目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 0. 设置中文字体 1-5. 折线图、散点图、柱状图、直方图、饼图 6. 箱线图(Box Plot) 7. 热力图(Heatmap) 8. 面积图(Area Plot) 9. 等…...
IMU+摄像头实现无标记运动捕捉
惯性传感和计算机视觉的进步为在临床和自然环境中获得精准数据带来了新可能。然而在临床应用时需要仔细地将传感器与身体对齐,这减慢了数据收集过程。 随着无标记运动捕捉的发展,研究者们提出了一个新的深度学习模型,利用来自视觉、惯性传感…...
前后端分离,JSON数据如何交互
如何接收: 在配置文件商法加上相应注解 EnableWebMvc 在接收的路径上加上RequestBody注解 注解的作用:在Spring框架中,RequestBody注解用于将HTTP请求的body中的内容转换为Java对象,并将其作为参数传递给控制器方法。它通常用…...
docker中已创建容器的修改方法
环境信息以CentOS8为例 停止容器 #docker stop 容器名或id docker stop mysql停止docker服务 systemctl stop docker修改docker配置文件 配置文件在: /var/lib/docker/containers/{容器id} 如:/var/lib/docker/containers/92acfba87567bcca981ad17c0e…...
uniapp中video播放视频上按钮没显示的问题
video标签层级很高,尝试了添加z-index,但无效果 通过查阅资料,得知cover-view层级比video层级高 效果图 需求是为了使直播时,可选是原画/流畅 解决方案 首先,在pages.json中配置右上角的图标 {"path" : …...
docker学习:dockerfile和docker-compose
学习如何使用dockerfile 以下内容,部分来自gpt生成,里面的描述可能会出现问题,但代码部分,我都会进行测试。 1. 需求 对于一个docker,例如python,我们需要其在构建成容器时,就有np。有以下两种方…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
