LLaMA-Factory 合并cache
2025-08-14
LLaMA-Factory
00

目录

1. 核心数据存储库
2. tokenized_path的工作原理
3. 数据格式
4. 为什么使用datasets库
5. 我的脚本设计思路
6. 数据流程
7. 必须文件/目录
操作cache

LLaMA-Factory使用HuggingFace的datasets库来管理数据。

1. 核心数据存储库

python
展开代码
from datasets import Dataset, DatasetDict, load_from_disk, save_to_disk

2. tokenized_path的工作原理

src/llamafactory/data/loader.py中:

python
展开代码
# 保存tokenized数据 if data_args.tokenized_path is not None: if training_args.should_save: dataset_dict.save_to_disk(data_args.tokenized_path) # 使用datasets库保存 # 加载tokenized数据 if has_tokenized_data(data_args.tokenized_path): tokenized_data = load_from_disk(data_args.tokenized_path) # 使用datasets库加载

3. 数据格式

  • 存储格式: Apache Arrow (.arrow文件)
  • 元数据: JSON格式 (dataset_info.json, state.json)
  • 结构: DatasetDict包含多个Dataset分割

4. 为什么使用datasets库

优势:

  • 高效存储: Arrow格式比JSON/CSV快很多
  • 内存映射: 支持大文件的内存映射加载
  • 流式处理: 支持流式数据集,适合大数据集
  • 标准化: HuggingFace生态系统的标准
  • 多模态支持: 原生支持文本、图像、音频等

5. 我的脚本设计思路

我创建的脚本完全遵循LLaMA-Factory的设计:

python
展开代码
# 分析脚本 from datasets import load_from_disk, Dataset, DatasetDict def analyze_tokenized_path(tokenized_path: str): dataset_dict = load_from_disk(tokenized_path) # 直接加载 if isinstance(dataset_dict, DatasetDict): # 分析DatasetDict结构 for split_name, dataset in dataset_dict.items(): # 分析每个分割
python
展开代码
# 合并脚本 from datasets import concatenate_datasets, interleave_datasets def merge_datasets(datasets): # 使用datasets库的合并函数 merged = concatenate_datasets(split_datasets) merged.save_to_disk(output_path) # 保存为相同格式

6. 数据流程

展开代码
原始数据 → LLaMA-Factory预处理 → datasets.Dataset → save_to_disk() → tokenized_path ↓ 训练时: load_from_disk() → datasets.Dataset → 训练循环

7. 必须文件/目录

  • 必须文件/目录是 HuggingFace Datasets 的标准 save_to_disk 产物,保持原始结构与命名即可。

  • 根目录:

    • dataset_dict.json
  • 各数据分割目录(如 train/validation/ 等):

    • data-00000-of-0000X.arrow(可能有多分片)
    • dataset_info.json
    • dataset_state.json 或 state.json(名称会随版本变化,保留 save_to_disk 生成的即可)

说明:

  • LLaMA-Factory 只会对 --tokenized_path 调用 datasets.load_from_disk(<tokenized_path>),因此只要是 HuggingFace Datasets 的标准磁盘格式就能直接用。
  • 你在 tokenized_path 中的 images/videos/audios 列只是保存了路径字符串,实际文件需在训练时可被所有节点正常访问(挂载一致、路径一致)。
  • 使用 --tokenized_path 时,诸如 --dataset--dataset_dir--template 等数据加载相关参数会被忽略;不要开启 --streaming

操作cache

1800w数据:

bash
展开代码
python analyze_tokenized_path.py --tokenized-path /mnt/jfs/cache/qwen2vl-xd0813-5/tokenized_cache --sample-count 5

3000数据:

bash
展开代码
python analyze_tokenized_path.py --tokenized-path /mnt/jfs/cache/qwen2vl-xd0813-6/tokenized_cache --sample-count 5
bash
展开代码
# 如果需要合并多个tokenized_path python /mnt/s3fs/LLaMA-Factory-qwen2vl/user-code/merge_tokenized_paths.py \ --input-paths /mnt/jfs/cache/qwen2vl-xd0813-6/tokenized_cache /mnt/jfs/cache/qwen2vl-xd0813-6/tokenized_cache \ --output-path /mnt/jfs/cache/qwen2vl-xd0813-merge/tokenized_cache \ --merge-strategy concatenate \ --validate \ --force
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!