From bb210fb3102ebcd712d30aa8662ebd0d51151d1f Mon Sep 17 00:00:00 2001 From: DjangoJungle <113811445+DjangoJungle@users.noreply.github.com> Date: Fri, 26 Jul 2024 14:41:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Add=20the=20readme=20=E5=81=B6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README_zh.md | 349 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 349 insertions(+) create mode 100644 README_zh.md diff --git a/README_zh.md b/README_zh.md new file mode 100644 index 0000000..b848c53 --- /dev/null +++ b/README_zh.md @@ -0,0 +1,349 @@ +## :truck: 训练 + +### 数据准备 + +请参考以下步骤准备训练数据。 + + 1. 依赖项安装 + + 我们提供了一个名为 IndexKits 的高效数据管理库,支持训练期间读取数亿数据的管理,更多内容请参阅[file](./IndexKits/README.md). + ```shell + # 1 依赖项安装 + cd HunyuanDiT + pip install -e ./IndexKits + ``` + 2. 数据集下载 + + 可选择下载演示用的数据集 [data demo](https://dit.hunyuan.tencent.com/download/HunyuanDiT/data_demo.zip). + ```shell + # 2 数据集下载 + wget -O ./dataset/data_demo.zip https://dit.hunyuan.tencent.com/download/HunyuanDiT/data_demo.zip + unzip ./dataset/data_demo.zip -d ./dataset + mkdir ./dataset/porcelain/arrows ./dataset/porcelain/jsons + ``` + 3. 数据转换 + + 使用下表中列出的字段创建一个用于训练数据的 CSV 文件。 + + | 字段 | 必要性 | 描述 | 示例 | + |:---------------:| :------: |:----------------:|:-----------:| + | `image_path` | 必要 | 图片路径 | `./dataset/porcelain/images/0.png` | + | `text_zh` | 必要 | 文本 | 青花瓷风格,一只蓝色的鸟儿站在蓝色的花瓶上,周围点缀着白色花朵,背景是白色 | + | `md5` | 可选 | 图片的 md5 值 (Message Digest Algorithm 5) | `d41d8cd98f00b204e9800998ecf8427e` | + | `width` | 可选 | 图片宽度 | `1024 ` | + | `height` | 可选 | 图片高度 | ` 1024 ` | + + > ⚠️ MD5、宽度和高度等可选字段可以省略。如果省略,下面的脚本将自动计算它们。在处理大规模训练数据时,此过程可能非常耗时。 + + 我们利用 [Arrow](https://github.com/apache/arrow) 进行训练数据格式化,提供标准且高效的内存数据表示。我们同时提供一个转换脚本以将 CSV 文件转换为 Arrow 格式。 + ```shell + # 3 数据转换 + python ./hydit/data_loader/csv2arrow.py ./dataset/porcelain/csvfile/image_text.csv ./dataset/porcelain/arrows 1 + ``` + + 4. 数据选择和配置文件创建 + + 我们通过 YAML 文件配置训练数据。在这些文件中,您可以设置标准数据处理策略,用于过滤、复制、重复数据删除等有关训练数据的操作。若需要更多详细信息,请参阅[./IndexKits](IndexKits/docs/MakeDataset.md)。 + + 若需要YAML示例文件,请参阅[file](./dataset/yamls/porcelain.yaml)。若需要完整的参数配置文件,请参阅 [file](./IndexKits/docs/MakeDataset.md). + + + 5. 使用 YAML 文件创建训练数据索引文件。 + + ```shell + # 单一分辨率数据准备 + idk base -c dataset/yamls/porcelain.yaml -t dataset/porcelain/jsons/porcelain.json + + # 多分辨率数据准备 + idk multireso -c dataset/yamls/porcelain_mt.yaml -t dataset/porcelain/jsons/porcelain_mt.json + ``` + +`porcelain` 数据集的目录结构为: + + ```shell + cd ./dataset + + porcelain + ├──images/ (image files) + │ ├──0.png + │ ├──1.png + │ ├──...... + ├──csvfile/ (csv files containing text-image pairs) + │ ├──image_text.csv + ├──arrows/ (arrow files containing all necessary training data) + │ ├──00000.arrow + │ ├──00001.arrow + │ ├──...... + ├──jsons/ (final training data index files which read data from arrow files during training) + │ ├──porcelain.json + │ ├──porcelain_mt.json + ``` + +### 全参数训练 + +**要求:** + + 1. 全参数训练的最低要求是具有至少 20GB 内存的单个 GPU,但我们建议使用具有约 30GB 内存的 GPU,以避免主机内存卸载。 + 2. 此外,我们鼓励用户利用跨不同节点的多个 GPU 来加速大型数据集的训练。 + +**注意:** + + 1. 个人用户还可以使用轻量级的 Kohya 来微调模型,内存约为 16 GB。目前,我们正在尝试进一步减少个人用户的行业级框架的内存使用量。 + 2. 如果您有足够的 GPU 内存,请尝试删除 `--cpu-offloading` 或 `--gradient-checkpointing` 以减少时间成本。 + +针对分布式训练,您可以通过调整 `--hostfile` 和 `--master_addr` 等参数来灵活控制单节点/多节点训练。若需要更多详细信息,请参阅 [link](https://www.deepspeed.ai/getting-started/#resource-configuration-multi-node)。 + + ```shell + # 单分辨率训练 + PYTHONPATH=./ sh hydit/train.sh --index-file dataset/porcelain/jsons/porcelain.json + + # 多分辨率训练 + PYTHONPATH=./ sh hydit/train.sh --index-file dataset/porcelain/jsons/porcelain_mt.json --multireso --reso-step 64 + + # 用旧版本的 HunyuanDiT (<= v1.1)训练 + PYTHONPATH=./ sh hydit/train_v1.1.sh --index-file dataset/porcelain/jsons/porcelain.json + ``` + +检查点保存后,您可以使用以下命令来评估模型。 + ```shell + # 推理 + # 应该用实际路径替换 "log_EXP/xxx/checkpoints/final.pt"。 + python sample_t2i.py --infer-mode fa --prompt "青花瓷风格,一只可爱的哈士奇" --no-enhance --dit-weight log_EXP/xxx/checkpoints/final.pt --load-key module + + # 旧版本的 HunyuanDiT (<= v1.1) + # 应该用实际路径替换 "log_EXP/xxx/checkpoints/final.pt" + python sample_t2i.py --infer-mode fa --prompt "青花瓷风格,一只可爱的哈士奇" --model-root ./HunyuanDiT-v1.1 --use-style-cond --size-cond 1024 1024 --beta-end 0.03 --no-enhance --dit-weight log_EXP/xxx/checkpoints/final.pt --load-key module + ``` + +### LoRA + + + +我们为 LoRA 提供训练和推理脚本,详细信息请参见 [./lora](./lora/README.md)。 + + ```shell + # 训练 porcelain LoRA. + PYTHONPATH=./ sh lora/train_lora.sh --index-file dataset/porcelain/jsons/porcelain.json + + # 使用经过训练的 LoRA 权重进行推理。 + python sample_t2i.py --infer-mode fa --prompt "青花瓷风格,一只小狗" --no-enhance --lora-ckpt log_EXP/001-lora_porcelain_ema_rank64/checkpoints/0001000.pt + ``` +我们为 `porcelain` 和 `jade` 提供两种经过训练的 LoRA 权重,详情请参阅 [links](https://huggingface.co/Tencent-Hunyuan/HYDiT-LoRA) + ```shell + cd HunyuanDiT + # 使用 huggingface-cli 工具下载模型。 + huggingface-cli download Tencent-Hunyuan/HYDiT-LoRA --local-dir ./ckpts/t2i/lora + + # 快速上手 + python sample_t2i.py --infer-mode fa --prompt "青花瓷风格,一只猫在追蝴蝶" --no-enhance --load-key ema --lora-ckpt ./ckpts/t2i/lora/porcelain + ``` +
训练数据示例 | +|||
+ | + | + | + |
青花瓷风格,一只蓝色的鸟儿站在蓝色的花瓶上,周围点缀着白色花朵,背景是白色 (Porcelain style, a blue bird stands on a blue vase, surrounded by white flowers, with a white background. +) | +青花瓷风格,这是一幅蓝白相间的陶瓷盘子,上面描绘着一只狐狸和它的幼崽在森林中漫步,背景是白色 (Porcelain style, this is a blue and white ceramic plate depicting a fox and its cubs strolling in the forest, with a white background.) | +青花瓷风格,在黑色背景上,一只蓝色的狼站在蓝白相间的盘子上,周围是树木和月亮 (Porcelain style, on a black background, a blue wolf stands on a blue and white plate, surrounded by trees and the moon.) | +青花瓷风格,在蓝色背景上,一只蓝色蝴蝶和白色花朵被放置在中央 (Porcelain style, on a blue background, a blue butterfly and white flowers are placed in the center.) | +
推理结果示例 | +|||
+ | + | + | + |
青花瓷风格,苏州园林 (Porcelain style, Suzhou Gardens.) | +青花瓷风格,一朵荷花 (Porcelain style, a lotus flower.) | +青花瓷风格,一只羊(Porcelain style, a sheep.) | +青花瓷风格,一个女孩在雨中跳舞(Porcelain style, a girl dancing in the rain.) | +