数据缓存系列分享(五):零代码搭建妙鸭相机

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本文会解读妙鸭相机的开源项目facechain的基本原理,并演示如何通过阿里云ECI在云上零代码快速搭建一台个人的“妙鸭相机”。

背景

关于AIGC如何落地一直是业界热门的话题,最早也是最成功的应用场景便是微软的Bing、office365炫酷集成自家的GPT。然而,这些应用仅仅只是开始,随着AIGC的门槛逐渐降低,基于AIGC的创新应用会越来越多。最近各种大模型独立APP开始涌现,阿里的秒鸭相机便是其中之一,并一度成为刷屏各种社交网站的网红APP。这类独立应用的火爆,除了AIGC本身已经发展到了一个相当高的水平,以及颠覆传统行业的噱头,还有一个很重要的因素就是让大模型应用真正走近了普通大众,让每个人都可以感受到AIGC的创造力,体验从未有过的参与感。

Facechain

阿里达摩院近期推出了开源版“妙鸭相机”,也就是 facechain。facechain的基本原理是典型的SD + LoRA,其详细介绍可以参考:Using LoRA for Efficient Stable Diffusion Fine-Tuning。大致总结下就是,LoRA最开始是微软为大语言模型调优设计的,后来是Simo Ryu大佬让SD模型也能使用LoRA进行微调,而且获得了不错的效果,现在已经成为了一种标准用法。

要通过SD生成个人照片,首先需要利用有限的几张原图通过在线训练得到个人专属的面部LoRA权重,然后就可以基于标准的SD base模型生成各种风格且具有本人面孔的照片。facechain在这个基础上,还使用了多种人像、皮肤相关的模型进行人像优化,生成最终用户满意的照片。大致的流程如下图所示:

83e1b12c-2924-46f8-be5f-0f7bb35b5a04.jpeg

虽然目前开源的版本下载下来稍加配置就可部署使用,但是存在如下几个问题:

1、训练和推理的过程中会直接从模型hub下载模型,整个应用涉及10+模型,大小约25GB,导致整体耗时非常长;直接下载公网模型对带宽以及网络的稳定性要求很高,一旦无法下载就会失败;

2、不支持人脸记忆,只能基于当前最新的训练结果进行推理,即不能保留历史训练出来的lora权重。

3、hard code比较多,如果想换个模型或者更新版本等,需要手动改不少代码,维护复杂,配置不灵活。

针对以上的问题,我们初步做了个优化版本,见:eci-facechain,主要优化总结如下:

1、我们把模型放入ECI数据缓存(放入NAS/OSS 也可以),应用启动后不再从hub下载模型。

2、支持人脸记忆,训练流程支持给人脸打tag,推理流程支持选择历史上所有训练过的人脸进行生成。

3、新增env配置项,无需修改应用代码即可通过容器env动态自定义SD的模型、版本、目录、以及应用端口等。

4、丰富了webui,比如支持设置生成照片的像素等,对于高清照片生成非常重要。

5、我们基于改进版直接出了公共的容器镜像:registry.cn-hangzhou.aliyuncs.com/eci_open/facechain:1.0.2,相关修改正在往社区主线进行pr。

接下来我们就演示如何在ECI控制台轻松部署一台妙鸭相机。

准备模型缓存

本样例使用的模型是 ly261666/cv_portrait_model,用最新的v4.0版本。

1、找到模型id以及版本

bab9be07-91d2-408b-856a-200887932c93.png

{
"repoSource": "ModelScope/Model",
"repoId": "ly261666/cv_portrait_model",
"revision": "v4.0"}

2、创建模型缓存

进入ECI数据缓存 控制台

9bdbd564-d55b-4276-a3ce-6b3ab340630f.png



虽然常用的公共模型已经做了加速,但是可能需要访问模型仓库实时的meta信息,如果选择的vsw没有配置公网访问能力,建议单独配置缓存的公网带宽。如果命中仓库信息的缓存,最终也不会产生额外费用:

43ec8470-3a10-4a98-8284-4004089064d5.png

