Datawhale AI夏令营第四期 AIGC文生图方向 Task3学习笔记

经过前两个task的学习,对于文生图的基本原理,技术支持,模型微调,工作流程等有了一定的了解,尤其是在prompt工程上面,提示词的质量决定着生成图像的流畅性和观赏性,AI大模型在这一方面为学习者们提供了非常大的帮助,通过大模型生成和优化提示词,能实现学习者自我创作连环画的目的。

在Task3中,我们将进一步学习关于微调Lora模型的原理和知识,了解基本参数的概念以达到更好的效果,还有一个工作流平台Comfyui帮助我们生成更高质量图片

一、工作流平台工具ComfyUI

1.1ComfyUI的基本概念

ComfyUI是一种GUI,GUI是“Graphical User Interface”的缩写,一种有图标和按钮的交互界面。

ComfyUI基于节点来进行工作,具有操作图像的生成技术,它主要采用的是一种模块化的设计,这样可以分解图像生成的过程为许多小步骤,这些小步骤被称为节点,所有节点集成起来形成生成图像的工作流,用户可以操作这些节点来生成他们理想的图片。

1.2ComfyUI的核心模块

核心模块:模型加载器,提示词管理器,采样器,解码器

下图展示的是模型加载器,这里我选用的是kolors和chatglm3的模型,精度选择的是fp16

显而易见模型加载器可以用来加载基础的模型文件,通常会包含Model,CLIP和VAE

下图是CLIP模块,它的作用是可以将文本输入转化成为模型文件可以理解的latent space embedding(潜在空间嵌入)作为模型的输入形式

下图是VAE模块,它的作用是将latent space中的embedding解码成为像素级别的图片

下图是采样器,可以看到这里有很多参数,分别是

width--像素图片的宽度   height--像素图片的高度

seed--控制噪声产生的随机种子

control_after_generate--控制seed在每次生成后得变化(这里设置为fixed固定不变)

steps--降噪的迭代步数,数值越大则信号越精准,随之生成时间增加

cfg--叫做classifier free guidance,决定prompt对生成图像的影响程度,数值越大,prompt的表现越明显

scheduler--降噪参数

denoise_strength--被噪声覆盖的内容大小

1.3ComfyUI的工作流程

下图展示了ComfyUI的工作全过程,当我们选好了模型之后,参数会随之自动调配出来,我们只需要动动手指将节点拼接起来,最后点击生成图片,等待出片就行了

1.4快速安装&体验ComfyUI

这里我们依旧是用到了魔搭平台https://www.modelscope.cn/home

我们进入实例(这是之前搭建好的),点击启动,进入实例

打开实例之后,将下面的代码进行复制到终端中并执行,这里包含了ComfyUI的执行文件,以及微调之后的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/   

打开ComfyUI文件,点击执行,等待大约15分钟左右

复制URL链接到任意网站上,可以进入ComfyUI界面进行操作了

 

安装完ComfyUI之后,我们可以浅浅尝试以下我们的工作流平台,这里我们可以引入模型,我尝试的是带Lora的工作流

 

从图中我们可以看到我们加载的模型为kolors,精度为fp16,同时还有lora模型文件的地址,后续还有一系列采样器的参数

按一下左上角的Queue Prompt按钮,节点就会按流程工作,然后你就会得到一张非常可爱的图片(当然你可以拥有自己的风格)

 

 二、LoRA微调

一些背景:现在有很多大语言模型(GPT,BERT等)因为参数量十分巨大,对其进行微调一般都需要大量计算资源和存储空间。而在实际应用中,我们所拥有的资源往往是有限的,那么我们定制模型的成本将会耗费甚多。

一些挑战:一些微调模型的方法通常是需要对所有参数进行更改,这就导致需要大量的计算资源和空间,稍有不慎还会导致模型过拟合,反而丧失了原有良好的泛化能力。

2.1 关于LoRA

LoRA(Low-Rank Adaptation)是一种对大型预训练模型进行高效微调的方法。通过引入可训练的低秩矩阵在模型的每一层,LoRA可以在不改变原有模型权重的情况下对其进行微调。这种方法不仅节省了资源,而且让模型具有良好的泛化能力。故LoRA在大型预训练模型的领域中发挥着重要的作用。

2.2 LoRA的核心

 低秩矩阵:首先LoRA将原始模型的权重矩阵分解为低秩矩阵,方法很巧妙,它将低秩矩阵插入到模型的每一层中进行训练,这样在模型微调过程中只需要调整少量参数并且不影响原始权重。

参数调整效率:通过使用低秩矩阵,相比于传统的微调方法,LoRA显著减少了微调的参数数量,降低显存占用和计算需求,即使在资源有限的情况下,依旧可以对大模型进行微调。

2.3 LoRA实现方法

矩阵分解

在每一层中,LoRA会将权重矩阵W分解为两个低秩矩阵A和B,故有W = A x B,A的维度是d x r, B的维度r x k,r是一个远小于d和k的数,这样就能保持低秩。

微调过程中,LoRA只对两个低秩矩阵进行更新,原始矩阵W保持不变,在模型的前向传播中,使用LoRA的权重可用公式计算。

微调公式:W=W0​+ΔW=W0​+α×(A×B),α是一个缩放系数,通常是超参数,通常是控制低秩矩阵对原始矩阵的影响。

插入LoRA模块

LoRA可以插入到任何线性层(自注意力机制中的投影层全连接层),一般情况下,LoRA会针对Transformer模型中自注意力机的‘to_q(query)’,‘to_k(key)’,‘to_v(value)’,‘to_out’等位置进行插入操作。

在每个目标层中插入的时候会利用两个低秩矩阵替换普通的线性层。

训练过程: 

在微调开始之前,A和B的参数会设置为随机数(正态分布初始化)初始化,保证模型在初始状态时不会偏离预训练模型的表现。

在训练过程中,标准的反向传播算法会同时更新A和B的参数,由于A和B的参数量小,效率也将高于全量微调。

对于超参数α的调整也是重要的,通过调节α,可以控制低秩矩阵对原始矩阵的影响程度,甚至可以达到微调有效性和模型原始能力的平衡。

2.4 LoRA的优点

高效性:LoRA大大减少了微调所需要的计算资源和存储空间,微调更加轻量级

保留原始模型能力:原始权重将保持不变,LoRA也可以令模型灵活的适应新任务,拥有良好的泛化能力

模块化设计:LoRA可以应用于各种不同的预训练模型,不需要对每个模型进行非常大的结构调整

总的来说,LoRA是一种非常比较高效且友好的微调方法,节省大量的计算资源和存储空间,即使在资源有限的情况下,依然对大型预训练模型的调整具有良好的效果,未来LoRA还可以与其他的模型或者微调技术融合,集成为更高效,更完善的应用技术。同时自动化的方法也可以自动调节LoRA的参数和选择优化方法,简化微调模型的过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值