
人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本指南以 PaddleNLP 官方文档 docs/zh/llm/dataset.md 为骨架系统梳理预训练数据集的两种来源——直接下载内置数据集与从零自制自定义数据集完整覆盖从原始文本到 jsonl、再到 bin/idx 的两阶段转换流程并结合仓库内 llm/tools/preprocess 下的实际脚本源码深入讲解每个参数的底层作用与实战配置帮助读者一次掌握 Llama 等主流大模型预训练数据的标准化制作方法。一、Pretrain 数据集总览两条路线在 PaddleNLP 中预训练数据可以来自两条路径内置数据集直接下载官方已按各模型的 tokenizer 完成 ID 化处理下载.bin与.idx放到同一目录在预训练配置中指定input_dir即可直接使用自定义数据集自行制作使用 trans_to_json.py 与 create_pretraining_data.py 两个脚本按标准流水线把原始语料加工成模型可读的二进制格式。两种方式产出的数据格式完全一致.bin文件保存数据 ID 化后的 token id 序列.idx文件保存句子与文章的位置索引训练框架通过二者快速随机读取任意文档。二、内置数据集下载即用下表整理了 PaddleNLP 已制作好的内置预训练数据集。每个数据集均按不同模型系列的词表分别制作了.bin/.idx版本制作时间数据来自官方文档标注供参考| 名称 | 文本类型 | 纯文本大小 | 适配模型 | 制作时间 | 出处 | | - | - | - | - | - | - | | OpenWebText2 | 英文 | 70GB |meta-llama/Llama-2-7b、meta-llama/Llama-2-7b-chat、meta-llama/Llama-2-13b、meta-llama/Llama-2-13b-chat、facebook/llama-7b、facebook/llama-13b| 42min | OpenWebTextCorpus | | OpenWebText2 | 英文 | 70GB |gpt2-en| 37min | OpenWebTextCorpus | | CLUECorpusSmall | 中文 | 14GB |idea-ccnl/ziya-llama-13b-v1| 15min | CLUECorpus2020 | | CLUECorpusSmall | 中文 | 14GB |baichuan-inc/Baichuan-7B| 12min | - | | CLUECorpusSmall | 中文 | 14GB |linly-ai/chinese-llama-2-7b、linly-ai/chinese-llama-2-13b| 19min | - | | CLUECorpusSmall | 中文 | 14GB |baichuan-inc/Baichuan-13B-Base、baichuan-inc/Baichuan-13B-Chat| 14min | - | | CLUECorpusSmall | 中文 | 14GB |baichuan-inc/Baichuan2-7B-Base、baichuan-inc/Baichuan2-7B-Chat、baichuan-inc/Baichuan2-13B-Base、baichuan-inc/Baichuan2-13B-Chat| 13min | - | | CLUECorpusSmall | 中文 | 14GB |meta-llama/Llama-2-7b、meta-llama/Llama-2-7b-chat、meta-llama/Llama-2-13b、meta-llama/Llama-2-13b-chat、facebook/llama-7b、facebook/llama-13b、FlagAlpha/Llama2-Chinese-7b-Chat、FlagAlpha/Llama2-Chinese-13b-Chat| 20min | - | | WuDaoCorpus2.0 Base | 中文 | 200GB |idea-ccnl/ziya-llama-13b-v1| 3h35min | WuDaoCorpora | | WuDaoCorpus2.0 Base | 中文 | 200GB |baichuan-inc/Baichuan-7B| 2h52min | - |使用方式非常简单将对应模型的bin与idx下载后放在同一个目录下然后在预训练脚本中指定input_dir即可。以 llm/config/llama/pretrain_argument.json 为例{ model_name_or_path: meta-llama/Meta-Llama-3-8B, tokenizer_name_or_path: meta-llama/Meta-Llama-3-8B, input_dir: ./data, output_dir: ./checkpoints/pretrain_ckpts, max_seq_length: 4096, max_steps: 10000, save_steps: 5000, eval_steps: 1000, bf16: true, fp16_opt_level: O2, do_train: true, do_eval: true }把下载好的xxx.bin、xxx.idx放入./data目录input_dir指向该目录即可启动预训练。tokenizer_name_or_path应与下载数据集时对应的模型词表保持一致避免 token 空间错位。三、自定义数据集两阶段制作流程若需要自己准备语料领域数据、私有数据、新语种等则需走标准制作流程。整体分为两个阶段llm/tools/preprocess/README.md 中的流程表如下| 步骤 | 阶段 | 数据格式 | 样例 | | - | - | - | - | | 0️⃣ 初始状态 | - | 原始数据每个 doc 之间用空行间隔开中文默认每句换行符作为句子结束英文默认使用 nltk 判断句子结束 |飞桨是功能完备、开源开放的产业级深度学习平台。/飞桨拥有核心训练和推理框架、基础模型库。空行/PaddleNLP是自然语言处理领域的优秀工具。| | 1️⃣ 原始数据转换trans_to_json.py| 预处理输入初始状态输出 jsonl | jsonl 格式每个 doc 对应一行 json 字符串 |{text: 飞桨是功能完备、开源开放的产业级深度学习平台。飞桨拥有...}/{text: PaddleNLP是自然语言...}| | 2️⃣ 数据 ID 化create_pretraining_data.py| 预处理 | bin 格式数据 ID 化后的 token ididx 格式数据句子、文章位置索引 | - |除了文档中的两阶段主流程llm/tools/preprocess/README.md 还给出了完整的四步数据 Pipeline其中包含两个可选环节❇️可选数据中文分词words_segmentation.py对中文预训练做 WWMWhole Word Mask的可选步骤。数据量较小时无需此步直接在create_pretraining_data.py中分词即可数据量大或需要多次转换数据时提前分词可以避免每次 ID 化都重复跑分词程序。注意分词后需重新执行步骤 1️⃣ 转换为 jsonl再在步骤 2️⃣ 中设置--cn_splitedTrue跳过重复分词3️⃣ 训练 index 文件生成训练启动时根据max_steps生成 npy 格式的 train / valid / test 样本索引文件4️⃣ token 动态 mask可选在 Dataset 取数时于 Python 层实时 mask 文本对应实现位于data_tools/dataset_utils.py的create_masked_lm_predictions函数可参考 Megatron 灵活配置do_whole_word_mask、favor_longer_ngram、do_permutation、geometric_dist等策略。环境依赖方面脚本需要tqdm、numpy、pybind11、fast_dataindex可选lac与zstandard用于.zst压缩格式输入部分功能需要g 4.8编译支持可通过pip install tqdm numpy pybind11 fast_dataindex lac zstandard安装。3.1 阶段 1原始数据转换trans_to_json.pytrans_to_json.py的职责是把原始文本文件按 doc 切分并序列化为 jsonl。从源码 llm/tools/preprocess/trans_to_json.py 看其核心逻辑是遍历输入文件按doc_spliter默认空行切分文档过滤掉长度小于min_doc_length的文档每篇文档写为一行{text: ...}支持多进程并行处理最后默认合并并 shuffle。optional arguments: -h, --help --input_path INPUT_PATH 必须设置可以是文件夹或者单个文件。文件夹中的目录默认最多搜索两层子目录。 --output_path OUTPUT_PATH 必须设置输出文件的名字。 --json_key JSON_KEY 建议不修改默认的 key 是 text。 --doc_spliter DOC_SPLITER 文章换行符可以根据实际情况修改默认空行作为文章换行符。 --min_doc_length MIN_DOC_LENGTH 可选。过滤掉长度多短的文章默认值 10。 --workers WORKERS 可选。多进程转化文件适用于 input_path 中包含的文件数据较多的情况。每个文件分配给不同 worker 处理。 --log_interval LOG_INTERVAL 可选。此处的 interval 是处理完文件个数的间隔。 --no-merge 可选。默认不开启默认每个文件转换的 jsonl 文本会拼接成到同一个文件。 --no-shuffle 可选。默认不开启默认对处理完的数据进行 shuffle。以下面 ziya-llama-13b-v1 的完整流程为例也是官方文档推荐的示例流程。首先下载样例数据并解压mkdir data cd data wget https://bj.bcebos.com/paddlenlp/models/transformers/data_tools/baike.txt cd ..然后执行转换得到baike_sample.jsonl此命令默认会对所有 doc 进行 shufflepython trans_to_json.py --input_path ./data --output_path baike_sample查看结果head -1 baike_sample.jsonl {text: 中国效仿西方发展工业的过程于中华民国国民政府成立后至中日战争开战前夕已顺畅发展尽管其间受到内外因素的多重干扰。尔后直至中日战争和国共战争的结束 中国始有较为长期的和平发展时期。\n1980年代以来邓小平政府宣布改革开放开始实行社会主义市场经济并推行经济体制改革。中国大陆近年至2010年GDP超过72000亿美元 已经成为美国之后的世界第二经济大国普遍认为中国是世界上发展速度最快的经济体但是人均国民生产总值仍位于世界中等水平第89位并逐渐受到资源限制和贫富差距加 大的制约。中华人民共和国省份中广东为GDP最高的第一强省浙江为人均收入最高的第一富省。中国大陆、香港、澳门、台湾之间的经济联系在全球化的过程中日益紧密。\n}3.2 阶段 2数据 ID 化create_pretraining_data.pycreate_pretraining_data.py是数据流水线的核心它加载指定模型的 tokenizer将 jsonl 文本断句、分词、tokenize 为 token id并通过 paddlenlp/data/indexed_dataset.py 构建 mmap 或 lazy 格式的bin/idx文件。从源码 llm/tools/preprocess/create_pretraining_data.py 可以看到几个关键技术细节脚本会先检查 tokenizer 的vocab_size若小于2**16 - 1则用np.uint16存储 token id否则使用np.int32从机制上控制文件体积输入支持.jsonl与.zstzstandard 压缩两种格式其他后缀文件会被跳过--append_eos开启时会在每篇文档末尾追加eos_token_id若 tokenizer 没有定义 eos token会打印 warning 并跳过源码中的Converter.encode逻辑中文断句使用NewlineSplitter按换行切分句子英文断句依赖 nltk 的 punkt 模型中文 WWM 通过get_whole_word_mask_tokens实现先用 jieba / LAC 等对句子分词再在 WordPiece token 序列上为词中间字符添加##前缀标记供后续 whole-word mask 使用内置remove_repeated_chars去重逻辑可将连续重复超过max_repeated_len默认 100的字符压缩过滤低质量文本。optional arguments: --model_name MODEL_NAME 必须设置如idea-ccnl/ziya-llama-13b-v1。 --tokenizer_name {LlamaTokenizer} 模型对应的 tokenizerLlama 模型需使用 LlamaTokenizer。 data input/output: --input_path INPUT_PATH 必须设置输入文件 jsonl 的目录。 --output_prefix OUTPUT_PREFIX 必须设置输出文件的名称。假设名称为 XXX则会输出 XXX.bin、XXX.idx 两个文件。 其中 bin 文件数据 id 化后的 token idsidx 文件数据句子、文章位置索引。 --data_format {JSON} 不需要设置。目前默认处理 jsonl 数据格式。 --json_key JSON_KEY 文本串 json 的 key 值。同前面 trans_to_json.py 的 json_key默认 text 为 key。 --split_sentences 是否需要将文章划分成句子。一般而言GPT 不需要BERT/ERNIE 类模型需要。 --data_impl 处理后的数据格式可选 mmap 或 lazy。 其中 mmap 在训练时读入数据会建立内存映射lazy 在读入数据时直接从文件读取。 chinese words: --chinese 若设置了 split_sentences 并处理中文则需要设置。 --cn_whole_word_segment 可选。是否需要 WWM 策略。一般而言GPT 类模型不需要BERT/ERNIE 类模型需要。 --cn_seg_func {lac,seg,jieba} 默认 jiebajieba 速度较快lac 模型更准确、计算量高。 --cn_splited 可选。对分词后的文本设置此选项则 cn_seg_func 不起作用。 例如分词后文本串中国 效仿 西方 发展 工业 的过 程 --cn_split_dimer CN_SPLIT_DIMER 配合 cn_splited 使用默认空格表示分词间隔。 common config: --append_eos gpt 模型专用gpt 设置此选项表示 doc 结束。 若 tokenizer 中不包含 eos_token则输出提示 warning 并且不添加 eos。 --log_interval LOG_INTERVAL 打印日志间隔interval 表示处理文本行数/doc 数的间隔。 --workers WORKERS 处理文本 id 化的进程个数。继续上面的示例使用 Llama 类模型进行 ID 化python -u create_pretraining_data.py \ --model_name idea-ccnl/ziya-llama-13b-v1 \ --tokenizer_name LlamaTokenizer \ --data_format JSON \ --input_path /home/data/baike_sample.jsonl \ --append_eos \ --output_prefix /home/data/baike_sample \ --workers 1 \ --log_interval 5 \ --data_impl mmap处理完成后在/home/data/目录下得到baike_sample.bintoken ids与baike_sample.idx文章索引信息两个文件即可用于预训练。两点补充说明如果使用已经分好词的语料可以设置--cn_splited为 True同时指定--cn_split_dimer如空格使用自定义词表时将--model_name指定为词表所在的文件夹地址即可。3.3可选合并数据集当语料规模很大时单次 ID 化耗时过长。官方推荐的策略是把 jsonl 拆分为多个小文件并行运行多个create_pretraining_data.py得到多组bin/idx再用 merge.py 合并。从源码看merge 会扫描输入目录中的.bin/.idx配对文件按前缀排序后依次调用builder.merge_file_追加写入最后finalize生成合并后的 idx。python merge.py \ --input /home/data/ \ --output-prefix /home/data/merged \ --data_impl mmap参数说明arguments: --input INPUT_PATH 待合并的文件所在文件夹文件夹内各个小文件按需要 merge 的顺序命名 如 1.bin / 1.idx2.bin / 2.idx... --output_prefix OUTPUT_PREFIX 合并后输出文件的名称假设名称为 XXX则会输出 XXX.bin、XXX.idx 两个文件。 --data_impl {mmap,lazy} merge 前后的数据格式可选 mmap 或 lazy各个待 merge 的文件需格式一致。按官方文档标注将两份 500G 文件合并为 1T 大约需要 1 小时。合并完成后/home/data目录下即得到merged.bin和merged.idx。注意单个数据集不宜过大容易出现 int32 越界建议单个文件 docs 数目不超过 5 亿。四、LLM 与 MLM 模型的数据参数差异create_pretraining_data.py的参数选择与预训练任务类型强相关这是实战中最容易混淆的地方。综合 llm/tools/preprocess/README.md 及四个语料教程可以总结出两条典型配置LLM自回归如 Llama / GPT 系列——只需要连续 token 序列不切句、不分词但必须加 EOS 分隔文档python -u create_pretraining_data.py \ --model_name_or_path idea-ccnl/ziya-llama-13b-v1 \ --input_path baike_sample.jsonl \ --output_prefix baike_sample \ --data_format JSON \ --json_key text \ --data_impl mmap \ --append_eos \ --log_interval 5 \ --workers 40MLM掩码语言模型如 ERNIE / BERT 系列——需要断句、中文分词与 WWM 策略python -u create_pretraining_data.py \ --model_name_or_path ernie-3.0-base-zh \ --input_path baike_sample.jsonl \ --output_prefix baike_sample \ --data_format JSON \ --json_key text \ --split_sentences \ --data_impl mmap \ --chinese \ --cn_whole_word_segment \ --cn_seg_func jieba \ --log_interval 5 \ --workers 40关键差异对照| 参数 | LLMGPT/Llama | MLMBERT/ERNIE | | - | - | - | |--split_sentences| 不需要 | 需要 | |--append_eos| 需要标记 doc 结束 | 不需要 | |--chinese/--cn_whole_word_segment| 不需要 | 需要中文语料 | |--cn_seg_func| 不需要 | jieba快/ lac准 |五、四个常用开源语料制作实战llm/tools/preprocess/docs 目录下提供了 CLUECorpusSmall、OpenWebText2、WuDaoCorpus2.0 Base、CLUECorpus2020 四份语料的完整制作教程与内置数据集的表格一一对应。以下摘录各语料的要点。5.1 CLUECorpusSmall中文 14GB数据量超过 14G包含近 4000 个 txt 文件、约 50 亿字主要由新闻news2016zh、社区互动webText2019zh、维基百科wiki2019zh、评论comment2019zh四个子语料组成。获取后解压并转换unzip comment2019zh_corpus.zip -d clue_corpus_small_14g/comment2019zh_corpus unzip news2016zh_corpus.zip -d clue_corpus_small_14g/news2016zh_corpus unzip webText2019zh_corpus.zip -d clue_corpus_small_14g/webText2019zh_corpus unzip wiki2019zh_corpus.zip -d clue_corpus_small_14g/wiki2019zh_corpus python trans_to_json.py --input_path ./clue_corpus_small_14g --output_path clue_corpus_small_14g.jsonl之后按 Llama--append_eos或 ERNIE--split_sentences --chinese --cn_whole_word_segment --cn_seg_func lac的模板执行 ID 化workers表示转换的线程数。该数据集约有 1570 万条文档分词较耗时官方标注约 1 小时完成产出clue_corpus_small_14g.bin/.idx。5.2 OpenWebText2英文 70GB来源于 Reddit 链接的网页文本经过去重与清洗包含 800 多万个文档。官方教程推荐直接使用 EleutherAI 清洗好的版本wget https://paddlenlp.bj.bcebos.com/models/transformers/gpt/openwebtext2.jsonl.zst.tar tar -xvf openwebtext2.json.zst.tar -C /path/to/openwebtextLlama 训练数据制作.zst压缩输入无需手动解压脚本自动识别python -u create_pretraining_data.py \ --model_name meta-llama/Llama-2-7b \ --tokenizer_name LlamaTokenizer \ --data_format JSON \ --input_path /path/to/openwebtext/ \ --append_eos \ --output_prefix llama_openwebtext \ --workers 40 \ --log_interval 10000 \ --data_impl mmap约 1 小时产出llama_openwebtext.bin/.idx统一放入data目录备用mkdir data mv llama_openwebtext.bin ./data mv llama_openwebtext.idx ./data5.3 WuDaoCorpus2.0 Base中文 200GB悟道中文大规模语料开源部分为 200GB。教程给出的完整路径是先分词、再转 jsonl、最后 ID 化python words_segmentation.py \ --input_path ./WuDaoCorpus2.0_base_200G \ --workers 40 \ --data_format wudao \ --cn_seg_func seg \ --output_path ./wudao_lac_cut python ./trans_to_json.py \ --input_path ./wudao_lac_cut \ --output_path wudao_corpus_200g.jsonl \ --workers 40然后按 Llama / ERNIE 模板 ID 化。由于语料已提前分词ERNIE 模板需额外加--cn_splited源码中cn_splited为 True 时会用cn_split_dimer直接切分已分词文本跳过 jieba/lac 分词而 Llama 不需要提前分词直接转换 jsonl 后 ID 化即可。教程还提示分词时对文本做了简单断句以支持 SOPSentence Order Predict任务若语料只有单句建议训练时设置binary_headFalse去除 SOP loss。5.4 CLUECorpus2020中文 200GB通过对 Common Crawl 中文部分清洗得到开源约 200G。需要向官方CLUEbenchmark163.com邮件申请说明研究目的、用途、计划与机构信息并承诺不向第三方提供。下载后同样走「转 jsonl → ID 化」标准流程。六、从数据到训练目录组织与配置对接数据制作完成后将其放入训练数据目录并更新预训练配置即可。以 llm/config/llama/pretrain_argument.jsonLlama-3-8B 示例配置为例mkdir data mv baike_sample.bin ./data mv baike_sample.idx ./data在配置中让input_dir指向该目录如./data同时保证model_name_or_path、tokenizer_name_or_path与制作数据时所用的模型一致。max_seq_length如 4096决定了训练时从长文档中截取的序列长度训练框架会结合.idx中的文档边界信息完成随机采样与拼接。更多预训练启动方式可参考 llm/config/llama 下的 pretrain 配置及 llm/run_pretrain.py。七、总结PaddleNLP 的预训练数据体系可以概括为「两条路线、两阶段流水线」内置数据集下载即用自定义数据集则通过trans_to_json.py原始文本 → jsonl与create_pretraining_data.pyjsonl → bin/idx标准化产出训练数据。实践中只需根据模型类型选择 LLM 或 MLM 参数模板、按数据规模决定是否启用并行分片与 merge 合并即可高效完成从任意原始语料到可训练数据的转换支撑 Llama、Baichuan、ERNIE 等主流模型的预训练任务。赞分享人工智能大模型NLP深度学习预训练微调RLHF模型量化【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐Ultralytics Open Images V7 数据集实战指南601 类大词表检测的数据配置、预训练模型与 YOLO 训练全流程Ultralytics Open Images V7 数据集实战指南601 类大词表检测的数据配置、预训练模型与 YOLO 训练全流程 Open Images人工智能深度学习计算机视觉预训练大模型数据准备完全指南PaddleNLP预训练语料预处理与数据集构建教程大模型数据准备完全指南PaddleNLP预训练语料预处理与数据集构建教程 PaddleNLP 是功能强大的大模型LLM与小语言模型SLM开源库内置丰人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测如何用 run_all.py --isolated 为每个技能在独立环境中运行测试套件如何用 run_all.py isolated 为每个技能在独立环境中运行测试套件 scientific agent skills 仓库把每个技能的测试放在仓库人工智能大模型NLP深度学习预训练微调RLHF模型量化模型推理服务本地部署模型压缩强化学习模型评测上一篇Foam 设计原则解读数据主权、可组合性与开放生态如何塑造 VSCode 个人知识管理系统下一篇全链路监控实战PrometheusJenkins构建高可用CI/CD流水线创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考