按规模选型(Model Selection by Parameter Size)
根据参数规模选择合适的 LLM,平衡性能、成本和硬件需求
大规模语言模型从零开始获取通用语言能力的核心训练技术体系
内容摘要
预训练(Pretraining)是大语言模型获得通用语言理解和生成能力的**第一阶段训练**。简单说,就是让模型在海量无标注文本上反复做"预测下一个词"的练习,从而自动学会语法规律、事实知识和基础推理能力。
预训练(Pretraining)是大语言模型获得通用语言理解和生成能力的第一阶段训练。简单说,就是让模型在海量无标注文本上反复做"预测下一个词"的练习,从而自动学会语法规律、事实知识和基础推理能力。
为什么需要预训练?因为传统机器学习要求每个任务都有大量人工标注数据,成本极高且难以覆盖所有场景。预训练的核心洞见是:互联网上有几乎无限的未标注文本,只要设计一个自监督任务(Self-supervised Task,即不需要人工标注、让数据自己产生监督信号的训练方式),就能从中提取通用语言知识。预训练完成后,只需少量标注数据做微调(Fine-tuning),模型就能适配翻译、问答、摘要等各种具体任务。
与传统的"每个任务单独训练"相比,预训练范式的关键差异在于:一次学习,多次复用。模型只需做一次大规模预训练,获得的语言能力就能迁移到几乎所有下游任务,大幅降低了每个新任务的开发成本。
预训练技术体系由四个不可或缺的环节组成:
| 环节 | 作用 | 关键指标 |
|---|---|---|
| 数据准备 | 采集、清洗、去重、配比,构建高质量训练语料 | 数据质量决定模型能力上限 |
| 分词编码 | 将原始文本转为模型可处理的 token 序列 | 词表大小影响编解码效率 |
| 训练目标 | 定义模型"练什么题",通常是 Next-Token Prediction | 直接决定模型学到什么能力 |
| 分布式训练 | 将计算任务分配到多张 GPU 上并行执行 | 决定能训多大的模型、训多快 |
数据准备是预训练的基石,包含四个子步骤:
分词器(Tokenizer)将原始文本切分为 token(词元,模型处理的最小单位)。主流方法是 BPE(Byte Pair Encoding,字节对编码),它通过统计字符对的出现频率,逐步合并高频对来构建词表。
当前主流 LLM 几乎全部使用 Next-Token Prediction(NTP,下一个词预测)作为预训练目标:给模型看一段文本的前 N 个词,让它预测第 N+1 个词。模型在数万亿 token 上反复做这个练习,逐渐掌握语言的深层规律。
近期研究(如 Meta 2024 年提出的 Multi-Token Prediction)尝试让模型一次预测后续 K 个 token,在提升训练效率和推理速度方面展现了潜力。
训练百亿到万亿参数的模型,单张 GPU 的显存和算力远远不够,必须用分布式训练:
预训练的核心机制可以用一句话概括:通过在海量文本上反复"预测下一个词",迫使模型学会语言的统计规律和内在知识。
具体过程如下:
[今, 天, 天, 气, 真]为什么"预测下一个词"这么有效? 要准确预测下一个词,模型必须理解语法(主谓宾搭配)、语义(词义关系)、事实知识("北京是中国的首都")和推理逻辑(因果关系)。这个看似简单的任务,实际上要求模型压缩整个训练语料中的知识。
Scaling Law(缩放定律) 是预训练的理论指导。OpenAI(2020)和 DeepMind 的 Chinchilla 论文(2022)发现:模型性能与参数量、数据量、算力之间存在可预测的幂律关系。Chinchilla 的关键结论是:模型参数量和训练数据量应按大致 1:20 的比例同步增长(即 10B 参数的模型需要约 200B token 的数据)。这一发现直接影响了后续所有大模型的训练策略。
读图要点:
以下用 PyTorch 展示 NTP 训练目标的最小实现,省略了分布式和混合精度等工程细节:
# 基于 torch==2.0+ 验证(截至 2026-03)
import torch
import torch.nn as nn
# 模拟一个极简的语言模型
vocab_size = 1000 # 词表大小
hidden_dim = 128 # 隐层维度
seq_len = 32 # 序列长度
# 最简单的模型:Embedding + 线性层
embedding = nn.Embedding(vocab_size, hidden_dim)
lm_head = nn.Linear(hidden_dim, vocab_size)
# 模拟一条训练数据(token 序列)
tokens = torch.randint(0, vocab_size, (1, seq_len)) # [1, 32]
# Next-Token Prediction 的核心逻辑
input_ids = tokens[:, :-1] # 前 31 个 token 作为输入
labels = tokens[:, 1:] # 后 31 个 token 作为预测目标
# 前向传播
hidden = embedding(input_ids) # [1, 31, 128]
logits = lm_head(hidden) # [1, 31, 1000] —— 对每个位置预测词表中每个词的概率
# 计算交叉熵损失
loss = nn.functional.cross_entropy(
logits.reshape(-1, vocab_size), # [31, 1000]
labels.reshape(-1) # [31]
)
print(f"损失值: {loss.item():.4f}") # 初始约 6.9(= ln(1000),相当于随机猜测)
# 反向传播 → 更新参数(训练循环中会重复这个过程数百万次)
loss.backward()
input_ids 是前 N-1 个 token,labels 是后 N-1 个 token——两者错开一位,就构成了 NTP 任务。初始损失约等于 ln(vocab_size),表示模型在随机猜测;随着训练推进,损失持续下降,模型的预测越来越准确。
| 概念 | 与预训练技术的区别 | 更适合关注的重点 |
|---|---|---|
| 微调(Fine-tuning) | 预训练是从零开始在海量通用数据上训练;微调是在已有预训练模型基础上,用少量任务特定数据继续训练 | 如何用少量数据适配特定任务 |
| 指令微调(Instruction Tuning) | 预训练让模型学会语言能力;指令微调让模型学会"听从人类指令" | 如何让模型按指令格式回答问题 |
| 持续预训练(Continual Pretraining) | 基础预训练是从随机初始化开始;持续预训练是在已有预训练模型上,用新领域数据继续做 NTP | 如何让已有模型掌握新领域知识 |
| RLHF | 预训练学语言能力,RLHF 用人类偏好反馈调整模型输出风格,使其更符合人类期望 | 如何让模型输出更安全、更有用 |
核心区别:
| 常见误区 | 正确理解 |
|---|---|
| "数据越多效果越好" | 数据质量比数量更重要。研究表明,经过精心清洗和去重的小数据集,训练效果可能优于数倍大小的未清洗数据。Chinchilla 论文证实了数据量与模型参数量需要匹配增长 |
| "预训练只是初始化,微调才是关键" | 预训练质量决定模型能力的上限。如果基座模型在预训练阶段没有学到某类知识,微调很难弥补这个缺失 |
| "混合精度训练会显著降低模型质量" | 现代 BF16(Brain Float 16,Google 设计的 16 位浮点格式)混合精度训练在几乎所有任务上都能匹配 FP32 的精度,同时将训练速度提升 2-3 倍。这已经是工业界的标准做法 |
| "用了 DeepSpeed / Megatron-LM 就能轻松训大模型" | 框架只是工具,真正的瓶颈是算力规模和工程经验。没有足够的 GPU 集群和训练运维能力,再好的框架也无法发挥作用 |
参考答案:
要准确预测下一个词,模型必须理解多层次的语言知识:语法层面(主谓搭配、时态一致)、语义层面(词义关系、上下文含义)、事实层面("地球绕着太阳转")和推理层面(因果关系、逻辑推演)。本质上,NTP 任务迫使模型对训练语料中的所有知识进行压缩编码,因此模型的能力与训练数据的广度和深度直接相关。
参考答案:
Chinchilla 论文的核心结论是:在固定算力预算下,模型参数量和训练数据量应按大致 1:20 的比例同步增长(如 10B 参数配 200B token),而不是一味增大模型。这意味着之前许多模型(如 GPT-3 的 175B 参数只训练了 300B token)实际上"训练不足"(undertrained)。这一发现直接导致了后续模型在相同参数量下使用更多数据训练的趋势,如 LLaMA 7B 使用了 1T token,远超 Chinchilla 的建议比例,走向了"过度训练以换取更小推理成本"的路线。
参考答案:
一种合理方案:TP=8(8 张 GPU 做张量并行,将每层权重切成 8 份),PP=4(4 组做流水线并行,将模型的层分成 4 段),DP≈3(剩余 GPU 做数据并行,提高吞吐量)。理由:70B 模型单层参数较大,TP=8 能确保每张 GPU 的显存放得下单层计算所需的激活和参数;PP=4 将模型总层数分为 4 段,进一步降低单卡显存需求;DP=3 增加训练吞吐量。实际中还需要配合 ZeRO 优化器来减少优化器状态的显存占用,并通过小规模实验验证显存和通信的可行性。
优先展示同分类且标签更接近的内容,方便继续串联学习。
根据参数规模选择合适的 LLM,平衡性能、成本和硬件需求
先在海量文本上学通用语言知识,再用少量数据适配具体任务的两阶段训练范式
OpenAI 从 GPT-1 到 GPT-5 的完整演进:参数扩展、对齐微调、多模态统一、推理增强四个阶段