Datawhale X 魔搭 AI夏令营-AIGC Task 03 --笔记

前言
Task 03 的笔记包含三个部分内容,用于优化调整的工作流交互工具ComfyUILora微调模型以及本人最后的生图分享。学习,未完待续…

一、ComfyUI

1.1 关于ComfyUI

概念

ComfyUI是GUI(Graphical User Interface,图形用户界面)的一种。GUI定义是采用图形方式显示的计算机操作用户界面。个人理解就是,一种提供给用户用于跟计算机交互界面。相比于一行行的代码,交互界面的形式对于用户而言更加友好。

理解

ComfyUI把生图这个任务,拆分节点,通过模块化设计,把整个过程制作成一个由多个节点组成的工作流(就像完成任务“炒菜”,需要进行买菜、洗菜、切菜、备料等节点)。也像是把这个AI的“黑盒”过程,稍微的“拆盒”,让用户更加容易理解。

内容

结合具体的ComfyUI默认的default界面进行解释。
四个模块:模型加载器、提示词管理器、采样器和解码器。四个模块之间都有不同颜色的线相连,且每个连接点上都有标注其意义。

  • 模块加载器Loadcheckpoint,字面意思。(AI模型在完成训练优化测试后,如何保存数据模型参数等使得下次运行能够得到一样的结果? 设定checkpoint也就是Task 01中保存的ckpt文件,将模型的结构参数等一系列的数据都保存起来,下次使用直接导入节省训练寻优等过程)
  • 提示词管理器CLIP,也就是管理提示词prompt的,包括positive(正向)和negative(反向)两个。图中可见,上面那个是positive的,下面是negative。如何区分? 看采样器,两个prompt框各自跟Sampler采样器有连线,在Sampler的连接点上有标注。
  • 采样器Sampler,执行降噪操作,控制模型生成图片,采样器上有一系列的参数可以对生成的图片进行控制,包括随机数种子seed,次数steps等。通过调整这些参数可以影响最终生成图片的quality和divesity。
  • 解码器VAE,ComfyUI里的VAE意味解码器(一般ML里VAE代表Variational Autoencoder,变分自编码器,主要由编码器encoder和解码器decoder构成),在这主要是把之前embedding的向量解析成图像。

在这里插入图片描述

顺带整理整个过程,个人理解,仅供参考。

在这里插入图片描述

优势

这么做的优势很明显

  • 可视化和用户友好。提供可视化的界面,方便用户更好理解和使用。
  • 模块灵活。ComfyUI模块化的设计,详略得当,从整个生图任务中提取出主要的节点进行模块化封装,在使用的过程中可以灵活的按需对参数、流程等进行修改。
  • 调试优化方便。可视化的界面,可追溯的整个流程,要进行模型、参数的调试优化非常方便,且可以支持多个生成模型。
  • 可拓展。 ComfyUI是开源项目,可根据需要拓展系统功能。

1.2 ComfyUI安装

利用魔塔社区+阿里云服务器,开GPU环境
在这里插入图片描述
(1)创建新的终端terminal
在这里插入图片描述
下载comfyUI执行文件和之前Task 01 中的Lora微调文件