待缓存状态变成Available之后,这个缓存就永久地存在了。要记住这个自定义bucket名字以及模型存放目录,后面部署应用会用到。比如本样例:

bucket名:modelScope-model

cache存放目录:/models/modelScope-model/ly261666/cv_portrait_model/v4.0


更多关于ECI数据缓存的介绍可以参考:

openAPI:https://help.aliyun.com/document_detail/2391452.html

k8s API:https://help.aliyun.com/document_detail/2412299.html



部署ECI容器

进入ECI 创建页面

1、选择GPU规格

容器组配置 -> 指定规格 -> GPU

选择最低GPU配置即可,不需要很高的配置,本样例使用的是 ecs.gn7i-c8g1.2xlarge

注:推荐使用抢占型实例,选择更便宜的GPU卡

1f4d738a-5346-4413-8109-11e16ee51c77 (1).png

2、选择facechain容器镜像

容器配置->选择容器镜像->常用镜像

翻到最后一页,找到facechain以及版本:

8c5f633b-18a0-41c8-b5bc-41aea272c7c2.png


如果是非杭州地区,无法通过常用镜像界面直接勾选,手动填入即可,效果是一样的。

镜像:registry.cn-hangzhou.aliyuncs.com/eci_open/facechain

版本:1.0.2

3、模型挂载

数据缓存->缓存Bucket->添加

将前面创建好的模型缓存bucket以及目录挂载进facechain容器的 /mnt/workspace/.cache/modelscope/ly261666/cv_portrait_model/

9253a450-fe6f-4601-a2e4-423c7430bb95.png

ec4c240c-1c21-4df1-9202-c4775c5418eb.png

4、公网配置

如果需要通过公网webui访问妙鸭相机,需要分配公网ip,不需要很高的带宽,默认5M就足够。

fd4c8052-2f35-4ec3-9a5c-059a235526af.png



其他参数全部默认值即可。至此,妙鸭相机就已经部署完成,可以使用了。

5、访问应用

访问方式主要有两种

1、公网ip:端口

541d745a-1b08-46a1-9ae9-8f45d486815d.png

查看eci分配的公网ip地址,然后浏览器输入ip:8888即可访问:

24cbc883-d579-46f9-a332-549875e91fb2.png

2、直接调接口

参考facechain的 官方文档



测试

形象定制

上传1~10张自己的照片,同一个人,当然越多越好,训练越精准。

给人脸打tag,默认可以不打。

上传完成,点击开始训练,大约2~3分钟左右可以训练完成。

形象体验

训练完成后进入形象体验

如果前面训练给人脸打了tag,需要点击下刷新人脸按钮同步最新的人脸记录。

已经内置了部分咒语,可以直接使用也可以自定义。

想要生成高清照片,设置长宽像素即可,注意像素要是8的整倍数,过大可能会导致显存OOM,量力而行。

点击开始生成就可以开始生成照片了。



原图:

4268eb44-13c6-408b-a992-a556fd29d874.png

生成:

截屏2023-08-29 下午1.06.43.png



总结

关于排队:与传统的终端照片处理APP不同,AIGC的在线训练和推理都是要在服务端计算节点的GPU卡上进行,无法在用户本地完成,单个需求的处理耗时都是按分钟计算的,因此妙鸭上线后经常高峰要排队几个小时才能出图。借助阿里云足够大的算力池子,目前可以很好地缓解这个问题。

关于费用:妙鸭相机的一组写真的价格是9块9,外面影楼一组写真价格至少200块起步+各种套路,而ECI的费用是(训练+推理+所有用户操作合计耗时按5分钟计算):计算费用0.795+临时存储费用0.00219=0.797,即使跑满1小时无限出图费用也只需9块5,而这还没有考虑使用抢占型实例的折扣,比如如果选择抢占型的T4的卡,可以低至10%。

