第6篇 · S2·上:预训练流程与数据工程(数据混合/质量/去重/稳定性)

一个基座模型是怎么"练"出来的?这一篇过一遍预训练五步全流程、数据混合配比、去重与质量打分、loss spike 与训练稳定性,最后算一笔"为什么单卡训不了"的显存账,为下一篇的分布式解法立靶。 S1(第 3-5 篇)讲了"模型是什么",从本篇起进入"怎么把它训练出来"。预训练是"几十上百卡跑几周"的重型工程,正是你大数据分布式经验的主场。 学完你能看懂预训练技术报告里的数据配比与稳定性章节,会算 16P 显存账,理解"数据质量 > 数据量"的工程共识。每节按 原理 -> 关键结论 -> 后端/大数据映射 走。Chinchilla 之后的共识是:数据清洗与混合策略是各家核心壁垒。


1. 预训练全流程

预训练 = 在海量文本上反复"预测下一个 token"训练模型参数。流程:

  1. 数据准备:爬取/清洗海量文本(网页/书籍/代码),去重、过滤低质、脱敏。数据质量决定模型上限,垃圾进垃圾出。规模通常 T(万亿)token 级。

  2. Tokenizer 训练:在语料上训 BPE 词表(token 详见本专栏第 4 篇)。

  3. 模型初始化:按架构(Decoder-only Transformer)随机初始化参数 P。

  4. 训练循环:每个 step 取一批 token -> 前向算 loss(预测下一个 token 的交叉熵)-> 反向算梯度 -> 优化器更新参数。重复几万到几十万 step。

  5. 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 并行》

相关推荐
嘿嘿-66几秒前
Windows 一键使用 GPT-6 Astra:Codex CLI 配置教程
java·人工智能·windows·gpt·chatgpt·web
我爱cope8 分钟前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
冬奇Lab10 分钟前
Code Agent 解剖(22):从零扩展——用 Markdown 写一个 Skill
人工智能
小饕12 分钟前
llama.cpp 参数调优指南:Jetson 8GB 实战手记
人工智能·llama·大模型端侧部署
火山引擎开发者社区12 分钟前
Viking AI 搜索 × SearchCLI:搭建售后助手,让搜索能力参与售后回答
人工智能
冬奇Lab12 分钟前
一天一个开源项目(第210篇):herdr - AI 编程 Agent 的运行时底座
人工智能·开源·资讯
dadanhuang19 分钟前
PyTorch深度学习与实践【04】【迭代周期、autograd、构建计算图、*params参数解包、.grad属性】
人工智能·pytorch·深度学习
JavaPub-rodert23 分钟前
LangChain 从入门到 Agent 实战:用 Python 搭建一个真正能调用工具和知识库的 AI 助手
人工智能·python·langchain
米小虾29 分钟前
告别逐 token 蹦字:扩散语言模型(dLLM)到底能不能终结自回归?
人工智能·llm
火山引擎开发者社区29 分钟前
从多模态数据湖到 Agent 湖:Lance 的格式设计与实践|Lance Meetup 火热报名中
人工智能