一个基座模型是怎么"练"出来的?这一篇过一遍预训练五步全流程、数据混合配比、去重与质量打分、loss spike 与训练稳定性,最后算一笔"为什么单卡训不了"的显存账,为下一篇的分布式解法立靶。 S1(第 3-5 篇)讲了"模型是什么",从本篇起进入"怎么把它训练出来"。预训练是"几十上百卡跑几周"的重型工程,正是你大数据分布式经验的主场。 学完你能看懂预训练技术报告里的数据配比与稳定性章节,会算 16P 显存账,理解"数据质量 > 数据量"的工程共识。每节按 原理 -> 关键结论 -> 后端/大数据映射 走。Chinchilla 之后的共识是:数据清洗与混合策略是各家核心壁垒。
1. 预训练全流程
预训练 = 在海量文本上反复"预测下一个 token"训练模型参数。流程:
-
数据准备:爬取/清洗海量文本(网页/书籍/代码),去重、过滤低质、脱敏。数据质量决定模型上限,垃圾进垃圾出。规模通常 T(万亿)token 级。
-
Tokenizer 训练:在语料上训 BPE 词表(token 详见本专栏第 4 篇)。
-
模型初始化:按架构(Decoder-only Transformer)随机初始化参数 P。
-
训练循环:每个 step 取一批 token -> 前向算 loss(预测下一个 token 的交叉熵)-> 反向算梯度 -> 优化器更新参数。重复几万到几十万 step。
-
checkpoint:定期存权重,断点续训。
核心矛盾:模型大(参数多)-> 显存装不下 + 算得慢 -> 必须多卡分布式。怎么把一个模型拆到多卡上训,是第 7 篇的主角;本篇先把"为什么必须拆"的账算清。
后端/大数据映射
-
预训练 = 离线全量批训练:重、慢、贵、可断点续跑,和 T+1 数仓全量重算、Spark 大批作业同性质。
-
训练 step 循环 = 批处理循环:取批次 -> 算 -> 累加结果,和 Spark 的 map->reduce 循环同构。
-
checkpoint = 断点续跑/容错:你做批处理时的 task 重试、状态持久化,完全一样。
训练数据与稳定性前沿
上面讲了预训练流程。数据是大模型能力的另一半(Chinchilla 后共识:数据质量 > 数据量),训练稳定性也决定大模型能不能训成:
-
数据混合(Data Mixture):预训练数据由多源混合(网页/书籍/代码/学术),各源比例决定模型能力分布。代码多则推理强但文风偏代码;学术多则专业但通用性降。配比是核心权衡,各家不公开但极关键。
-
课程学习(Curriculum Learning) :按由易到难/由通用到专业的顺序安排数据。争议:多数研究认为纯顺序影响有限,但末尾阶段加高质量指令/对齐数据有效(对齐见本专栏第 8-9 篇)。
-
数据质量:
-
去重(MinHash/近邻去重):训练数据大量重复会让模型"背"而非"学",浪费算力还降泛化。去重是性价比最高的预处理。
-
质量打分:用分类器/启发式给数据打分,保留高质量、过滤低质/有害。
-
共识:高质量 5T > 低质量 50T。与其堆量,先把数据洗干净。
-
-
训练稳定性(loss spike) :大模型训练偶发损失突刺 (loss 突然飙升),严重时发散前功尽弃。对策:bf16(比 fp16 数值范围大,更稳)、梯度裁剪、学习率调度、checkpoint 恢复(发现 spike 回滚到上一个好 checkpoint 重训,调超参)。
趋势:预训练从"堆数据堆参数"转向"数据质量 + 配比 + 稳定性"的精细工程。Chinchilla 之后,数据清洗/混合策略成为各家核心壁垒。
映射
-
数据混合 = 特征工程的特征配比/采样权重:做样本时控制各来源占比影响模型偏向。
-
数据质量(去重/打分) = 数据清洗/质检:做数仓时的去重、脏数据过滤、质量校验。MinHash 去重 = 数据去重。
-
课程学习 = 训练数据分批/分阶段:先易后难,像你分阶段喂数据。
-
loss spike + checkpoint 恢复 = 作业失败 + 检查点恢复:跑大批作业时某步失败,回滚到 checkpoint 重跑,完全同构。
2. 为什么单卡训不了大模型--显存账
要懂分布式,先懂"单卡显存被谁吃了"。训练时显存分三大块:
2.1 模型状态(权重+梯度+优化器状态)
以混合精度 + Adam训练参数量 P 的模型为例(这是最常见的配置):
-
参数(FP16):2P 字节
-
梯度(FP16):2P 字节
-
优化器状态(Adam,FP32):12P 字节
- FP32 主权重副本 4P + 动量(momentum) 4P + 方差(variance) 4P = 12P
-
合计模型状态 = 16P 字节
算一下 :7B 模型 -> 16 × 7 = 112 GB。单卡 A100 80GB 根本放不下,连模型状态都不够,还没算激活。70B 模型 -> 16 × 70 = 1120 GB,要 14 张 A100 才装下模型状态。
结论:大模型训练的显存瓶颈首先是模型状态(16P),分布式训练的第一要务就是把这 16P 摊到多卡上,这正是第 7 篇数据并行/张量并行/流水并行/ZeRO 要解决的问题。
2.2 激活(前向中间结果)
反向传播要重算梯度,需保留前向各层激活。激活显存 ∝ 层数 × 隐藏维 × batch × 序列长度。用**激活重计算(activation checkpointing)**可省(只存部分,反向时重算,用算力换显存)。
2.3 临时缓冲/碎片
AllReduce 通信缓冲、显存碎片等,工程上也要留余量。
映射
显存账 = 内存/资源容量规划:你做大数据时算"数据量 × 副本 + shuffle 缓冲 + 中间结果"会不会撑爆内存,这里是"参数 × 精度系数 + 梯度 + 优化器 + 激活"会不会撑爆显存。同一套容量规划思维。
本篇小结
-
预训练五步:数据准备 -> Tokenizer 训练 -> 模型初始化 -> 训练循环(前向 loss/反向梯度/更新)-> checkpoint 断点续训。
-
数据是大模型能力的另一半:数据混合配比决定能力分布,去重(MinHash)是性价比最高的预处理,"高质量 5T > 低质量 50T"。
-
loss spike 是大模型训练的稳定性大敌,对策是 bf16 + 梯度裁剪 + 学习率调度 + checkpoint 回滚重训。
-
显存账:混合精度 + Adam 下模型状态 = 16P 字节;7B 模型仅模型状态就 112GB,单卡 A100 80GB 放不下。
-
显存三大块:模型状态(大头)、激活(可用激活重计算换)、临时缓冲/碎片。
-
把 16P 摊到多卡,是第 7 篇分布式训练(DP/TP/PP/ZeRO)的全部出发点。
上一篇 :第5篇《S1·下:前沿架构:MoE、Reasoning 模型、长上下文、多模态、SSM/Mamba 与模型谱系》 | 下一篇:第7篇《S2·下:分布式训练:数据/张量/流水并行、ZeRO 三阶段推导、混合精度与 3D 并行》