five

juliannunezb/midtrain-mix-5b-gpt2

收藏
Hugging Face2026-05-13 更新2026-05-31 收录
下载链接:
https://hf-mirror.com/datasets/juliannunezb/midtrain-mix-5b-gpt2
下载链接
链接失效反馈
官方服务:
资源简介:
Midtrain-Mix-5B-GPT2是一个包含约50亿个token的高质量中间训练混合数据集,专门用于GPT-2词汇表模型的继续预训练/中间训练/退火阶段。数据集使用GPT-2 BPE分词器(词汇量50257)进行预分词,并以flat uint16二进制格式存储,可直接通过np.memmap加载。数据来源经过优化组合:70%来自FineWeb-Edu(经过教育价值筛选的网页内容),20%来自英文维基百科(密集的事实性文本),10%来自Open-Web-Math(数学和arXiv内容)。该数据集不包含代码,专注于提升模型在事实性、教育性和数学内容上的知识整合能力,适用于在通用网页数据预训练后进行的第二阶段训练,通过降低学习率和高质量数据混合来巩固模型知识。

语言:英语 许可证:Apache-2.0 任务类别: - 文本生成 标签: - 继续预训练 - 中间训练 - 退火 - GPT-2 - 已分词 - 事实性 - 教育性 规模类别: - 10亿 < Token数 < 100亿 配置项: - 配置名称:default 数据文件: - 拆分集:train 路径:train.bin - 拆分集:val 路径:val.bin # Midtrain-Mix-5B-GPT2 数据集 **50亿Token**的高质量中间训练混合数据集,已使用**GPT-2 BPE分词器(GPT-2 BPE Tokenizer,词表大小50257)**完成预分词,打包为适配`np.memmap`的扁平`uint16`二进制文件。可直接接入任意适配GPT-2词表的预训练训练流程,用于已接触过通用网页语料的模型的**继续预训练/中间训练/退火**。 ## 何为中间训练?其价值何在? 在网页数据(如FineWeb、RedPajama、DCLM等)上完成标准预训练阶段后,现代大语言模型(Large Language Model, LLM)流程会开展**第二轮更短的训练阶段:使用更低的学习率(Learning Rate, LR),基于更高质量的混合语料**。该技术在不同实验室有多种命名: | 实验室 | 命名 | |---|---| | Meta(Llama-3项目) | 「退火阶段(annealing phase)」 | | DeepSeek(V3/R1系列) | 「推理语料继续预训练」 | | 艾伦人工智能研究所(Allen AI,OLMo项目) | 「第二阶段预训练」 | | Hugging Face(SmolLM2项目) | 「中间训练(mid-training)」 | 该流程的核心逻辑一致:严格筛选事实性、教育性、数学类内容,将学习率降至原水平的1/10,训练时长约为原预训练预算的5%~20%。如此可让模型在不遗忘已有知识的前提下,将更多知识固化至权重参数中。 本数据集即为面向小型GPT-2词表模型的「优质混合语料」。 ## 概览 - **总Token数**:约50亿(设计目标为在该数据集上完成1个训练轮次(epoch)) - **分词器**:`tiktoken.get_encoding("gpt2")`,词表大小50257,文档结束符(End of Text, EOT)ID为50256 - **存储格式**:扁平uint16二进制文件,可直接用于`np.memmap`内存映射 - **数据来源**(比例针对小型模型的知识密度需求优化): - 70% FineWeb-Edu(`HuggingFaceFW/fineweb-edu`的`sample-10BT`子集):通过基于Llama-3-70B标注训练的分类器筛选出的教育类网页语料 - 20% 英文维基百科(Wikipedia (en),`wikimedia/wikipedia`的`20231101.en`子集):高密度事实性散文文本 - 10% Open-Web-Math(`open-web-math/open-web-math`):数学、arXiv论文及LaTeX格式文本 - **本混合语料不含代码**。原因:在5000万至2亿参数的模型规模下,代码语料的利用率极低;而诸如[smoltalk](https://huggingface.co/datasets/HuggingFaceTB/smoltalk)这类监督微调(Supervised Fine-Tuning, SFT)语料已通过`apigen-80k`和`self-oss-instruct`包含代码数据。对于更大规模的模型,可另行添加代码语料源。 ## 数据集统计信息 | 指标 | 训练集 | 验证集 | | :--- | ---: | ---: | | Token数 | ~49.7亿 | ~2500万 | | 存储大小(uint16格式) | ~9.94 GB | ~50 MB | | 验证集占比 | 0.005 | — | (构建完成后,完整统计数据见`stats.json`文件)。 训练/验证集划分方式:基于每个文档以随机种子42进行抽样,验证集占比VAL_FRAC=0.005。验证集**完全匹配混合语料的分布**(即采用与训练集相同的抽样方式),并非仅从单一数据源中保留的数据。 ## 数据格式规范 数据格式极为简洁,仅包含两个扁平文件: train.bin uint16 拼接后的Token ID序列,为无分隔符的单一流数据 val.bin uint16 格式与训练集一致,为验证集Token序列 文档拼接时**不添加**EOT分隔符(训练流程的随机窗口采样器有时会采样到跨文档的窗口,这在中间训练场景中是可接受的,且通常有助于上下文融合)。 ## 数据加载方式 ### 标准`np.memmap`内存映射加载(推荐方式) python import numpy as np train = np.memmap("train.bin", dtype=np.uint16, mode="r") val = np.memmap("val.bin", dtype=np.uint16, mode="r") print(f"train: {len(train)/1e9:.2f} B tokens, val: {len(val)/1e6:.1f} M tokens") # 采样一个长度为BLOCK_SIZE的随机训练窗口(预训练风格): BLOCK_SIZE = 2048 ix = np.random.randint(0, len(train) - BLOCK_SIZE - 1) window = np.asarray(train[ix:ix+BLOCK_SIZE+1], dtype=np.int64) x = torch.from_numpy(window[:-1]) # 形状:(BLOCK_SIZE,) y = torch.from_numpy(window[1:]) # 下一个Token预测目标 ### 解码样本以验证正确性 python import tiktoken tok = tiktoken.get_encoding("gpt2") sample_ids = list(train[1_000_000:1_000_500]) # 选取中间位置的500个Token print(tok.decode(sample_ids)) ## 中间训练使用方法 在完成通用预训练后,从预训练检查点(checkpoint, ckpt)恢复训练,并设置以下参数: - **学习率(LR)**:为预训练峰值学习率的1/10。若预训练峰值学习率为1.5e-3,则中间训练阶段使用1.5e-4的学习率,并采用余弦退火至初始学习率的10%。 - **预热步数(WARMUP)**:设置为较短的步数(100~300步)——模型已完成预热。 - **总迭代步数(N_ITER)**:目标为在该数据集上完成1个训练轮次。当窗口长度为2048、批量大小为16时: N_ITER = 50亿 / (2048 * 16) ≈ 152587 步 - **优化器**:使用全新的优化器(丢弃预训练的动量参数)。模型架构需与预训练阶段完全一致。 - **采样模式**:无重复洗牌模式(每个训练窗口在每个轮次中仅被采样一次)。 参考启动脚本示例([`local50m`](https://github.com/)项目采用了该流程): bash MODE=pretrain DATA_DIR=/path/to/midtrain RESUME_FROM=/path/to/pretrain_final.pt RESUME_OPTIM=0 RESUME_STEP=0 LR=1.5e-4 MUON_LR=4.5e-3 MIN_LR_RATIO=0.1 WARMUP_STEPS=200 N_ITER=150000 CKPT_INTERVAL=10000 BLOCK_SIZE=2048 BATCH_SIZE=16 SAMPLE_MODE=shuffled HF_CHECKPOINT_REPO=user/your-midtrain-model python3 local50m_train.py 针对预训练充分的模型,预期训练行为如下: - 在前10000步中,验证集损失会显著下降(知识固化阶段)。 - 约12万步左右,损失趋于平稳至余弦退火的最小值。 - 总训练时长:在RTX 5090显卡上约6小时,成本约3美元。 ## 复现流程 bash HF_TOKEN=... python3 prepare_midtrain.py # 仅本地运行 HF_TOKEN=... UPLOAD_TO=user/repo PRIVATE=0 python3 prepare_midtrain.py SMOKE=1 python3 prepare_midtrain.py # 1000万Token冒烟测试 N_PROC=16 python3 prepare_midtrain.py # 并行分词 ### 构建细节 - **构建时间**:2026年5月13日UTC,基于单台M1 Max设备(8个工作线程,处理50亿Token约需3小时) - **构建脚本**:[`prepare_midtrain.py`](./prepare_midtrain.py) - **上游数据集提交版本**:构建时的最新提交 - `HuggingFaceFW/fineweb-edu`(sample-10BT子集) - `wikimedia/wikipedia`(20231101.en子集) - `open-web-math/open-web-math` ### 已执行的合理性校验 - 所有Token ID均处于`[0, 50256]`区间(GPT-2 BPE分词器的有效范围)。 - 随机选取500Token窗口进行解码-编码往返测试,输出结果符合自然英文、数学文本或代码格式。 - 各数据源的Token占比与目标比例的误差不超过±2%。 ## 流水线上下文 本数据集可作为**中间训练语料**嵌入完整的现代大语言模型流水线: juliannunezb/mixed-pretrain-10b-gpt2 ← 通用预训练语料(98亿Token) ↓ 预训练 juliannunezb/midtrain-mix-5b-gpt2 ←━━ 本数据集(50亿Token,优质语料) ↓ 中间训练 juliannunezb/smoltalk-gpt2-sft ← 监督微调语料(100万对话数据) ↓ 监督微调 juliannunezb/ultrafeedback-gpt2-dpo ← 偏好配对数据(6万条) ↓ 直接偏好优化(Direct Preference Optimization, DPO) [可选:在可验证任务上使用GRPO训练] ## 许可证 本数据集(分词后的Token流)采用**Apache-2.0许可证**,因其三个上游数据集均符合Apache-2.0或CC-BY-SA许可协议: - FineWeb-Edu:Open Data Commons By Attribution 1.0 - 英文维基百科:CC-BY-SA-3.0 + GFDL - Open-Web-Math:Open Data Commons By Attribution 1.0 完整来源信息请参阅各上游数据集的卡片页面。 ## 引用方式 若使用本数据集,请引用以下上游数据源: bibtex @misc{lozhkov2024fineweb-edu, author = {Lozhkov, Anton and Ben Allal, Loubna and von Werra, Leandro and Wolf, Thomas}, title = {FineWeb-Edu: the Finest Collection of Educational Content the Web Has to Offer}, year = {2024}, url = {https://huggingface.co/datasets/HuggingFaceFW/fineweb-edu} } @misc{paster2023openwebmath, title = {OpenWebMath: An Open Dataset of High-Quality Mathematical Web Text}, author = {Paster, Keiran and Dos Santos, Marco and Azerbayev, Zhangir and Ba, Jimmy}, year = {2023}, eprint = {2310.06786}, archivePrefix = {arXiv} } 若引用本数据集的打包版本,请引用: bibtex @misc{midtrain_mix_5b_gpt2_2026, title = {Midtrain-Mix-5B-GPT2: a premium mid-training mix for small GPT-2-vocab models}, author = {Julián Núñez}, year = {2026}, publisher = {Hugging Face}, url = {https://huggingface.co/datasets/juliannunezb/midtrain-mix-5b-gpt2} } ## 已知局限性 - **仅支持英语**:三个上游数据源均以英语为核心。 - **仅适配GPT-2 BPE分词器**:若目标模型使用Llama或NeoX的BPE分词器,需基于原始数据源重新进行分词。 - **50亿Token对于小型模型而言数据量充足,但对于大型模型则不足**:最适合5000万至5亿参数的模型;对于10亿参数以上的模型,需约500亿同质量的语料。 - **网页筛选存在缺陷**:FineWeb-Edu的分类器偏向于正式/学术性文本,对工程、教程、爱好者类内容的采样不足。若需更广泛的覆盖范围,可按较低权重混入未筛选的FineWeb语料。 - **本混合语料不含领域特定代码**:若需支持代码的模型,请使用单独的代码混合语料(如StarCoderData、The Stack)。
提供机构:
juliannunezb
二维码
社区交流群
二维码
科研交流群
商业服务