一.初识ComfyUI
1.1 ComfyUI 是什么?
ComfyUI 是一个图形化的界面,它将各种处理图像的功能模块化,并把这些模块通过一个直观的拖放式界面展示给用户。你可以把 ComfyUI 想象成一个拼图游戏,每块拼图代表一个功能,比如生成图像、调整颜色、增加特效等。你可以把这些拼图组合在一起,构建出一个完整的图像处理流程,而不需要写代码。
1.2 为什么使用 ComfyUI?
-
易于使用:不需要编程经验就能操作。ComfyUI 把复杂的图像生成和处理功能以简单的模块形式展现出来,用户只需要把这些模块拖到界面上并连接起来,就能完成整个图像生成过程。
-
高度定制化:你可以根据自己的需求选择不同的模块来构建工作流。比如,你可以先用一个模块生成一个基础图像,然后再用另一个模块对它进行润色,最后用第三个模块来增加一些艺术效果。
-
实时预览:ComfyUI 允许你在调整参数时实时预览结果,这样你可以随时看到你的修改对图像的影响,直到你对最终效果满意为止。
-
适合各种用户:无论你是艺术家、设计师,还是对 AI 图像生成感兴趣的初学者,ComfyUI 都能帮助你更轻松地实现创意。
1.3 ComfyUI 的主要功能
-
模块化设计:每个模块都有独特的功能,如生成、编辑、风格化等。你可以自由组合这些模块,形成自己的工作流。
-
直观的界面:ComfyUI 的界面非常友好,你只需将模块拖放到画布上并进行连接,然后调整参数,就可以开始生成图像。
-
多样化的应用场景:从艺术创作到研究实验,再到图像处理,ComfyUI 都能发挥作用。比如你想生成一幅特定风格的图像,你可以选择一个生成模块,然后再加上一个风格化模块,最后输出一幅独特的艺术作品。
1.4 ComfyUI 是如何工作的?
视频直达:2.2ComfyUI应用场景探索_哔哩哔哩_bilibili
1.4.1 速通安装ComfyUI
在这里,我们依旧选择使用魔搭社区提供的Notebook和免费的GPU算力体验来体验ComfyUI。
1.4.2 下载脚本代码文件
下载安装ComfyUI的执行文件
和task1中微调完成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/
1.4.3 进入ComfyUI的安装文件
1.4.4 一键执行安装程序(大约10min)
1.4.5 进入预览界面
当执行到最后一个节点的内容输出了一个访问的链接的时候,复制链接到浏览器中访问
PS:如果链接访问白屏,或者报错,就等一会再访问重试,程序可能没有正常启动完毕
1.5 资源网站
名称 | 链接地址 |
在魔搭使用ComfyUI,玩转AIGC! | |
ComfyUI的官方地址 | |
ComfyUI官方示范 | |
别人的基础工作流示范 | |
工作流分享网站 | |
推荐一个比较好的comfyui的github仓库网站 | https://github.com/ZHO-ZHO-ZHO/ComfyUI-Workflows-ZHO?tab=readme-ov-file |
二.初识Lora
2.1 什么是 Lora?
Lora 是一种微调方法,主要目的是在保持大模型性能的同时,减少训练所需的计算和内存资源。传统的模型微调需要更新模型中的所有参数,这不仅需要大量的计算资源,还可能导致过拟合,特别是在训练数据量有限的情况下。Lora 提供了一种解决方案,通过只调整模型中的一小部分参数来达到类似的效果。
2.2 Lora的工作原理
Lora 的核心思想是通过引入低秩矩阵分解,来减少模型中需要调整的参数数量。具体来说,Lora 在模型的某些层(通常是注意力层或前馈层)中插入低秩矩阵,用这些矩阵来代替原本需要训练的大量参数。
-
参数分解:在模型训练之前,LoRA 将模型的权重矩阵分解为两个低秩矩阵。这个分解使得模型的权重矩阵可以用更少的参数来表示。
-
参数调整:在训练过程中,LoRA 只微调这些低秩矩阵,而不调整原始的权重矩阵。这意味着模型的大部分参数保持不变,从而显著减少了训练所需的计算和内存资源。
-
模型恢复:训练完成后,微调后的低秩矩阵与原始权重矩阵结合,生成最终的模型。这个模型保留了大模型的强大能力,同时对新任务有良好的适应性。
2.3 Lora 的优点
-
资源高效:由于只调整一小部分参数,Lora 的微调过程显著减少了计算和内存资源的消耗。这使得在资源有限的环境下,也能够对大模型进行微调。
-
避免过拟合:Lora 通过限制需要调整的参数数量,减少了模型对训练数据的过度依赖,从而降低了过拟合的风险。
-
灵活性强:Lora 可以很容易地集成到现有的大模型架构中,如 GPT、BERT、Stable Diffusion 等,使得这些模型在处理新任务时更加灵活。
-
应用广泛:Lora 可以用于各种任务的微调,无论是文本生成、图像生成,还是其他自然语言处理或计算机视觉任务。
2.4 应用场景
-
生成式 AI:在图像生成模型(如 Stable Diffusion)中使用 Lora,可以在不修改整个模型的情况下,快速适应不同的图像风格或特定任务。
-
大语言模型:对于像 GPT-3 这样的语言模型,Lora 可以用于微调模型以适应特定的对话风格或领域,如医疗、法律等。
-
跨任务适应:Lora 还可以帮助大模型在多个不同任务之间快速切换,而不需要重新训练整个模型。
2.5 Lora 的实施步骤
-
选择目标层:首先需要确定模型中哪些层需要进行低秩分解。通常是注意力机制中的投影矩阵或前馈层。
-
矩阵分解:将选定的权重矩阵分解为两个低秩矩阵。这一步骤会引入额外的参数,但数量远少于原始的参数数量。
-
训练:在微调过程中,只更新分解后的低秩矩阵,而不改变模型的其他参数。
-
合并权重:在推理阶段,将微调后的低秩矩阵与原始权重矩阵合并,得到最终的模型。
2.6 详解Lora
视频直达:通俗易懂理解全量微调和LoRA微调_哔哩哔哩_bilibili
2.6.1 Task2中的的微调代码
import os
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训练
2.6.2 参数详情
参数名称 | 参数值 | 说明 |
| models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors | 指定预训练UNet模型的路径 |
| models/kolors/Kolors/text_encoder | 指定预训练文本编码器的路径 |
| models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors | 指定预训练VAE模型的路径 |
| 16 | 设置LoRA的秩(rank),影响模型的复杂度和性能 |
| 4 | 设置LoRA的alpha值,控制微调的强度 |
| data/lora_dataset_processed | 指定用于训练的数据集路径 |
| ./models | 指定训练完成后保存模型的路径 |
| 1 | 设置最大训练轮数为1 |
| 启用中心裁剪,用于图像预处理 | |
| 启用梯度检查点,节省显存 | |
| "16-mixed" | 设置训练时的精度为混合16位精度(half precision) |
三.准备一个高质量的数据集
3.1 数据集来源整理
以下渠道来源均需要考虑合规性问题,请大家在使用数据集过程中谨慎选择。
来源类型 | 推荐 |
公开的数据平台 | 魔搭社区内开放了近3000个数据集,涉及文本、图像、音频、视频和多模态等多种场景,左侧有标签栏帮助快速导览,大家可以看看有没有自己需要的数据集。 其他数据平台推荐:
|
使用API或爬虫获取 |
|
数据合成 | 利用现有的图形引擎(如Unity、Unreal Engine)或特定软件生成合成数据,这在训练某些类型的模型时非常有用。 最近Datawhale联合阿里云天池,做了一整套多模态大模型数据合成的学习,欢迎大家一起交流。从零入门多模态大模型数据合成 |
数据增强 | 对于较小的数据集,可以通过旋转、翻转、缩放、颜色变换等方式进行数据增强。 |
购买或定制 | 如果你的应用是特定领域的,比如医学影像、卫星图像等,建议从靠谱的渠道购买一些数据集。 |