
LLaMA-Factory v1 怎么写 dataset_info.yaml 加载并混合本地与 Hugging Face 数据集【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100 LLMs VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory在 LLaMA-Factory v1 里做训练时常见的情况是一部分数据是本地文件Alpaca 格式的.json、已经是标准 Messages 格式的.jsonl另一部分数据放在 Hugging Face Hub 上。v1 的数据加载统一由DataEngine完成把多个数据源写进一个dataset_info.yaml再让训练配置的train_dataset指向它DataEngine就会把这些数据源加载、转换并混合成一个统一的数据索引。本文给出这份dataset_info.yaml的写法、训练配置中如何引用以及训练前如何验证数据集加载正确。先明确标准 Messages 格式v1 内部只认统一的 Messages 格式每个样本是一个带messages字段的对象消息由role、content列表和loss_weight组成详见 docs/zh/data-preparation/data-processing.md。SFT 样本示例{ messages: [ { role: user, content: [{type: text, value: Hello, who are you?}], loss_weight: 0.0 }, { role: assistant, content: [{type: text, value: I am an AI assistant.}], loss_weight: 1.0 } ] }loss_weight为0.0表示该消息不计算损失提示部分1.0表示完全计算损失回复部分。如果本地数据不是这个格式例如 Alpaca 格式需要在dataset_info.yaml里指定converter让它转成标准格式已经符合标准格式的数据不需要converter。编写 dataset_info.yamldataset_info.yaml的顶层键是自定义的数据集名称每个数据集条目包含以下字段字段行为以 src/llamafactory/v1/core/data_engine.py 和 src/llamafactory/v1/plugins/data_plugins/loader.py 中的解析逻辑为准字段说明path数据位置。本地数据集为文件路径HF Hub 数据集为 repo ID如llamafactory/v1-sft-demosource数据源。本地文件必须写local不写时默认为hf_hubconverter数据转换器名称内置有alpaca、sharegpt、pair数据已是标准格式时省略split数据集划分默认trainsize使用的样本数量不写则使用全部weight数据集权重用于控制该数据集在混合数据中的采样频率默认为1.0streaming是否流式加载默认false本地数据集与 HF Hub 数据集混合的完整示例其中两个本地文件是仓库自带的演示数据可直接照抄运行# data/dataset_info.yaml # 本地数据集Alpaca 格式用 alpaca 转换器标准化 alpaca_en_demo: path: data/alpaca_en_demo.json source: local converter: alpaca size: 500 # 只使用 500 个样本 # 本地数据集已是标准 Messages 格式无需 converter standard_demo: path: data/v1_sft_demo.jsonl source: local # Hugging Face Hub 数据集path 写 repo ID hf_sft_demo: path: llamafactory/v1-sft-demo weight: 1.5仓库自带的数据集配置可作对照参考data/v1_sft_demo.yaml两个本地 Alpaca 数据集和 data/v1_multimodal_demo.yaml一个本地多模态标准数据集。几点需要注意本地文件必须写source: local。source不写时默认为hf_hubDataEngine会把path当成 HF repo ID 去加载本地文件会加载失败。本地文件支持的格式为.json、.jsonl、.csv、.parquet、.arrow、.txt也可以指向一个目录取目录下第一个文件推断类型见 src/llamafactory/v1/plugins/data_plugins/loader.py。配置了weight或size的数据集其索引会按 adjust_data_index 做采样调整size决定保留的样本数量weight决定该数据集样本在混合索引中的出现次数weight: 2.0时索引约为原始的 2 倍。流式模式要求全部数据集一致如果有的数据集写了streaming: true而有的没有DataEngine会抛出ValueError: All datasets must be streaming or non-streaming.。文档与代码的字段名差异docs/zh/data-preparation/data-processing.md 中的示例使用了file_name/hf_hub_url字段名而当前代码与仓库自带的data/v1_sft_demo.yaml使用path/source。按当前代码行为应以path/source写法为准。在训练配置中引用v1 的训练配置通过train_dataset字段指向这份 yaml仓库示例 examples/v1/train_lora/train_lora_sft.yaml 中的写法是train_dataset: data/v1_sft_demo.yaml换成你混合数据集的配置即可train_dataset: data/dataset_info.yamlDataEngine对train_dataset的解析规则见 src/llamafactory/v1/core/data_engine.py 中_get_dataset_info以.yaml结尾且本地文件存在按本地dataset_info.yaml解析以.yaml结尾但本地不存在按 HF Hub 上的 yaml 处理如llamafactory/v1-sft-demo/dataset_info.yaml会从 Hub 下载该配置文件指向一个已存在的本地数据文件按单个数据集加载且要求该文件已是标准格式其他情况按 HF Hub 的 repo ID 加载同样要求数据为标准格式。也就是说如果你的数据全部已是标准格式也可以跳过 yaml 直接把train_dataset写成文件路径或 repo ID需要混合格式或混合多个数据源时才必须写dataset_info.yaml。验证数据集加载不需要启动完整训练就可以先确认dataset_info.yaml能被正确解析、数据格式正确。方式一直接用DataEngine模块的入口打印第一个样本命令来自 src/llamafactory/v1/core/data_engine.py 末尾的__main__用法python -m llamafactory.v1.core.data_engine --train_dataset data/dataset_info.yaml输出应为一条转换后的标准样本即包含messages字段的字典每条消息带role、content、loss_weight。方式二用 Python API 检查混合后的整体规模与构成from llamafactory.v1.core.data_engine import DataEngine engine DataEngine(data/dataset_info.yaml) print(len(engine)) # 混合索引的总样本数size/weight 调整之后 print(list(engine.datasets.keys())) # 各数据集名称应包含 yaml 中定义的三个名称 print(engine[0]) # 第一个样本docs/zh/data-preparation/data-processing.md 给过一段示例输出例如数据集总样本数: 500、数据集列表: [default]。这是文档示例数值随你配置的数据集和size、weight而变不必与之一致判断加载是否成功的依据是engine.datasets里出现了 yaml 中定义的每个数据集名且engine[0]是带messages字段的标准样本。DataEngine还支持列表访问与切片访问例如engine[[0, 5, 10]]取指定索引、engine[0:10]取前 10 条流式数据集不支持索引访问见 docs/zh/dev-guide/core/data-engine.md。边界与不支持项流式与非流式数据集不能混在一个dataset_info.yaml里会直接抛ValueError。本地加载按文件扩展名推断 builder扩展名不在.arrow/.csv/.json/.jsonl/.parquet/.txt列表内时会抛ValueError: Unknown dataset filetype。不带converter时数据被原样当作标准格式使用如果字段实际不匹配问题会在训练取样本时才暴露建议先用上面的方式抽查engine[0]。本地路径支持目录但目录类型以第一个文件推断目录内文件类型不一致时结果不可靠建议直接指向单个文件。下一步是把这些数据真正用于训练可参考 examples/v1/train_lora/train_lora_sft.yaml 的完整训练配置自定义数据格式的转换器扩展方式见 docs/zh/dev-guide/plugins/data-plugins.md。【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100 LLMs VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考