十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

XTuner 数据集准备实战指南:HuggingFace 直连与 Arxiv、MOSS、Lawyer、LLaVA、RefCOCO 等数据集的下载与预处理

XTuner 数据集准备实战指南:HuggingFace 直连与 Arxiv、MOSS、Lawyer、LLaVA、RefCOCO 等数据集的下载与预处理 XTuner 数据集准备实战指南HuggingFace 直连与 Arxiv、MOSS、Lawyer、LLaVA、RefCOCO 等数据集的下载与预处理【免费下载链接】xtunerA Next-Generation Training Engine Built for Ultra-Large MoE Models项目地址: https://gitcode.com/GitHub_Trending/xt/xtuner本文是 XTuner 训练前数据准备环节的完整实操手册覆盖两类数据接入路径一类是 HuggingFace Hub 上可直接加载的开源数据集另一类是未托管于 Hub、需要手工下载与预处理的专用数据集Arxiv Gentitle、MOSS-003-SFT、Chinese Lawyer、LLaVA、RefCOCO。读完本文你将掌握xtuner preprocess预处理子命令的参数语义、各类数据集的目录组织约定、与仓库内预置配置之间的路径对应关系以及预处理产物如何流入process_hf_dataset数据流水线为后续单轮/多轮对话微调打下数据基础。一、总览XTuner 数据接入的两种路径在 XTuner 中训练数据有两种典型来源本文档与仓库配置共同对应的处理策略如下数据来源处理方式代表数据集HuggingFace Hub 数据集直接通过datasets.load_dataset加载无需本地预处理alpaca、oasst1、open_orca 等未发布在 Hub 上的数据集手工下载 →xtuner preprocess预处理 → 按约定路径摆放Arxiv、MOSS-003-SFT、Chinese Lawyer、LLaVA、RefCOCO从 CLI 入口 可以看到XTuner 定义了完整的命令模式集合其中preprocess模式正是为第二类数据准备的目前内置arxiv与refcoco两个预处理子命令分别对应论文标题生成与引用表达式定位Referring Expression两类多模态/文本任务的数据清洗。二、HuggingFace Hub 数据集开箱即用对于托管在 HuggingFace Hub 上的数据集如tatsu-lab/alpacaXTuner 可以直接消费无需任何本地预处理。其底层路径是datasets.load_dataset加载原始数据后进入 process_hf_dataset 流水线依次执行数据集级 map 函数dataset_map_fn与模板级 map 函数template_map_fn完成从原始字段到conversation标准格式的转换、tokenize、padding 与 packing。核心注意事项HF 数据集本身格式各异能否开箱即用取决于 XTuner 是否内置了对应数据集的 map 函数。仓库 dataset_map_fns 目录下内置了alpaca_map_fn.py、oasst1_map_fn.py、open_orca_map_fn.py、wizardlm_map_fn.py、sql_map_fn.py等 20 个映射实现覆盖了仓库预置配置所依赖的主流对话格式。关于 HF 数据集接入的详细字段对齐与模板配置请参考同目录下的两篇配套文档single_turn_conversation.md 与 multi_turn_conversation.md它们分别说明了单轮与多轮对话数据的标准结构conversation列表中system/input/output字段的约定。三、Arxiv Gentitle论文标题生成数据集Arxiv 数据集未发布在 HuggingFace Hub 上需要从 Kaggle 的Cornell-University/arxiv数据集页面下载原始数据再通过xtuner preprocess arxiv过滤出目标学科类别与时间范围。Step 0下载原始数据从 Kaggle 的 Cornell-University/arxiv 数据集页面下载原始 JSONL 数据作为后续预处理的输入文件。Step 1过滤并生成训练数据xtuner preprocess arxiv ${DOWNLOADED_DATA} ${SAVE_DATA_PATH} [optional arguments]一个实际示例——筛选出2020-01-01之后所有cs.AI、cs.CL、cs.CV三个类别的论文xtuner preprocess arxiv ${DOWNLOADED_DATA} ${SAVE_DATA_PATH} --categories cs.AI cs.CL cs.CV --start-date 2020-01-01Step 1 背后的过滤逻辑源码级该子命令的实现位于 arxiv.py其参数语义如下参数类型默认值说明src_file位置参数必填从 Kaggle 下载的原始数据文件路径dst_file位置参数必填过滤后 JSON 文件的保存路径--categoriesnargs[cs.AI, cs.CL, cs.CV]目标学科类别可传多个--start-datestr2020-01-01起始日期格式YYYY-MM-DD过滤逻辑arxiv.py逐行解析 JSONL通过has_intersection判断该论文的categories字段与目标类别是否存在交集arxiv.py通过datetime.strptime(item[update_date], %Y-%m-%d) from_time保留更新日期不早于起始日期的论文最终将过滤结果整体json.dump到dst_file并打印Save to ...与条目数。Step 2路径约定与配置接入所有 Arxiv Gentitle 相关配置默认假设数据集路径为./data/arxiv_data.json。你可以将处理后的数据移动并重命名为该路径或直接修改配置中的data_path。以 internlm2_7b_qlora_arxiv_gentitle_e3.py 为例# 1. Download data from https://kaggle.com/datasets/Cornell-University/arxiv # 2. Process data by xtuner preprocess arxiv ${DOWNLOADED_DATA} ./data/arxiv_data.json [optional arguments] data_path ./data/arxiv_data.json prompt_template PROMPT_TEMPLATE.default max_length 2048 pack_to_max_length True该配置在train_dataset中通过dataset_map_fnarxiv_map_fn完成字段映射config 第 134-146 行。映射规则定义在 arxiv_map_fn.pydef arxiv_map_fn(example): return { conversation: [{ system: SYSTEM_TEMPLATE.arxiv_gentile, input: example[abstract], output: example[title] }] }即论文摘要abstract作为输入标题title作为输出系统提示词使用SYSTEM_TEMPLATE.arxiv_gentile。任务本质是给定摘要生成标题的生成式微调。此外arxiv_dataset 中还存在一个内置的默认路径./data/arxiv_postprocess_csAIcsCLcsCV_20200101.json对应默认类别与默认起始日期处理后的产物命名说明该 API 与预置配置文件路径约定是并行维护的两套入口。四、MOSS-003-SFT带工具调用的中文 SFT 数据MOSS-003-SFT 数据集包含无工具与带工具两个部分可从 HuggingFace 的fnlp/moss-003-sft-data仓库获取。Step 0下载数据# 确保已安装 git-lfs git lfs install git clone https://huggingface.co/datasets/fnlp/moss-003-sft-dataStep 1解压cd moss-003-sft-data unzip moss-003-sft-no-tools.jsonl.zip unzip moss-003-sft-with-tools-no-text2image.zipStep 2路径约定所有 moss-003-sft 配置默认假设数据集路径为./data/moss-003-sft-no-tools.jsonl无工具子集./data/conversations_with_tools_with_inner_instruction_no_text2image_train_all_random_meta0.5_0.1_0.01_moss_0709.jsonl带工具子集同样你可以移动/重命名数据或修改配置。从源码 moss_003_sft.py 可以看到moss_003_sft_dataset通过ConcatDataset([plugins, no_plugins])将带工具与无工具两个子数据集拼接成一个训练集两个子集都基于 MOSSSFTDataset 加载默认max_length2048。因此两个部分都需要下载解压到位缺一则拼接失败。五、Chinese Lawyer法律领域 SFT 数据Chinese Lawyer 数据集包含两个子数据集来源为 GitHub 上的 LAW-GPT 项目。所有 lawyer 配置默认假设数据集路径为./data/CrimeKgAssitant清洗后_52k.json罪名知识助手子集约 52k 条./data/训练数据_带法律依据_92k.json带法律依据的问答子集约 92k 条从源码 lawyer.py 可以确认lawyer_dataset同样通过ConcatDataset将lawyer_crime_dataset与lawyer_reference_dataset合并两个子集分别加载各自的数据文件因此两个文件缺一不可。两个子数据集的字段映射略有差异见 crime_kg_assitant_map_fn.py 与 law_reference_map_fn.py罪名知识助手子集input→inputoutput→output法律依据子集question→inputanswer→output两者共享SYSTEM_TEMPLATE.lawyer系统提示词说明两个子集在训练时使用同一套法律场景提示模板。六、LLaVA 数据集视觉语言模型预训练与指令微调LLaVA 相关配置见 llava 配置目录统一以./data/llava_data/为数据根目录分为Pretrain对齐预训练与Finetune指令微调两个阶段两阶段需要的文件不同。目录结构总览./data/llava_data ├── LLaVA-Pretrain │ ├── blip_laion_cc_sbu_558k.json │ ├── blip_laion_cc_sbu_558k_meta.json │ └── images ├── LLaVA-Instruct-150K │ └── llava_v1_5_mix665k.json └── llava_images ├── coco │ └── train2017 ├── gqa │ └── images ├── ocr_vqa │ └── images ├── textvqa │ └── train_images └── vg ├── VG_100K └── VG_100K_2该结构与预置配置中的路径拼接方式完全对应例如 llava_internlm2_chat_1_8b_clip_vit_large_p14_336_e1_gpu8_pretrain.pydata_root ./data/llava_data/ data_path data_root LLaVA-Pretrain/blip_laion_cc_sbu_558k.json image_folder data_root LLaVA-Pretrain/images微调配置则指向llava_images与 LLaVA-Instruct 数据例如 finetune 配置 中image_folder data_root llava_images。Pretrain 阶段下载 LLaVA-Pretrain# 确保已安装 git-lfs git lfs install git clone https://huggingface.co/datasets/liuhaotian/LLaVA-Pretrain --depth1下载后按目录结构摆放JSON 标注文件放入LLaVA-Pretrain/图片目录对应LLaVA-Pretrain/images。Pretrain 阶段使用 llava_image_only_map_fn该 map 函数将对话中的图片 token 提取出来仅保留DEFAULT_IMAGE_TOKEN作为输入实现看图描述式的对齐预训练。Finetune 阶段文本数据 图片数据1. 文本数据——LLaVA-Instruct-150K# 确保已安装 git-lfs git lfs install git clone https://huggingface.co/datasets/liuhaotian/LLaVA-Instruct-150K --depth1得到LLaVA-Instruct-150K/llava_v1_5_mix665k.json约 66.5 万条混合指令数据。2. 图片数据——五个来源分别下载子目录数据来源说明coco/train2017COCO train2017 图片包下载后解压gqa/imagesGQA images 图片包下载后解压ocr_vqa/imagesOCR-VQA 下载脚本⚠️ 需将所有图片扩展名统一为.jpgtextvqa/train_imagesTextVQA train_val_images下载后解压vg/VG_100K与vg/VG_100K_2VisualGenome part1 / part2两个压缩包分别解压到两个目录OCR-VQA 扩展名统一为.jpg的脚本由于 OCR-VQA 部分图片的原始扩展名不是.jpg而配置与数据加载逻辑按.jpg查找文件必须执行以下脚本脚本来自官方文档使用时需将target_dir替换为你的 OCR-VQA 图片目录#!/bin/bash ocr_vqa_pathyour-directory-path find $target_dir -type f | while read file; do extension${file##*.} if [ $extension ! jpg ] then cp -- $file ${file%.*}.jpg fi done微调阶段使用 llava_map_fn将DEFAULT_IMAGE_TOKEN归一化到消息首行DEFAULT_IMAGE_TOKEN \n 文本保证视觉 token 与文本在序列中的位置稳定。图片读取与预处理由 LLaVADataset 完成__getitem__中按image_folder image_file打开图片可选pad_image_to_square填充为正方形后送入 image processor 得到pixel_valuesllava.py。七、RefCOCO 数据集引用表达式定位REC任务RefCOCO 系列RefCOCO / RefCOCO / RefCOCOg是经典的 Referring Expression Comprehension 数据集用于训练模型根据自然语言描述定位图中目标。XTuner 通过xtuner preprocess refcoco将原始标注转换为可直接训练的 JSON 格式。目录结构总览./data ├── refcoco_annotations │ ├── refcoco │ │ ├── instances.json │ │ ├── refs(google).p │ │ └── refs(unc).p │ ├── refcoco │ │ ├── instances.json │ │ └── refs(unc).p │ └── refcocog │ ├── instances.json │ ├── refs(google).p │ └── refs(und).p ├── coco_images │ ├── *.jpg ...下载与摆放下载 RefCOCO、RefCOCO、RefCOCOg 三个数据集的标注文件分别来自 UNC 的 referit 数据发布页下载后解压并统一放入./data/refcoco_annotations目录保持子目录名称与上述结构一致refcoco/、refcoco/、refcocog/。图片部分使用 COCO 图片train2017 与 train2014 均可数据加载时按coco/train2017/image_id.jpg的相对路径查找解压到coco_images目录。转换为 XTuner 可用的 JSON 格式xtuner preprocess refcoco --ann-path $RefCOCO_ANN_PATH --image-path $COCO_IMAGE_PATH \ --save-path $SAVE_PATH # ./data/llava_data/RefCOCOJson/转换结果保存在$SAVE_PATH/train.json文档建议使用./data/llava_data/RefCOCOJson/。转换过程源码解析子命令实现位于 convert_refcoco.py三个参数及其默认值参数默认值说明--ann-pathdata/refcoco_annotationsRefCOCO 标注根目录--image-pathdata/llava_data/llava_images/coco/train2017COCO 图片目录--save-path./转换后 JSON 的保存目录转换逻辑convert_refcoco.py依次处理三组数据对(refcoco, unc)、(refcoco, unc)、(refcocog, umd)每组通过RefCOCOJsonDataset.get_data_json读取 train split 的引用标注最终合并写入train.json。get_data_json的具体流程refcoco_json.py用内置的REFER解析器加载instances.json与refs(splitBy).p遍历每个引用ref取所有自然语言描述句子sentences读取对应图片尺寸将 bbox 归一化为百分比整数normalize_bboxx/width, y/height, (xw)/width, (yh)/height后乘 100 取整以dataset-splitBy-image_id-句子生成唯一data_id去重后返回样本列表。训练时 RefCOCOJsonDataset 会基于内置的 7 条指令模板池如[refer] give me the location of {}、[refer] where is {} ?等为每个样本生成多轮对话变体答案格式为{{x1y1x2y2}}的归一化 bbox。仓库还提供了配套评估工具xtuner eval_refcoco见 entry_point.py 的 CLI 帮助以及 eval_refcoco.py可对微调后的模型进行 REC 指标评测。八、数据就绪后的校验与下一步数据准备完成后XTuner 提供了两个实用的校验/检视命令详见 CLI 帮助# 打印经 map 与模板处理后的最终训练样本检查字段映射是否符合预期 xtuner log-dataset $CONFIG # 校验自定义数据集的配置正确性 xtuner check-custom-dataset $CONFIG其中log-dataset会实际走一遍process_hf_dataset流水线并打印处理后的样本是确认预处理产物 map_fn prompt_template三者对齐的最直接手段check-custom-dataset则在不实际加载完整数据的前提下快速验证配置合法性。总结本文完整覆盖了 XTuner 训练数据准备的两条路径HuggingFace Hub 数据集的即插即用以及 Arxiv、MOSS-003-SFT、Chinese Lawyer、LLaVA、RefCOCO 五类本地数据集的下载、解压、目录摆放与xtuner preprocess预处理。核心要点可归结为三条路径即契约仓库预置配置对数据路径有硬性约定如./data/arxiv_data.json、./data/llava_data/、./data/refcoco_annotations/要么按约定摆放要么同步修改配置中的data_path/image_folder子数据集缺一不可MOSS 与 Lawyer 均通过ConcatDataset拼接两个子集LLaVA 微调需要文本与五个图片来源齐全遗漏任何一个文件都会导致训练启动失败预处理子命令参数明确xtuner preprocess arxiv与xtuner preprocess refcoco的过滤/转换逻辑均可在 data_preprocess 目录中直接阅读字段映射规则则在 dataset_map_fns 中一一对应任何自定义数据集都可以参照这些实现编写自己的 map 函数。数据就绪后即可参考 single_turn_conversation.md、multi_turn_conversation.md 与 finetune.md 进入训练环节。【免费下载链接】xtunerA Next-Generation Training Engine Built for Ultra-Large MoE Models项目地址: https://gitcode.com/GitHub_Trending/xt/xtuner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表