一、背景
自GPT大火之后,各种大模型相关的技术层出不穷,最火的莫过于文生图模型 Stable Diffusion、文生视频模型 Sora 等等。而基于此的AI应用更是层出不穷,例如之前让人眼前一亮的妙鸭相机,一股要颠覆传统美颜和PS的势头。
对于这类基于大模型的图片、视频类的产品应用,有一个共同的工程特点:功能耗时长。因为大模型处理图片和视频通常都很难做到秒级返回,等个10s甚至分钟、小时以上目前都是符合用户预期的。
二、架构思考
假设现在要做一个类似妙鸭相机的产品,我们可以将核心功能分为三大块:用户交互操作(产品交互工程)、用户耗时任务执行(业务工程)、大模型应用(算法工程)。用户交互操作自不必说,完成产品设计的要求即可,有一定的定制属性。大模型应用偏算法工程类,本文暂不多说,可以参考我在 Stable Diffusion学习分享中的一些思路,找到工程和算法结合的落地实践。本文重点说一下用户耗时任务执行,这里的耗时任务无法在一次请求中返回任务结果,必须用户等待一段时间的场景。
如果是初级工程师,其实也可以不用考虑用户任务执行这一块内容,直接跟用户交互操作的业务代码耦合到一起去做,也能实现功能。但我相信看到这篇文章的都是有追求的工程师,我们要做的不仅仅是业务开发,而是平台架构,希望通过可扩展、业务无关的代码去长期低成本支持更多产品能力的快速孵化。因此对于此类场景,各位看官且看我庖丁解牛~
对于上面的产品能力,我们针对耗时任务从2个角度分析,这也是通用方案设计的常见分析角度:
-
从平台业务能力的角度出发,直观可以发现几大特点:
-
任务可能有多种,比如1张照片生成4张,20张照片生成20张,制作好的照片2次加工等 => 任务分类,策略执行
-
用户需要提前上传一些素材,对于其他文生X的场景,可能是用户的一些输入(文字、图片、视频、文档、表格等等) => 任务数据预处理+存储
-
任务提交后,不一定马上执行,需要排队 => 任务排队机制+耗时预估
-
任务执行完成后需要通知 => 通知机制
-
任务可能是多流程节点的 => 需要工作流的能力, 这里跟耗时任务可以解耦开来看,是否引入工作流具体看流程复杂度
-
从稳定性&性能的角度考虑,还能挖出以下几点: