Logo Vincent
返回文章列表

如何训练一个大模型?从预训练到微调的完整路径

大模型
如何训练一个大模型?从预训练到微调的完整路径
目录

训练一个大模型,到底在训练什么

很多人对”训练大模型”的想象是这样的:把海量资料丢进去,机器自己就变聪明了。

真实情况要具体得多。大语言模型(LLM)本质上是一个**“预测下一个 token”的函数**——给定一段文字,它输出下一个字出现的概率分布。所谓训练,就是用数据不断调整这个函数里的参数,让它预测得越来越准。

一旦预测能力足够强,模型就”顺带”学会了语法、事实、推理,甚至某种程度的”世界知识”。这也解释了一个反直觉的事实:模型并没有被显式教过”什么是法律”,它只是读得足够多。

所以训练大模型需要三样东西:数据、算力、算法。不同训练方式的区别,本质上就是在这三样东西上做不同的取舍。

下面按”从重到轻”的顺序,把主流方式逐一讲清楚。

大模型训练的三个阶段

严格来说,现代大模型的诞生要经过三个阶段,它们不是二选一,而是一条流水线:

阶段英文数据形态目标成本
预训练Pretraining海量无标注文本学会语言与世界知识极高
监督微调SFT指令-回答对学会”听指令”中
对齐Alignment人类/AI 偏好数据有用、诚实、无害中
  • 预训练:让模型通过”预测下一个词”读遍互联网级语料,打下通用能力底座。这一阶段烧掉了整个训练预算的绝大部分。
  • 监督微调(SFT):预训练出来的叫”基座模型”,它只会续写,不会好好回答问题。用几万到几百万条”指令 → 理想回答”的数据教它,它才变成能对话的助手。
  • 对齐:让模型的输出更符合人类偏好——更 helpful、更安全。RLHF、DPO 都属于这一层。

理解了这条流水线,后面的”方式”就好归类了。

方式一:从零预训练(From Scratch)

从随机初始化的参数开始,完整训练一个模型。

这是最彻底也最昂贵的方式:

  • 数据:通常需要 1 万亿(1T)token 以上,来源是网页、书籍、代码、论文的混合语料
  • 算力:动辄数千张 GPU 连续跑数月
  • 成本:主流开源模型的预训练成本普遍在数百万到数千万美元量级

代表案例:LLaMA、Qwen、DeepSeek、Mistral 等开源模型的基座,都是这样来的。

对个人和小团队,从零预训练基本不可行。 但如果你想理解原理,有几个出色的”小规模复现”项目值得动手:

  • nanoGPT / nanochat(Andrej Karpathy):几百行代码讲透 GPT 训练
  • TinyStories:用极简英文故事训练出能讲连贯故事的微型模型

方式二:继续预训练(Continued Pretraining)

不换模型,只是拿一个现成的基座,用你的领域语料再”预训练”一段时间。

比如你有大量医疗病历、法律文书或私有代码,希望模型”补上”这部分知识,就可以用这些语料继续预训练。

  • 保留原有能力,同时吸收领域知识
  • 比从零预训练便宜,但依然会更新全部参数,算力门槛不低
  • 适合有海量领域语料的团队,而不是只有几百条问答的个人

一个关键判断:“注入新知识”用继续预训练或 RAG,“改变行为/格式”用微调。

方式三:全量微调(Full Fine-tuning)

用指令数据把模型的全部参数都更新一遍。

  • 效果上限高,模型能深度适配你的任务分布
  • 代价是显存和算力:7B 模型的全量微调,通常需要数十 GB 显存和一堆工程优化
  • 数据质量远比数量重要,几千条精心构造的指令,常常胜过几十万条噪声数据

如果你的数据量很大、任务和通用能力差异明显、又有充足算力,全量微调是值得的。

方式四:参数高效微调(PEFT)

这是个人和小团队训练”自己的小模型”最现实的入口。核心思路:冻结原模型的大部分参数,只训练一小部分新增参数。

LoRA

在原有的权重矩阵旁注入一对低秩矩阵,只训练这两个小矩阵。可训练参数往往只有原模型的 0.1%~1%,显存和时间大幅下降,效果却接近全量微调。

QLoRA

在 LoRA 基础上,先把基座模型量化到 4-bit,再挂 LoRA。这样单张 24GB 显卡就能微调 7B~13B 的模型,几乎是个人玩家的标配方案。

其他 PEFT 方法

方法思路特点
LoRA注入低秩矩阵最主流,效果/成本平衡好
QLoRA4-bit 量化 + LoRA显存最省,单卡可玩
Adapter插入小网络层结构清晰,略增推理延迟
Prefix / Prompt Tuning训练虚拟 token参数极少,能力上限有限

