从零训练大模型系列 · Day 1
为什么要从零训练?
2024年,大模型遍地开花。GPT-4、Claude、Gemini、Qwen、DeepSeek……随便拉一个出来都能聊天写代码。那我们为什么还要从零训练一个?
答案很简单:理解原理比调API重要100倍。
调API就像开车——你知道踩油门会走、踩刹车会停,但你不知道发动机怎么运转。从零训练就像自己造一辆车——哪怕造出来的是辆三轮车,你对"车"的理解也远超任何老司机。
我在做BuddyGPT的过程中,很多之前"知道但不理解"的概念突然就通了:
- 为什么Decoder-Only架构胜出?自己写一遍Attention就明白了
- KV Cache到底省了什么?自己跑一次推理就懂了
- RLHF为什么难?自己训一次DPO就知道数据有多重要了
所以,BuddyGPT不是为了和GPT-4竞争(那是痴人说梦),而是一个学习项目——通过亲手实现完整的训练流程,真正搞懂大模型的每一个环节。
BuddyGPT总览:从0.1B到0.7B
BuddyGPT经历了三个版本的进化:
版本 参数量 架构特点 状态
─────────────────────────────────────────────────
0.1B ~100M 基础Llama架构, MHA ✅ 完成
0.3B ~300M GQA + SwiGLU ✅ 完成
0.7B ~700M MLA/MOE (实验中) 🔧 进行中
为什么从小模型开始?因为调试成本。0.1B模型在单卡A100上几小时就能跑完一轮pretrain,快速验证代码是否正确。等流程跑通了,再逐步放大——这和软件工程里"先跑通再优化"的原则一模一样。
每个版本都发布到了HuggingFace Hub(learn2pro/buddygpt-*),任何人都可以下载体验。
训练全流程Pipeline
一个大模型从"什么都不会"到"能正常对话",需要经过四个阶段:
┌─────────────┐ ┌─────────┐ ┌──────────┐ ┌─────────┐
│ Pretrain │───>│ SFT │───>│ RLHF/DPO │───>│ Eval │
│ 预训练 │ │ 监督微调 │ │ 对齐优化 │ │ 评测 │
└─────────────┘ └─────────┘ └──────────┘ └─────────┘
35B Token 400万条 偏好数据 CMMLU/MMLU
学会"语言" 学会"对话" 学会"做人" 检验成果
Pretrain(预训练):喂给模型海量文本,让它学会语言的基本规律。就像小孩子大量听、大量读,先建立语感。BuddyGPT用了约35B Token的数据。
SFT(监督微调):用精心构造的"问-答"对训练,让模型学会按指令回答问题。相当于上学——从自由阅读变成有目标的学习。BuddyGPT用了约400万条SFT数据。
RLHF/DPO(对齐优化):通过人类偏好数据,让模型学会给出更好的回答。DPO(Direct Preference Optimization)是RLHF的简化版,不需要单独训练奖励模型,实现更简洁。
Eval(评测):用标准化的benchmark测试模型能力。BuddyGPT主要用CMMLU(中文)、MMLU(英文)和CEval来评测。
技术栈
核心框架: PyTorch + HuggingFace Transformers
分布式训练: Accelerate (DeepSpeed ZeRO Stage 2/3)
实验追踪: WandB (Weights & Biases)
Tokenizer: Qwen的Tokenizer (151669词表)
评测框架: lm-evaluation-harness
代码管理: Git + GitHub
模型发布: HuggingFace Hub
选择HuggingFace Transformers作为基础框架,是因为它的生态最成熟——模型定义、数据加载、训练循环、模型发布都有现成的工具链。站在巨人的肩膀上,我们可以把精力集中在模型架构和训练策略上。
模型架构选择
BuddyGPT以Llama2/3的架构为基础,这是目前开源社区最主流的Decoder-Only架构。在此基础上,逐步引入更先进的技术:
- GQA(Grouped Query Attention):减少KV Cache,加速推理
- MLA(Multi-head Latent Attention):DeepSeek-V3的核心创新,进一步压缩KV Cache
- MOE(Mixture of Experts):用更少的计算资源训练更大的模型
后续的文章会逐一深入讲解这些技术。
为什么选中文?
训练中文LLM有两个独特挑战:
1. 数据问题:高质量中文语料远少于英文。英文有Common Crawl、Wikipedia等海量数据源,中文的数据量和质量都要打折扣。BuddyGPT的预训练数据来自:
- 中文Wikipedia
- Firefly数据集
- Ultra-FineWeb(多语言高质量语料)
2. Tokenizer问题:中文的分词比英文复杂得多。英文基本以空格分词,中文没有天然分隔符。BuddyGPT直接采用了Qwen的Tokenizer(151669个token),省去了自己训练Tokenizer的麻烦,也保证了对中文的良好支持。
选择中文,一方面是因为自己的母语,另一方面也是想亲身体验中文LLM训练的痛点。
整体架构图
┌─────────────────────────────────────────────────────────────────┐
│ BuddyGPT 训练流程全景 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────┐ │
│ │ 数据准备 │ │
│ │ Wikipedia (中文) │ │
│ │ Firefly (对话数据) │──┐ │
│ │ Ultra-FineWeb │ │ │
│ └──────────────────────┘ │ │
│ v │
│ ┌──────────────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Tokenizer (Qwen) │─>│ Pretrain │─>│ SFT │ │
│ │ vocab=151669 │ │ 35B Tokens │ │ 400万条 │ │
│ └──────────────────────┘ └──────────────┘ └──────┬───────┘ │
│ │ │
│ v │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Eval │<─│ DPO │ │
│ │ CMMLU/MMLU │ │ 偏好对齐 │ │
│ │ CEval │ │ │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ 模型发布: HuggingFace Hub (learn2pro/buddygpt-*) │
└─────────────────────────────────────────────────────────────────┘
接下来
这个系列会深入每一个环节:
- Day 2: 模型架构深度拆解
- Day 3: RoPE位置编码与GQA
- Day 4: MLA——DeepSeek-V3的核心创新
- Day 5+: 预训练、SFT、DPO、评测……
每一篇都会有代码、有推导、有踩坑经验。目标是让你读完之后,也能自己动手训一个。
个人思考
做BuddyGPT最大的感受是:大模型没有想象中那么神秘。 架构就是标准的Transformer,训练就是标准的梯度下降,数据就是标准的文本。真正的难点在于规模——如何高效处理TB级数据、如何在多卡上稳定训练、如何在有限算力下做出效果。
但对于学习目的来说,0.3B的模型已经足够让你理解所有核心概念。就像学开车不需要从法拉利开始,一辆教练车就够了。