随着AIGC的界面不断上移,底层大模型的差异对于终端用户感知越来越不明显,可以预见未来独立大模型应用重点优化的方向依然是成本和用户体验,其实就是用户能感知的排队时间以及价格。谁能用更短的排队时间、更低的价格满足用户的需求,谁就能占据这个应用市场。然而这两者实际很难兼得,低的排队时间的背后必然是更多的算力成本投入,云的弹性会在这中间起到非常关键的作用。


QA

1、模型缓存制作失败

1、是否打开了公网,获取仓库meta数据的时候可能没有缓存,需要通过公网获取。

2、options参数拷贝是否错误。

2、公网无法访问应用

1、创建ECI实例时没有配置公网(自动、手动eip)

2、安全组是否打开8888端口,参考:

e404496f-a05e-41ea-8d17-1920122e9dc0.png

如果想使用其他端口,前面部署的时候通过设置容器环境变量APP_PORT来指定端口即可。

3、应用是否正常启动,是不是配置错了启动命令(默认无需任何设置),查看容器日志看启动输出。

3、训练、推理Error

1、控制台查看容器日志,一般运行错误会有详细地标准错误输出。

2、如果是OOM,建议照片改小的像素,或者重新用更大的GPU显存规格部署应用。

3、照片长宽像素不是8的整倍数。

4、各版本之间的差异

1.0.0

最基础的版本

1.0.1

支持更自由的图片生成咒语、支持设置图片像素等

1.0.2

支持人脸记忆,也是功能相对齐全、操作流程清晰的版本,推荐的版本

1.0.3

引入controlNet,支持自定义照片pose等,配置更多,而且部分模型还没正式开源

由于facechain才刚开源不久,迭代比较快,但是我们制作的镜像版本间差异很小,模型也是独立出来的,部署上没有任何区别。


附录

数据缓存系列分享(一):打开大模型应用的另一种方式

数据缓存系列分享(二):23秒完成从零开始搭建StableDiffusion

数据缓存系列分享(三):通过 StableDiffusion 扩展插件实现网红爆款文字光影图

数据缓存系列分享(四):开源大语言模型通义千问快速体验

数据缓存系列分享(五):零代码搭建妙鸭相机

数据缓存系列分享(六):通义千问Qwen-14B大模型快速体验

相关实践学习
利用大模型大规模分发技术,实现AIGC在线应用秒级弹性
通过ECI的数据缓存技术实现大模型的快速分发,将模型与应用解耦,敏捷部署,实现秒级在线弹性启动。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
存储 缓存 分布式计算
亿级数据如何分钟级别写入缓存?
亿级数据如何分钟级别写入缓存?
32 0
|
6天前
|
缓存 JavaScript
vue使用localStorage缓存数据
vue使用localStorage缓存数据
|
6天前
|
缓存 NoSQL 算法
17- 数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据 ?
保证Redis中的20w数据为热点数据,可以通过设置Redis的LFU(Least Frequently Used)淘汰策略。这样,当数据库有1000万数据而Redis仅能缓存20w时,LFU会自动移除使用频率最低的项,确保缓存中的数据是最常使用的。
67 8
|
1天前
|
存储 缓存 监控
|
5天前
|
存储 缓存 JavaScript
vue中缓存页面数据(刷新不丢失)
vue中缓存页面数据(刷新不丢失)
|
6天前
|
存储 缓存 NoSQL
数据缓存,可以尝试用RocksDB了
`shigen`,一个专注于Java、Python、Vue和Shell的博主,探讨了为何在学习阿里云DRM产品时选择RocksDB而非Redis或Guava。RocksDB是一个高速、可配置的存储系统,适用于Flash和HDFS,支持数据压缩。与Redis相比,RocksDB在高速存储和灵活性上更具优势。在尝试使用RocksDB与SpringBoot集成时遇到问题,目前尚未解决。他还对比了RocksDB、Redis和Guava Cache的特性,强调RocksDB适合大规模、高性能场景,而Redis适合内存存储和实时性需求。
17 0
数据缓存,可以尝试用RocksDB了
|
6天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
24 0
|
6天前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
39 2
|
6天前
|
canal 缓存 关系型数据库
Canal实现0侵入同步缓存数据
Canal实现0侵入同步缓存数据
13 0