Chinese-Mixtral-8x7B训练数据处理完整教程:SkyPile与SlimPajama预处理实战
Chinese-Mixtral-8x7B训练数据处理完整教程SkyPile与SlimPajama预处理实战【免费下载链接】Chinese-Mixtral-8x7B中文Mixtral-8x7BChinese-Mixtral-8x7B项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-Mixtral-8x7BChinese-Mixtral-8x7B 是一个面向中文场景扩词表并做增量预训练的 MoE 大模型而训练数据处理恰恰是复现它的第一道关卡也是最容易被新手卡住的环节。本文将围绕 Chinese-Mixtral-8x7B 训练数据处理这条主线完整讲解 SkyPile-150B中文语料与 SlimPajama-6B英文语料从下载、格式转换、切分到子词切分的全部实战步骤即使你从未处理过大规模语料也可以照着一步步跑通全流程。为什么训练数据处理是中文大模型训练的第一步在大模型训练中垃圾进、垃圾出是一条铁律。训练数据的格式、质量和规模直接决定了模型最终的中文理解与生成能力。Chinese-Mixtral-8x7B 的增量预训练只用了约 42B Token 的语料SkyPile 30B SlimPajama 12B却能取得与 TigerBot-13B500B Token相当的中文表现靠的就是对训练数据处理流程的精细把控。整个训练数据处理链路可以概括为四步下载数据 → 格式转换 → 切分数据集 → 子词切分Token 化。下面我们逐步展开。第一步认识训练数据集 SkyPile-150B 与 SlimPajama-6B本项目使用了两类开源语料配置见 data/datasets.toml数据集语言使用量用途SkyPile-150B中文30B Token仅使用 2022 2023 年数据SlimPajama-6B英文12B Token数据集重复训练 2 个 EpochSkyPile-150B 负责教会模型中文语法与知识SlimPajama-6B 则帮助模型在英文上保持原版 Mixtral-8x7B 的强劲实力两者按约 30:12 的比例混合训练。第二步一键下载 SkyPile 与 SlimPajama 数据集项目提供了开箱即用的下载脚本 data/download.py内部通过snapshot_download从镜像站拉取数据并利用allow_patterns只保留 2023 年切片避免下载全量 150B 语料$ python data/download.py下载完成后SkyPile 的中文数据会落在data/zh/SkyPile-150B-2023目录若需要英文语料取消 data/download.py 中 SlimPajama 部分的注释即可。第三步SlimPajama parquet 格式转 jsonl 的完整方法SlimPajama-6B 原始数据是 parquet 格式无法直接喂给训练脚本需要先转换为 jsonl。这一步由 data/parquet2jsonl.py 完成它遍历数据目录中的每个 parquet 文件用pyarrow读入后按行写出 JSON 对象$ python data/parquet2jsonl.py转换结果保存在data/en/DKYoon-SlimPajama-6B.jsonl每行一个 JSON包含text字段。SkyPile 本身就是 jsonl 分片无需转换。上图是项目训练数据处理阶段选择中文词表时使用的 ALP 评估图横轴为新增中文单字 Token 数量纵轴为平均对数概率。Chinese-Mixtral-8x7B 正是借助该指标从数百个候选词表中选出了在书籍、百科语料上表现最优的 6414 单字 Token 方案使中文编解码效率比原版提升 41.5%。这提醒我们预处理时选对分词器等于为后续训练省下大量显存与时间。第四步合并分片并按 999:1 切分训练集与验证集下载后的数据集是多个 jsonl 分片需要先用cat合并为单个文件$ cat *.jsonl all.jsonl随后用wc -l统计总行数再按 999:1 的比例用split切分为训练集与验证集$ wc -l all.jsonl $ split -l lines all.jsonl $ mv xaa DKYoon-SlimPajama-6B-train.jsonl $ mv xab DKYoon-SlimPajama-6B-dev.jsonl训练集与验证集的行数比例 999:1是本项目经过实践验证的默认配置。第五步在 datasets.toml 中注册数据集切分完成后需要把数据集名称、路径注册到 data/datasets.toml预处理脚本才能找到它们[DKYoon-SlimPajama-6B] splits [train, dev] root {DATA_DIR}/en/{name} doc {name}-{split} encoded encoded-{name}-{split}其中doc指定原始 jsonl 文件名encoded指定预处理结果的保存位置。SkyPile 的两个年份也以同样方式注册在同一个文件中。第六步使用分词器进行子词切分预处理这是训练数据处理的核心步骤由 data/preprocess_datasets.py 完成。它加载datasets.toml中注册的所有数据集对每一条文本做两件事Token 化用分词器把文本切成子词序列拼接分块把所有文本按sequence_length 2048拼接成固定长度的训练样本group_texts逻辑见 data/preprocess_datasets.py并自动复制出labels用于语言建模。运行方式只需指定数据集名称与分词器路径$ python data/preprocess_datasets.py --ds_name SkyPile-150B-2023 --tokenizer_name_or_path tokenizer/Mixtral-8x7B-v0.1-vocab $ python data/preprocess_datasets.py --ds_name DKYoon-SlimPajama-6B --tokenizer_name_or_path tokenizer/Mixtral-8x7B-v0.1-vocab脚本会利用全部 CPU 核心并行处理并将结果通过save_to_disk保存为磁盘数据集训练时直接加载即可无需重复切分。第七步统计预处理后的 Token 总量子词切分完成后可以用 data/utils.py 快速核对各数据集的 Token 总量确认训练数据规模符合预期$ python data/utils.py脚本会读取datasets.toml中所有已编码的数据集按样本数 × 2048 / 10^9换算为 B十亿Token 并打印统计结果方便你估算训练步数与混合比例。预处理完成后如何启动增量预训练数据就绪后下一步就是启动训练。训练入口为 scripts/train-pt.sh你可以在其中通过TRAIN_DATASETS调整各数据集的使用比例例如1:SkyPile-150B-2022表示使用全量、0.1:SkyPile-150B-2023表示只取 10%TRAIN_DATASETS( 1:SkyPile-150B-2022 0.1:SkyPile-150B-2023 1:DKYoon-SlimPajama-6B )有 SLURM 集群可直接sbatch scripts/train-pt.sh本地环境则提取其中的torchrun命令即可开始训练。小结一条完整的训练数据处理链路回顾全文Chinese-Mixtral-8x7B 的训练数据处理可以浓缩为一张流程清单download.py 下载 → parquet2jsonl.py 转格式 → cat 合并 → split 切分 → datasets.toml 注册 → preprocess_datasets.py 子词切分 → utils.py 统计 Token。每一步都有对应脚本和明确的目录约定新手只需按顺序执行即可。最后这张生成效果对比图告诉我们认真对待训练数据处理最终会真实地反映在模型回答的准确性与丰富度上。掌握了 SkyPile 与 SlimPajama 的预处理实战你就已经迈出了复现中文 MoE 大模型最扎实的第一步。【免费下载链接】Chinese-Mixtral-8x7B中文Mixtral-8x7BChinese-Mixtral-8x7B项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-Mixtral-8x7B创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考