继续预训练与训练:多卡、并行、成本估算,以及为什么多数人不该自己训
硬件前提
多卡起步。这一篇的主要产出不是「会训」,而是会算成本、会劝退不该做的决定。
三个层次,别混为一谈
| 层次 | 做什么 | 数据量级 | 算力量级 |
|---|---|---|---|
| LoRA 微调 | 改行为 | 千~万条样本 | 单卡数小时(见上一篇) |
| 继续预训练(CPT) | 在领域语料上继续做 next-token | 数亿~数十亿 token | 8×A100/H100 数天 |
| 从头预训练 | 造一个基座模型 | 万亿 token 级 | 数千卡 × 数周 |
绝大多数「我们要自己训一个模型」的需求,实际需要的是第一行;退一步是第二行;第三行几乎永远不该由个人或小团队做。
成本怎么估(数量级,不是报价)
训练计算量粗略为:FLOPs ≈ 6 × 参数量 × 训练 token 数。
代入感受:
- 7B 模型训 100 亿 token ≈ 4×10²⁰ FLOPs。按一张现代加速卡的有效算力(远小于标称,通常只有标称的三到五成)折算,是数百到上千 GPU 小时量级。
- 同样 7B 训到万亿 token,就是数十万 GPU 小时——这是「买一机柜卡跑几个月」的规模。
还要加:数据成本(清洗与去重往往比算力贵)、失败重跑(第一次配方不会一次成功)、评测与消融(占真实消耗的 30% 以上)。
并行:四种切法分别解决什么
| 方式 | 解决什么 | 代价 |
|---|---|---|
| 数据并行(+ ZeRO 分片优化器状态) | 吞吐不够 | 卡间通信;显存仍要装下模型 |
| 张量并行 | 单层太大、单卡装不下 | 通信极重,通常限制在单机内 |
| 流水并行 | 模型层数多、跨机扩展 | 流水线空泡,需要 micro-batch |
| 序列并行 / 上下文并行 | 序列太长 | 实现复杂,收益依场景 |
实操结论:7B~14B 用「数据并行 + ZeRO」就够;70B 才需要张量 + 流水组合。 别一上来就设计复杂并行。
什么时候继续预训练才划算
同时满足三条才考虑:
- 你有别人拿不到的语料(几亿 token 以上、质量可控);
- 你的任务确实需要底座层面的能力(领域生成、领域代码),而不是知识检索或格式稳定;
- 你接受至少两轮配方迭代的预算(数据配比、学习率、混入通用数据的比例都要试)。
只满足第 1 条的,通常 RAG 或 LoRA 就能解决,成本低两个数量级。
真要做时的最小可行流程
- 语料:采集 → 去重(近似去重是重点)→ 质量过滤 → 配比(领域 : 通用 ≈ 3 : 7 起步,防遗忘)
- 评测先行:先写好领域评测集与通用探针集,训练前跑一遍底座基线
- 小规模验证:用 1/100 数据 + 小模型跑通全流程,确认评测管线可信
- 正式训练:checkpoint 频繁保存,中途就评测,别等训完
- 消融记录:每次只改一个变量,否则无法归因
常见坑
| 坑 | 后果 |
|---|---|
| 语料量大但脏(重复、机器生成、低质网页) | 训完通用能力下降,领域也没提升 |
| 不混通用数据 | 灾难性遗忘,模型变「偏科」 |
| 没有训练前基线 | 无法判断到底有没有提升 |
| 只看 loss 不做下游评测 | loss 降、任务变差是常态 |
| 第一次就全量开跑 | 一次失败烧掉几周预算 |
| 忽略许可证与来源合规 | 模型无法商用或需下架 |
完成标志
能给出一个带数字的判断:「这个需求用 LoRA/RAG 的成本是 X,继续预训练是 Y(约 Z 卡天),所以选 X。」
能写出这句话,这一篇的目的就达到了——不是让你去训,而是让你在该停的地方停。