Skip to content

Update TrainLoRANode docs #35

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions comfyui_embedded_docs/docs/TrainLoRANode/zh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
这个节点主要用于 LoRA 训练,能够根据你提供的范例作品(训练图片)来学习和掌握特定的绘画风格或技巧。通过这个节点,你可以让AI模型学习新的创作风格。

### 输入

| 参数名称 | 数据类型 | 输入方式 | 默认值 | 取值范围 | 功能说明 |
|----------|----------|----------|---------|----------|----------|
| `model` | MODEL | 必填 | - | - | 要训练的基础模型,就像选择要培训的学生 |
| `latents` | LATENT | 必填 | - | - | 编码后的训练图片,相当于教学用的范例作品 |
| `positive` | CONDITIONING | 必填 | - | - | 文本描述,就像告诉学生这幅画的重点特征 |
| `batch_size` | INT | 可选 | 1 | 1-10000 | 每次学习的样本数量,就像一次练习几幅画,如果显存小于 8GB建议设置为 1,大显存可以设置为 3 |
| `steps` | INT | 可选 | 16 | 1-100000 | 训练的总轮次,相当于练习的总课时,多轮次的训练可以让模型更好地掌握训练特征,但也容易过拟合,在 20~30张时你可以参考设置为 1000 左右 |
| `learning_rate` | FLOAT | 可选 | 0.0005 | 0.0000001-1.0 | 可以理解为学习过程的速度,学习率低时模型将会掌握更多细节但增加学习时长,学习率高则会让模型快速地完成学习过程,但可能会忽略掉很多细节 |
| `rank` | INT | 可选 | 8 | 1-128 | LoRA的秩,越大学习能力越强但需要更多资源,建议从较低的参数开始尝试 |
| `optimizer` | COMBO | 可选 | "AdamW" | ["AdamW", "Adam", "SGD", "RMSprop"] | 优化器选择,像是选择不同的学习方法 |
| `loss_function` | COMBO | 可选 | "MSE" | ["MSE", "L1", "Huber", "SmoothL1"] | 损失函数,用于衡量学习效果的好坏 |
| `seed` | INT | 可选 | 0 | 0-18446744073709551615 | 随机种子,确保训练过程可以重复 |
| `training_dtype` | COMBO | 可选 | "bf16" | ["bf16", "fp32"] | 训练时使用的数据类型 |
| `lora_dtype` | COMBO | 可选 | "bf16" | ["bf16", "fp32"] | LoRA权重的存储数据类型 |
| `existing_lora` | COMBO | 可选 | "[None]" | 可用的LoRA文件列表 + "[None]" | 继续训练现有的LoRA,或从头开始新训练 |

### 输出

| 输出名称 | 数据类型 | 说明 |
|----------|----------|------|
| `model_with_lora` | MODEL | 应用了训练好的LoRA权重的模型 |
| `lora` | LORA_MODEL | 独立的LoRA权重,可以保存或应用到其他模型 |
| `loss` | LOSS_MAP | 训练过程中的损失数据,用于监控训练进度 |
| `steps` | INT | 完成的总训练步数(包括继续训练时之前的步数) |

## 关于 LoRA 训练的准备

想象一下教一个绘画学生学习新的绘画技巧:

1. **准备课程材料**:
- 就像准备示范作品一样,你需要准备训练用的图片
- 使用 `LoadImageSetNode` 或 `LoadImageSetFromFolderNode` 来加载这些图片
- 通过VAE编码节点将图片转换为模型可以理解的格式

2. **学习过程**:
- 就像学生通过反复练习来掌握技巧,模型也通过多次迭代来学习
- 每次练习都会对比自己的作品和示范作品的差异,然后调整技巧
- 这个过程通过特殊的 `TrainSampler` 来实现,它负责计算差异并指导模型改进

### 使用建议

1. **准备阶段**:
- 选择质量好、风格一致的训练图片
- 确保有足够的GPU显存进行训练
- 从小批量和较少步数开始尝试,逐步调整参数

2. **训练过程**:
- 使用 `LossGraphNode` 监控训练进度
- 如果训练效果不理想,可以:
* 调整学习率(learning_rate)
* 增加训练步数(steps)
* 尝试不同的优化器(optimizer)
* 调整LoRA秩(rank)的大小

3. **保存和使用**:
- 训练完成后使用 `SaveLoRA` 节点保存权重
-
4. **注意事项**:
- 这是一个实验性功能,可能会在未来版本中有变化
- 训练需要较大的GPU显存和计算资源
- 支持从现有LoRA继续训练,会自动从文件名中提取步数
- 使用了梯度检查点技术来优化显存使用

## 多图像输入处理

ComfyUI中 的 Train LoRA 节点通过一个复杂的批处理系统来处理多个图像输入。该节点通过 `latents` 输入参数接收图像的潜在表示, 其中包含批量潜在张量, 批次维度代表多个图像。

在训练过程中,该节点对每个训练步骤从图像批次中进行随机采样。它使用`torch.randperm(num_images)[:batch_size]`从总数据集中随机选择一个子集进行每次迭代。这种方法通过确保模型在不同步骤中看到不同的训练图像组合,提供了数据增强并防止过拟合。

图像加载管道通过配套节点(如`LoadImageSetNode`和`LoadImageSetFromFolderNode`)支持多种输入方法。这些节点包含复杂的图像处理功能,具有多种调整大小方法(无、拉伸、裁剪、填充)来处理不同尺寸的图像。

### 输出和监控

该节点提供全面的输出,包括:
- 应用LoRA的训练模型
- 独立的LoRA权重以供重用
- 用于监控训练进度的损失跟踪数据
- 包括继续训练步骤在内的总训练步骤计数

### LoRA权重管理

训练好的LoRA权重可以使用`SaveLoRA`节点保存,并使用`LoraModelLoader`节点重新加载到模型中。

### 权重适配器系统

该节点利用 ComfyUI 的权重适配器系统,特别是 LoRA 适配器实现,它支持多种LoRA格式并在推理过程中提供高效的权重计算。

完整示例请参考 [LoRA 训练工作流示例教程](https://docs.comfy.org/zh-CN/tutorials/lora-trainer)