一个 LoRA 微调的核心代码大致长这样(基于 Hugging Face PEFT):

from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=8,                    # 低秩维度
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    task_type="CAUSAL_LM",
)

model = get_peft_model(base_model, config)
model.print_trainable_parameters()
# trainable params: 4,194,304 || all params: 6,742,609,920 || 0.06%

不到 0.1% 的参数被训练,却能显著改变模型行为——这就是 PEFT 的魅力。

方式五:对齐训练

微调让模型”会回答”,对齐让模型”答得让人满意”。主流方法:

  • RLHF(基于人类反馈的强化学习):先训练一个奖励模型来打分,再用 PPO 优化主模型。效果强,但流程复杂、训练不稳定,需要同时维护多个模型。
  • DPO(直接偏好优化):直接拿”好回答 vs 坏回答”的偏好对来训练,跳过奖励模型和 PPO,实现简单、稳定,是当前最常用的对齐方法。
  • GRPO(组相对策略优化):让模型对同一个问题生成一组回答,组内相互比较来算优势,省掉了价值网络。DeepSeek 的推理模型就是用它做强化学习的。
  • RLAIF:用 AI 生成的反馈代替人类标注,降低偏好数据的获取成本。

一般建议:先做好 SFT,再考虑对齐。 基座没调好,直接上 RLHF 往往是浪费算力。

方式六:知识蒸馏(Distillation)

让大模型当老师,小模型当学生。

学生模型不仅学习标准答案(硬标签),还学习老师输出的完整概率分布(软标签),甚至学习老师的推理过程(思维链蒸馏)。

  • 目标:用 7B 的成本,逼近 70B 在特定任务上的表现
  • 常用于把大模型能力”压缩”到可本地部署的小模型
  • 需要能访问老师的输出分布,或至少能批量拿到高质量推理数据

两个常被误当成”训练”的方法

  • RAG(检索增强生成):把知识放进向量库,回答时检索出来喂给模型。完全不改参数。 想快速让模型掌握频繁变化的私有知识,RAG 通常比微调更划算、更易维护。
  • Prompt Engineering:靠提示词引导模型。零训练成本,但能力受限于基座本身。

一句话区分:RAG 补知识,微调改行为,提示词调表达。

训练一个模型,还绕不开这些工程问题

  • 数据:清洗、去重、质量过滤、领域配比、tokenizer 选择——数据决定上限
  • 并行策略:数据并行(DP)、张量并行(TP)、流水线并行(PP)、ZeRO / FSDP 显存优化
  • 训练框架:PyTorch、Hugging Face Transformers / TRL / PEFT、DeepSpeed、Megatron-LM
  • 低门槛工具:Unsloth(提速省显存)、Axolotl、LLaMA-Factory(配置即用)
  • 评估与推理:基准测试、以及 vLLM / Ollama 等部署方案

如果你只想训一个”自己的小模型”

给个人和小团队的推荐路线:

  1. 别碰从零预训练,那是大厂游戏
  2. 选一个开源小模型作基座:Qwen2.5-0.5B/1.5B/7B、Llama 3.2 1B/3B 都是好起点
  3. 先用 QLoRA 做 SFT,单卡就能跑起来
  4. 数据从几百到几千条高质量指令起步,先跑通再扩充
  5. 需要偏好对齐时,再上 DPO
  6. 始终保留一套固定的评估集,每次改动都对比

四个常见误区

  • 数据越多越好:低质数据会拖垮模型,质量优先于数量
  • 微调能注入新知识:微调更擅长改变行为和输出格式;灌知识优先考虑继续预训练或 RAG
  • 全量微调一定强于 LoRA:在数据量不大时,LoRA 往往效果相当而成本低一个量级
  • 训练完就结束了:评估、部署、迭代才是长期工作的大头

小结

训练大模型不是一招,而是一条光谱:

  • 想要通用能力底座 → 从零预训练(大厂专属)
  • 想补领域知识 → 继续预训练
  • 想改变模型行为 → SFT 微调(全量或 LoRA/QLoRA)
  • 想让输出更符合偏好 → DPO / GRPO 等对齐
  • 想把大模型能力压小 → 蒸馏
  • 想不改参数就用私有知识 → RAG

对绝大多数人来说,真正可行的起点是”开源小模型 + QLoRA 微调”。先跑通这条链路,你会发现训练一个模型,比想象中近得多。

© 2026 vincentqiao.com . 保留所有权利。