大模型是怎么训练出来的?
开篇:训练大模型不是简单“喂数据” 很多人第一次理解大模型训练时,会把它想成“把数据塞进去,模型就会回答问题”。这个说法太粗了。真正的大模型训练更像培养一个新人:先让他读大量资料形成基础能力,再给他看标准问答学会工作方式,最后通过偏好反馈让
开篇:训练大模型不是简单“喂数据”
很多人第一次理解大模型训练时,会把它想成“把数据塞进去,模型就会回答问题”。这个说法太粗了。真正的大模型训练更像培养一个新人:先让他读大量资料形成基础能力,再给他看标准问答学会工作方式,最后通过偏好反馈让他说话更稳、更安全。
一、预训练:先让模型“读万卷书”
预训练是整个大模型能力的地基。它面对的不是人工写好的问答,而是海量普通文本、代码、网页、书籍、论文等。训练目标通常很朴素:根据前面的 token,预测下一个 token。
看起来只是续写,但当语料足够大、模型足够深、训练足够久时,模型会在这个过程中学到语言结构、常识、事实关联、代码模式和一部分推理规律。
以自回归语言模型为例,训练时会把一句话右移一位形成标签。模型看到“我 想 喝 一杯”,目标是预测“咖啡”。每一个位置都在做类似的预测,最后通过交叉熵损失让模型不断修正参数。
import torch
import torch.nn.functional as F
# input_ids: [batch, seq_len]
outputs = model(input_ids)
logits = outputs.logits
# 第 t 个位置预测第 t+1 个 token
shift_logits = logits[:, :-1, :].contiguous()
shift_labels = input_ids[:, 1:].contiguous()
loss = F.cross_entropy(
shift_logits.view(-1, shift_logits.size(-1)),
shift_labels.view(-1)
)
loss.backward()二、训练数据:不是越多越好,而是越干净越值钱
预训练数据往往来自多个渠道,但不能简单堆进去。低质量网页、重复内容、乱码、广告、采集脏数据、隐私内容都会影响模型表现。数据清洗越粗,模型越容易学到错误模式。
一个成熟的数据管道通常会做采集、去重、质量过滤、敏感信息处理、语言识别、分词、配比混合。不同数据占比会影响模型能力,例如代码数据比例会影响代码能力,数学和论文数据会影响推理与技术理解。
网页数据覆盖广,但噪声也高,需要去重和低质过滤。
书籍和论文更结构化,适合提升长文理解和专业表达。
代码数据能显著影响编程能力,但也需要处理许可证和重复仓库。
多语言数据配比会影响不同语言下的回答质量。
三、SFT:让模型从“会续写”变成“会回答”
预训练后的 Base Model 已经有知识和语言能力,但它不一定知道怎么像助手一样回答。你问它一个问题,它可能继续补全文章,也可能输出不符合格式的内容。
SFT,也就是监督微调,会给模型看大量“用户问题 + 标准回答”的样本。它的重点不是重新教模型所有知识,而是教模型如何理解指令、如何组织回答、如何按格式输出。
{
"messages": [
{
"role": "system",
"content": "你是一个通俗的技术助手。"
},
{
"role": "user",
"content": "用三句话解释什么是梯度下降。"
},
{
"role": "assistant",
"content": "梯度下降会沿着误差变小的方向调整参数。每次只调整一点点,直到损失下降。"
}
]
}SFT 数据质量非常关键。好的样本要覆盖真实用户问题,并且回答稳定、准确、风格统一;差的样本会把模型带偏,让它学会啰嗦、跑题、格式混乱,甚至学会错误知识。
四、对齐:让模型回答得更符合人类偏好
SFT 之后,模型已经像一个助手,但它还未必知道“哪个回答更好”。比如两个回答都能答题,一个更简洁、一个更啰嗦;一个会承认不确定,另一个会硬编。对齐阶段就是让模型更偏向人类认可的回答方式。
常见做法包括 RLHF 和 DPO。RLHF 通常会收集多个回答的人工偏好排序,训练奖励模型,再用强化学习优化模型;DPO 则直接用 chosen / rejected 这种偏好样本进行训练,流程更轻。
{
"prompt": "用户:我发烧 39 度,能不能只吃感冒药?",
"chosen": "建议尽快就医或咨询医生,39 度属于高热,不要只依赖普通感冒药。",
"rejected": "没事,多喝热水,吃点感冒药就行。"
}对齐不是让模型凭空更懂知识,而是让它在多个可能回答中更倾向于安全、诚实、有帮助的表达。它也不是越强越好,如果对齐过度,模型可能会变得过于保守,简单问题也拒答。
五、分布式训练:为什么大模型不是一张显卡能搞定
当模型参数达到几十亿、几百亿甚至更大时,训练难点会从“算法怎么写”变成“显存怎么放、通信怎么做、吞吐怎么稳”。训练中不只保存参数,还要保存梯度、优化器状态和中间激活值,这些都会占用大量显存。
工程上常用数据并行、张量并行、流水线并行、ZeRO 分片优化等方法组合使用。简单说,能复制的复制,太大的拆开,层数太多就切成流水线,优化器状态也尽量别每张卡都存一份。
training:
precision: bf16
micro_batch_size: 2
gradient_accumulation_steps: 16
parallelism:
data_parallel_size: 8
tensor_parallel_size: 2
pipeline_parallel_size: 4
optimizer:
type: adamw
lr: 3.0e-4
zero_stage: 2这些配置不是越大越好。并行度越高,通信成本也越高;batch 太小吞吐低,batch 太大又可能影响收敛。真正的训练调优往往是在显存、速度、稳定性、成本之间不断取平衡。
六、评估:训完不等于能上线
模型训练结束后,不能只看 loss 下降。loss 低只能说明模型更会拟合训练目标,不代表回答更有用、更安全、更适合业务。上线前通常需要离线评测、人工评测、安全评测和线上灰度反馈。
通用能力:阅读理解、数学、代码、事实问答、多轮对话。
业务能力:是否遵循业务规则,是否能按固定格式输出。
安全能力:是否泄露隐私,是否编造,是否越权回答。
工程指标:延迟、吞吐、成本、稳定性和回滚能力。
七、四个环节放在一起看
把预训练、SFT、对齐、评估放在一张表里,会更容易理解它们的边界。预训练决定能力底座,SFT 决定交互方式,对齐决定回答分寸,评估决定能不能上线。
八、常见误区:这些坑最容易混淆
误区一:预训练等于问答训练。实际上预训练通常是 next-token prediction,SFT 才是指令回答样本。
误区二:SFT 可以解决所有知识问题。SFT 更适合教格式和行为,知识更新更常见的方式是继续预训练、RAG 或工具调用。
误区三:RLHF 只是安全审查。它本质是偏好优化,既包括有帮助,也包括诚实、安全、符合场景。
误区四:参数越大就越好。数据质量、训练配方、推理成本和业务适配同样重要。
误区五:跑分高就能上线。真实业务还要看稳定性、合规、成本和用户反馈。
结尾:一句话讲清楚大模型训练
大模型训练不是一次完成的“喂数据”,而是一条连续流水线:预训练打基础,SFT 教会交互,对齐校正行为,评估和反馈不断修补短板。
如果面试要讲清楚这件事,可以用这句话收尾:预训练决定模型“会什么”,SFT 决定模型“怎么答”,对齐决定模型“该不该这样答”,评估决定模型“能不能上线”。
要点速读
开篇:训练大模型不是简单“喂数据” 很多人第一次理解大模型训练时,会把它想成“把数据塞进去,模型就会回答问题”。这个说法
- 开篇:训练大模型不是简单“喂数据” 很多人第一次理解大模型训练时,会把它想成“把数据塞进去,模型就会回答问题”
- 这个说法
- 更多细节仍在持续更新中