内容提要
本文介绍了为设计师构建的云原生AI图像与视频素材生成平台Open Gallery的架构实践。平台基于AWS云原生技术栈,采用前端、后端、推理层三层分离设计,集成ComfyUI等模型。核心亮点包括:通过KEDA和Karpenter实现两级弹性伸缩,按队列深度自动扩缩GPU资源;利用Agent编排自动路由多模型;存储采用冷热分层策略。文章分享了从零到生产的技术决策、实施阶段及踩坑经验。
延伸解读
为什么推理层必须与业务后端分离
文章强调GPU实例成本是CPU的10倍以上,且推理与业务伸缩节奏不同。若将两者绑定,每个后端副本都需GPU,造成浪费。分离后,后端按在线用户数扩容,推理层按队列深度伸缩,各自独立优化。这一决策对成本控制至关重要,也是架构设计中的关键权衡。
两级弹性伸缩的实战调优
KEDA负责Pod级伸缩,基于队列深度而非CPU利用率,更贴合GPU推理场景。Karpenter负责Node级,自动启动或回收GPU实例。文中提到探测间隔30秒、缩容稳定窗口300秒等参数,并强调端到端冷启动约2-3分钟。这些细节对实际部署有直接参考价值,避免盲目照搬默认配置。
冷热分层存储的取舍
模型文件大且读多写少,应用数据小且读写频繁,一刀切存储不可行。文章采用NVMe SSD存热模型、S3挂载存温模型、DynamoDB/SQLite存结构化数据。这种分层兼顾性能与成本,但需注意S3挂载的延迟问题,因此用DaemonSet预同步模型到本地NVMe,缓解加载延迟。
Q&A
Open Gallery 平台主要解决设计师的什么问题?
Open Gallery 是一个面向设计师的 AI 图像与视频素材生成平台,旨在解决设计师使用多个 AI 工具(如 Midjourney、Stable Diffusion)时遇到的工具分散、素材手动整理、计费复杂等问题,提供一个统一的工作台,支持多模型接入、画布式交互、对话式编辑,并支持私有化部署以满足合规需求。
Open Gallery 的总体架构是怎样的?为什么将 GPU 推理服务与业务后端分离?
Open Gallery 采用三层分离架构:前端层(React 19 + Vite + Zustand + Excalidraw/tldraw)、后端层(Python FastAPI,分为 API 路由、服务、工具三层)、推理层(ComfyUI 运行在 NVIDIA GPU 容器中)。分离的原因是 GPU 实例成本高(是 CPU 的 10 倍以上),且推理服务与业务逻辑的伸缩节奏不同(推理按队列深度,业务按在线用户数),分离可以独立优化伸缩策略,避免资源浪费。
Open Gallery 如何实现弹性伸缩?KEDA 和 Karpenter 分别负责什么?
Open Gallery 采用两级弹性伸缩:Pod 级由 KEDA 驱动,基于 ComfyUI 任务队列深度(QueuePending)进行伸缩,通过 metrics sidecar 采集指标并上报 CloudWatch,KEDA 监听触发扩容;Node 级由 Karpenter 驱动,当新 Pod 因缺少 GPU 节点而 Pending 时,Karpenter 自动启动匹配的 EC2 实例(如 g5/g6e),负载下降后自动回收空闲节点。两者通过 Kubernetes 原生调度协同,实现按需使用 GPU 资源。
Open Gallery 如何实现多模型路由和 Agent 编排?
Open Gallery 集成了多种图像生成后端(ComfyUI、Replicate、OpenAI 等),并通过 Strands Agents 框架构建编排层。用户只需用自然语言描述意图,Agent 会根据任务类型、复杂度、当前各后端负载自动路由到最合适的生成工具,并自动构建优化 prompt,降低用户使用门槛。
Open Gallery 的存储架构是如何设计的?冷热分层具体指什么?
存储采用冷热分层策略:热层是 NVMe SSD,存放正在被 GPU 使用的模型权重,通过 DaemonSet 从 S3 预同步到本地,追求极致 I/O 性能;温层是 S3 + CSI Driver 挂载,存放完整模型库,配置 metadata-ttl 缓存;冷层是 DynamoDB(生产)或 SQLite(本地),存放结构化应用数据(画布、会话等)。用户上传文件也存 S3,通过 Mountpoint 挂载。
Open Gallery 的部署步骤主要有哪些?
部署分为三步:1. 基础配置:克隆代码、设置环境变量、配置 S3 PV/PVC 和 IAM 权限;2. 启动 ComfyUI:上传模型到 S3、构建 DaemonSet 镜像并启动(用于模型预热)、构建 ComfyUI 镜像并部署;3. 启动 Open Gallery:构建镜像并部署到 EKS,配置 COMFYUI_ENDPOINT 等环境变量。
Open Gallery 在冷启动优化方面采取了哪些措施?
冷启动优化主要采用三板斧:SOCI 懒加载、NVMe 预热、Readiness Probe。通过 DaemonSet 将模型从 S3 预同步到节点本地 NVMe 盘,减少模型加载延迟;使用 SOCI 实现镜像懒加载;Readiness Probe 确保服务就绪后再接收流量,从而缩短端到端扩容时间。