Files
bytedance--lance/train_zh.md
T
2026-07-13 13:16:54 +08:00

173 lines
6.7 KiB
Markdown

# Lance 训练脚本使用说明
本文档说明以下训练脚本的用途和常见用法:
- `scripts/sft_lance_unified.sh`
- `scripts/sft_lance_generation.sh`
- `scripts/sft_lance_understand.sh`
这三个脚本最终都会通过 `accelerate launch` 启动 `train/unified_train.py`。主要区别在于默认数据配置和 `VISUAL_GEN` 开关。
## 1. 环境安装
本次训练代码发布在原推理环境的基础上新增了一些依赖。如果你在微调代码发布前已经安装过环境,请基于更新后的 `requirements.txt` 重新安装依赖:
```bash
pip install -r requirements.txt
```
## 2. 数据准备
训练读取本地 parquet 文件。请从 [Hugging Face](https://huggingface.co/datasets/bytedance-research/Lance_example_dataset) 下载示例数据集,并放到本地 `./datasets` 目录下。
期望的本地目录结构如下:
```text
datasets/
├── image2image/
├── image2text/
├── text2image/
├── text2video/
├── video2text/
└── video2video/
```
可直接使用的本地配置位于 `config/train_local/`,例如:
| 任务 | 配置 |
| --- | --- |
| `t2i` | `config/train_local/t2i_local.yaml` |
| `t2v` | `config/train_local/t2v_local.yaml` |
| `i2i` | `config/train_local/i2i_local.yaml` |
| `v2v` | `config/train_local/v2v_local.yaml` |
| `i2t` | `config/train_local/i2t_local.yaml` |
| `v2t` | `config/train_local/v2t_local.yaml` |
关于 parquet schema、支持的任务类型和自定义数据集构建方式,请参考 [train_dataset_zh.md](train_dataset_zh.md)。
## 3. 训练脚本
准备好环境、模型权重和示例数据后,可以启动下面的训练脚本。
默认情况下,脚本会使用当前机器上 `nvidia-smi` 可见的全部 GPU。如果需要少卡启动,可以在命令前设置 `ARNOLD_WORKER_GPU`,例如 `ARNOLD_WORKER_GPU=1 bash scripts/sft_lance_unified.sh`
对于资源较少的本地机器,也可以降低 dataloader worker 数,例如 `NUM_WORKERS=2 ARNOLD_WORKER_GPU=1 bash scripts/sft_lance_unified.sh`
### 3.1 统一混合训练
```bash
bash scripts/sft_lance_unified.sh
```
### 3.2 生成任务训练
```bash
bash scripts/sft_lance_generation.sh
```
本地 `t2v` 训练可以通过环境变量覆盖数据配置和实验名:
```bash
DATASET_CONFIG_FILE=config/train_local/t2v_local.yaml \
VAL_DATASET_CONFIG_FILE=config/train_local/t2v_local.yaml \
WANDB_NAME=t2v_local_debug \
bash scripts/sft_lance_generation.sh
```
### 3.3 理解任务训练
```bash
bash scripts/sft_lance_understand.sh
```
本地 `v2t` 训练可以通过环境变量覆盖数据配置和实验名:
```bash
DATASET_CONFIG_FILE=config/train_local/v2t_local.yaml \
VAL_DATASET_CONFIG_FILE=config/train_local/v2t_local.yaml \
WANDB_NAME=v2t_local_debug \
bash scripts/sft_lance_understand.sh
```
**注意**:训练脚本默认使用 `MODEL_PATH=./downloads/Lance_3B_Video`,即支持视频任务的统一 checkpoint。若只微调图像类任务,例如 `t2i``i2i``i2t`,可以在启动前将 `MODEL_PATH` 切换为 `./downloads/Lance_3B`
## 4. 训练脚本选择
这些脚本会将 shell 变量展开为命令行参数,并传给 `train/unified_train.py`。实际使用时,应先确定这次要训练的任务类型。
| 脚本 | 默认配置 | 默认开关 | 适用场景 | 常见需要修改的字段 |
| --- | --- | --- | --- | --- |
| `scripts/sft_lance_unified.sh` | `config/train_local/unified.yaml` | `VISUAL_UND=True`, `VISUAL_GEN=True` | 理解 + 生成混合训练 | `DATASET_CONFIG_FILE`, `VAL_DATASET_CONFIG_FILE`, `WANDB_NAME` |
| `scripts/sft_lance_generation.sh` | `config/train_local/multi_gen.yaml` | `VISUAL_UND=True`, `VISUAL_GEN=True` | `t2i``t2v``i2i``v2v` 等生成任务 | `DATASET_CONFIG_FILE`, `VAL_DATASET_CONFIG_FILE`, `WANDB_NAME` |
| `scripts/sft_lance_understand.sh` | `config/train_local/multi_und.yaml` | `VISUAL_UND=True`, `VISUAL_GEN=False` | `i2t``v2t` 等理解任务 | `DATASET_CONFIG_FILE`, `VAL_DATASET_CONFIG_FILE`, `WANDB_NAME` |
## 5. 优先确认的关键参数
下面这些参数是大多数训练前都需要优先确认的内容,可以理解为最常需要调整的一层配置。
| 参数 | 作用 | 什么时候修改 | 建议 |
| --- | --- | --- | --- |
| `DATASET_CONFIG_FILE` | 指定训练集 yaml | 几乎每次训练都需要确认 | 指向本次真正要训练的数据配置 |
| `VAL_DATASET_CONFIG_FILE` | 指定验证集 yaml | 当前验证暂不支持 | 保持默认值 |
| `WANDB_NAME` | 设置实验名 | 几乎每次训练都需要修改 | 包含任务名、数据集名和日期 |
| `VISUAL_UND` | 启用视觉理解分支 | 通常不常修改 | 理解任务和大多数生成任务都保持 `True` |
| `VISUAL_GEN` | 启用视觉生成分支 | 在理解/生成任务切换时必须确认 | 理解任务设为 `False`,生成任务设为 `True` |
| `SAVE_EVERY` | checkpoint 保存间隔 | 调试和正式训练都常修改 | 调试时可设小,长训时建议设大 |
| `CKPT_DEBUG_STEPS` | 早期 debug checkpoint | 调试时常修改 | 不需要早期 debug checkpoint 时设为 `-1` |
| `VALIDATION_STEP` | 验证间隔 | 当前验证暂不支持 | 保持 `-1`,不要设为正整数 |
| `NUM_SHARD` | FSDP shard 数 | 调整并行策略时修改 | 结合 GPU 数量和显存预算一起调整 |
| `NUM_REPLICATE` | replica 数 | 通常随 `NUM_SHARD` 变化 | 由 `TOTAL_RANK / NUM_SHARD` 计算得到 |
## 6. 容易配错的两个开关
### 6.1 `VISUAL_GEN`
`VISUAL_GEN` 控制是否启用视觉生成分支,包括 VAE latent、flow matching 和 MSE 路径。
- 生成任务常见设置:
- `VISUAL_UND=True`
- `VISUAL_GEN=True`
- 理解任务常见设置:
- `VISUAL_UND=True`
- `VISUAL_GEN=False`
如果理解任务误设为 `VISUAL_GEN=True`,但 batch 中没有生成分支需要的 latent 字段,`Lance.forward(...)` 可能会进入错误分支并失败。
### 6.2 `VALIDATION_STEP`
三个脚本默认都是:
```bash
VALIDATION_STEP=-1
```
这表示:
- 不准备固定验证集
- 训练循环中不会触发 `validate_on_fixed_batch(...)`
训练脚本中的 validation 逻辑目前尚未完整检查。当前不支持设置正数来启用验证,因此不要设置 `VALIDATION_STEP=100` 这类值,保持 `-1` 即可。
## 7. 使用建议
1. 纯理解任务优先使用 `sft_lance_understand.sh`
2. 纯生成任务优先使用 `sft_lance_generation.sh`
3. 确实需要混合任务训练时再使用 `sft_lance_unified.sh`
4. 调试阶段优先修改:
- `DATASET_CONFIG_FILE`
- `WANDB_NAME`
- `VISUAL_GEN`
- `SAVE_EVERY`
- `CKPT_DEBUG_STEPS`
- `VALIDATION_STEP`
5. 本地 parquet 训练时,优先确认:
- yaml 确实指向本地 parquet 文件
- `_local` 数据集类和 parquet schema 对齐
- 理解任务没有误设为 `VISUAL_GEN=True`