git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors_test_comfyui.git
mv kolors_test_comfyui/* ./
rm -rf kolors_test_comfyui/
mkdir -p /mnt/workspace/models/lightning_logs/version_0/checkpoints/
mv epoch=0-step=500.ckpt /mnt/workspace/models/lightning_logs/version_0/checkpoints/   

(2)终端显示“完成”,左侧出现三个文件表示完成。接着双击打开ComfyUI的jupyter文件
在这里插入图片描述
逐个模块运行,或者点上面的两个向右的横三角,表示该重启内核、ipynd文件内所有模块逐个运行。
在这里插入图片描述
直接拉到最后,等结果

在这里插入图片描述

1.3 ComfyUI试用

复制网络,新建网页,打开。然后360浏览器居然提醒我网页有问题…,当然是忽略提示继续开。
在这里插入图片描述
按照Task 03的教程,下载不带和带lora的工作流样例(json文件)进行测试。先上传json文件然后执行(过程需稍微等待)
在这里插入图片描述
用原始数据比较无聊,稍微修改了下试试,不带Lora的效果,待会做个对比。
在这里插入图片描述
带Lora的结果。
在这里插入图片描述

二、Lora微调

2.1 定义

Lora (Low-Rank Adaptation) 微调是一种用于在预训练模型上的高效微调技术。Lora微调技术的原理在于在预训练模型的关键层中添加低秩矩阵。

2.2 怎么理解

对于一个LLM模型,其模型权重参数量可能是10亿、100亿,训练完后,如果需要进行功能的拓展或迁移,会如何进行?

  • 全部重新训练(全量微调)?那需要大量的时间和算力成本,过于耗时。是否存在简便的方法,针对性的对参数进行调整?
  • 部分微调→Lora微调。在学习ML、DL,特别是正向传播反向传播算法时,常会用矩阵来表示权重参数。矩阵中所有参数都是必要且不可替代的吗?不尽然,如下图。矩阵A,看上去确实参数之间不存在什么特殊的关联。但矩阵B,很明显第二行与第一行存在线性关系,是线性相关的。那么根据线性代数的内容,对矩阵B进行化简可得矩阵B’。这就涉及到一个 秩(Rank) 的概念。 矩阵是想怎么分解就怎么分解的吗? 当然不是。其中涉及严密的数学运算, 一个要点就是通过矩阵的秩,对矩阵进行分解,包括满秩矩阵分解、奇异值矩阵分解、正交分解等。详细的得参考线代知识。
    在这里插入图片描述
    在LLM中,怎么体现Lora微调的魅力呢,如下
    在这里插入图片描述
    不难看出,通过矩阵分解,参数量急剧下降。相应带来三大优势
  • 效率高,模型拓展新功能或迁移速度快
  • 泛化能力好(保留原模型的部分功能+新功能)
  • 算力、存储占用低

2.3 Baseline中的Lora代码

代码不长, “–”后接的先是参数名称,接着是空格,空格后接的是给定的参数,“\”后是注释。写法可能不是很直接。
举个例子,“pretrained_text_encoder_path models/kolors/Kolors/text_encoder”
类似于→函数名(pretrained_text_encoder_path = “models/kolors/Kolors/text_encoder”)

cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \ # 选择使用可图的Lora训练脚本DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py
  --pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \ # 选择unet模型
  --pretrained_text_encoder_path models/kolors/Kolors/text_encoder \ # 选择text_encoder
  --pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \ # 选择vae模型
  --lora_rank 16 \ # lora_rank 16 表示在权衡模型表达能力和训练效率时,选择了使用 16 作为秩,适合在不显著降低模型性能的前提下,通过 LoRA 减少计算和内存的需求
  --lora_alpha 4.0 \ # 设置 LoRA 的 alpha 值,影响调整的强度
  --dataset_path data/lora_dataset_processed \ # 指定数据集路径,用于训练模型
  --output_path ./models \ # 指定输出路径,用于保存模型
  --max_epochs 1 \ # 设置最大训练轮数为 1
  --center_crop \ # 启用中心裁剪,这通常用于图像预处理
  --use_gradient_checkpointing \ # 启用梯度检查点技术,以节省内存
  --precision "16-mixed" # 指定训练时的精度为混合 16 位精度(half precision),这可以加速训练并减少显存使用
""".strip()
os.system(cmd) # 执行可图Lora训练    

三、生图分享

综合前面的学习,实现最后的生图。

学习的过程就像小孩玩乐高,在3个Task的学习中,跑通baseline,利用LLM等工具学习代码,“咒语书”调整生图,学会Lora微调原理,学会用ComfyUI实现基于可视工作流的生图优化…学会的种种就像乐高里的一小块。现在要做的就是摆弄这一块块小积木,搭建属于自己的Model。

延续Task 02中的老套剧情,对生图的质量进行完善。如何完善?(结合前面的学习)
三个要点可实现:

  • 增加/修改数据集。高质量的训练数据是模型性能的关键。
  • 合理运用ComfyUI工具。ComfyUI可以实现交互式的可视工作流过程,在这个过程中可以直接根据生图对工作流进行调整,例如,改变CLIP 里的输入, Sampler采样器里的参数。
  • 调整Lora模型参数。根据Lora微调的介绍和解释,对部分参数进行合理调整。

最后,直接上图吧,附上我的Lora模型链接可图Kolors训练模型,欢迎下载copy。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值