这份笔记按“大模型理论学习”的场景整理,重点覆盖基础原理、关键论文、训练流程,以及训练/推理系统与硬件资源,主要回答一个问题:“LLM 为什么能工作、是怎样训练和部署出来的”。

作者并不是大模型相关专业,这里的学习笔记仍然是非常浅显的,只是希望了解一些基本概念。

毫无疑问的是,在大模型领域,实践是远远走在理论前面的,但是基础理论的缺乏并不是致命的阻碍。一个历史上的例子是:“在蒸汽机已经大规模应用的年代,热力学的重要定理一条都还没搞出来,工程师完全凭借的是经验或错误的热质说。等到这些热力学定理终于写出来时,蒸汽机已经跑了几十年甚至上百年。”

一、先建立整体框架

可以先把现代大语言模型理解成一条主线:

1
2
3
4
5
Transformer 架构
→ 大规模预训练
→ Scaling Laws
→ 指令微调与对齐
→ 部署与推理优化

如果只看最核心的几件事,大语言模型之所以成功,主要是以下因素叠加:

  1. Transformer 提供了可扩展的序列建模方式。
  2. 预训练语言模型范式让模型可以先学通用能力,再适配具体任务。
  3. 海量文本和代码数据提供了足够丰富的训练信号。
  4. 自监督学习让数据规模可以大到互联网级别。
  5. 模型规模、数据规模和计算资源之间存在相对稳定的 scaling law。

从工程视角看,现代 LLM 也可以分成两段:

  • 预训练:让模型形成能力上限。
  • 后训练与部署:让模型更像一个可用产品。

从使用视角看,模型本身之外当然还会有各种工具和产品形态,但这些属于“怎么把模型用起来”的问题,不是这篇的重点。


二、基础原理与技术路线

2.1 为什么大语言模型能够成功

近年来,大语言模型(Large Language Models, LLM)在自然语言处理领域取得了显著进展。相比早期的机器学习方法,大语言模型能够在统一模型框架下完成多种语言任务,并在多个基准测试中取得较好的性能。

这种成功通常被认为是多个因素共同作用的结果,包括:

  • Transformer 架构
  • 预训练语言模型范式
  • 海量数据
  • 自监督学习
  • scaling law(尺度律)

2.2 Transformer 架构

现代大语言模型通常基于 Transformer 架构。Transformer 的核心机制是 自注意力(self-attention),其基本计算形式为

$$
\mathrm{Attention}(Q,K,V)
= \mathrm{softmax}!\left(
\frac{QK^\top}{\sqrt{d_k}}
\right)V .
$$

其中:

  • $Q$ 表示 query
  • $K$ 表示 key
  • $V$ 表示 value
  • $d_k$ 为 key 的维度

在语言模型中,输入序列首先被映射为浮点数向量表示:

$$
x_1, x_2, \ldots, x_n
$$

然后通过线性变换得到

$$
Q = XW_Q,\quad
K = XW_K,\quad
V = XW_V .
$$

自注意力机制允许序列中的每个 token 与其他 token 建立依赖关系,从而能够有效建模长距离语义关系。

Transformer 的一个重要特点是其计算主要由 矩阵乘法 构成,这种计算形式非常适合 GPU 等并行计算设备,因此可以在大规模计算集群上高效训练。相比早期的循环神经网络(RNN),Transformer 更容易扩展到极大的模型规模。

大语言模型本质上还是在学习一个高维的条件概率分布,可以看作对复杂非线性函数的近似。理论上实现这种函数逼近的模型结构有无数种,Transformer 并不一定是唯一或最优的选择,但是 Transformer 具有高度并行化的计算特性,主要由矩阵运算组成,因此能够很好地利用 GPU 等硬件的计算能力,支持大规模的训练。

2.3 预训练语言模型范式:BERT 与 GPT

Transformer 架构提出之后,自然语言处理逐渐形成了 预训练语言模型(pretrained language model) 的范式:

1
大规模语料预训练 → 获得通用语言表示 → 在具体任务上微调

其中两个具有代表性的模型是:

  • BERT(Bidirectional Encoder Representations from Transformers)
  • GPT(Generative Pretrained Transformer)

BERT 采用 Transformer 编码器结构,通过 masked language modeling 进行训练,即随机遮蔽部分 token 并预测其内容,从而学习上下文相关的语言表示。

GPT 则采用 自回归语言模型,其训练目标为预测下一个 token:

$$
p(x_1,\ldots,x_n) =
\prod_{t=1}^{n}
p(x_t \mid x_1,\ldots,x_{t-1}) .
$$

随着模型规模不断扩大,GPT 系列模型逐渐成为现代大语言模型的主要技术路线。

2.4 海量数据与自监督学习

大语言模型能够利用互联网规模的文本数据进行训练,例如:

  • 网页文本
  • 书籍
  • 代码仓库
  • 技术文档

这些数据可以统一表示为 token 序列,从而形成规模达到 $10^{11} \sim 10^{13}$ 级别的训练语料。

预训练过程中通常采用 自监督学习。以 GPT 的训练目标为例,标签可以直接从文本中生成,因此不需要人工标注。这使得模型能够在极大规模的数据上进行训练,从而学习丰富的语言模式和知识结构。

2.5 Scaling Law

在大语言模型研究中,一个重要发现是 scaling law。实验观察表明,当模型规模、数据规模和计算量增加时,模型性能会按照稳定规律提升。

例如,如果用语言模型的损失函数 $L$ 表示模型性能,则其与模型参数规模 $N$ 的关系可以近似表示为

$$
L(N) \approx L_\infty + a N^{-\alpha}.
$$

其中:

  • $N$ 表示模型参数数量
  • $L_\infty$ 为理论极限损失
  • $a$ 与 $\alpha$ 为经验常数

进一步研究表明,模型规模 $N$、数据规模 $D$ 和计算量 $C$ 之间需要保持合理比例。当三者同时增加时,模型性能可以持续提升:

1
更大的模型 + 更多训练数据 + 更多计算资源 → 更好的模型性能

大力真的可以出奇迹。

这一关系说明随着模型规模增加,模型损失会按照幂律(power law)逐渐下降。

2.6 统一的序列建模框架

语言任务具有一个重要特点:许多不同任务都可以表示为 序列生成问题。例如:

  • 翻译:输入源语言句子,生成目标语言句子
  • 问答:输入问题和上下文,生成答案
  • 摘要:输入文章,生成摘要

这些任务都可以表示为:

1
输入序列 → 输出序列

因此,大语言模型可以通过统一的序列建模框架处理多种语言任务,并在不同任务之间共享知识。

2.7 关键论文时间线

现代大语言模型(Large Language Models, LLM)的技术路线主要由几个关键思想逐步形成,包括 Transformer 架构、大规模预训练、Scaling Laws 以及对齐技术。下面按时间线列出若干代表性论文。

Attention Is All You Need, 2017

Attention Is All You Need Vaswani et al., 2017

该论文提出了 Transformer 架构,用自注意力(self-attention)机制取代传统的循环神经网络(RNN)和卷积网络(CNN)。Transformer 成为大语言模型的基础结构,包括 GPT、BERT、PaLM、LLaMA 等大模型均基于这一架构。

BERT, 2018

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Devlin et al., 2018

BERT 使用 Transformer 编码器进行双向语言建模。其训练目标为 Masked Language Model,即随机遮盖输入序列中的若干词,并预测被遮盖的 token,从而学习上下文表示。该方法在多种自然语言理解任务上取得了较好的效果。

BERT 这个缩写名称的完整含义为

$$
\text{BERT} = \text{Bidirectional Encoder Representations from Transformers}
$$

GPT, 2018

Improving Language Understanding by Generative Pre-Training Radford et al., 2018

GPT 模型采用自回归语言建模目标:

$$
P(x_1,\dots,x_n)=\prod_{i=1}^{n} P(x_i \mid x_{<i}) .
$$

该方法使用 decoder-only 的 Transformer 结构,在文本生成任务中表现良好,并成为后续 GPT 系列模型的基础。

GPT 这个缩写名称的完整含义为

$$
\text{GPT} = \text{Generative Pre-trained Transformer}
$$

Scaling Laws, 2020

Scaling Laws for Neural Language Models Kaplan et al., 2020

该论文通过大量实验发现,语言模型的性能与模型参数规模、训练数据规模以及计算量之间存在稳定的幂律关系。例如可以写为

$$
L(N,D) \approx L_{\infty} + aN^{-\alpha} + bD^{-\beta} + cC^{-\gamma} .
$$

其中 $N$ 表示模型参数规模,$D$ 表示训练数据规模,$C$ 表示计算量。
这一结果表明,随着模型规模的增加,模型性能可以持续提升,从而推动了大规模语言模型的发展。

GPT-3, 2020

Language Models are Few-Shot Learners Brown et al., 2020

该论文提出 GPT-3(约 175B 参数)。研究发现,当模型规模足够大时,模型可以通过 prompt 中提供的少量示例完成多种任务,即所谓的 few-shot learning,而不需要对每个任务单独微调。

2022 年底,GPT 3.5 的出现是 LLM 时代开启的标志性事件。

Chinchilla, 2022

Training Compute-Optimal Large Language Models Hoffmann et al., 2022

该论文重新研究了 Scaling Laws,指出许多已有模型在训练时数据量不足。研究表明,在固定计算预算下,最佳训练策略应满足

$$
\text{tokens} \propto \text{parameters}.
$$

也就是说,模型参数规模与训练 token 数量应当同步增长。
论文提出的 Chinchilla 模型(70B 参数但训练数据更多)在性能上超过了更大的 GPT-3。

InstructGPT, 2022

Training Language Models to Follow Instructions with Human Feedback Ouyang et al., 2022

该论文提出 InstructGPT,通过人类反馈强化学习(Reinforcement Learning from Human Feedback, RLHF)对语言模型进行对齐训练。典型流程包括

  • 预训练语言模型
  • 使用指令数据进行监督微调
  • 根据人类偏好训练奖励模型
  • 使用强化学习优化模型

这种方法使模型能够更好地理解和执行人类指令,并成为当前对话式语言模型的重要训练范式。

2.8 当前常见研究方向

  • 模型规模与训练效率:在 Scaling Laws 的指导下,研究者继续探索更大规模模型的训练,同时也更加关注计算效率。例如通过改进训练策略、优化数据使用方式或使用专家混合(Mixture-of-Experts)结构,在有限计算资源下获得更高性能。
  • 推理效率与部署成本:随着模型规模增大,推理成本成为重要问题。当前常见的技术包括模型蒸馏、量化、稀疏化以及高效注意力结构等,用于降低显存占用和计算开销,使模型能够在更小的硬件平台上运行。
  • 多模态模型:越来越多的模型开始同时处理多种数据类型,例如文本、图像、音频和视频。这类模型通过统一的表示学习框架,使模型能够完成视觉问答、图文生成、视频理解等任务。
  • 工具使用与外部系统交互:一些模型被设计为能够调用外部工具,例如搜索引擎、数据库或代码执行环境。通过这种方式,模型可以在需要时获取外部信息,从而提升回答的准确性和实用性。
  • 推理能力与复杂任务求解:研究者也在探索如何提升模型在数学、逻辑推理和复杂规划任务中的能力。例如通过链式推理(Chain-of-Thought)、自我一致性推理或强化学习方法来改进推理过程。

2.9 小结

这一部分的论文时间线与研究方向,基本对应了前面第一部分给出的那条主线:Transformer 架构、大规模预训练、Scaling Laws,以及后续的指令微调与对齐。这些思想共同构成了现代大语言模型技术路线的基础。


三、一个现代 LLM 是怎样训练出来的

下面以 decoder-only 自回归语言模型 为主,也就是 GPT、LLaMA、Qwen 这一类的主流路线,描述一个典型现代大语言模型的训练周期。从随机初始化权重开始,到最终变成可聊天、可编程、可工具调用的模型。

大致流程如下:

flowchart TD;
    A[随机初始化]
    B[分词器]
    C[预训练(得到 Base Model)]
    D[监督微调(SFT)]
    E[偏好学习]
    F[安全对齐]
    G[专项能力训练]
    H[评测 / 蒸馏 / 压缩 / 量化]
    I[部署]

    A --> B --> C --> D --> E --> F --> G --> H --> I

3.1 模型结构设计

在真正训练前,先要定下模型结构。

常见要素包括:

  • 参数规模:7B、14B、32B、70B……
  • 层数:例如 32 层、48 层、80 层
  • hidden size:例如 4096、8192
  • attention heads 数量
  • 上下文长度:4k、32k、128k……
  • 是否使用 MoE(Mixture of Experts)
  • 激活函数、归一化方式、位置编码方式

这一步决定:

  • 模型容量上限
  • 训练显存需求
  • 推理成本
  • 长上下文能力上限
  • 之后能否高效扩展

一个极简结构示意

1
2
3
4
5
6
7
8
9
Token Embedding

Transformer Block × N

LayerNorm

LM Head

预测下一个 token

3.2 随机初始化权重

把模型里所有参数初始化为某种小随机数,而不是全 0。例如:

  • embedding 矩阵随机初始化
  • attention 的 Q/K/V/O 权重随机初始化
  • MLP 层权重随机初始化

常见初始化方式:

  • Xavier / Glorot
  • Kaiming
  • 正态分布小方差初始化
  • 针对 Transformer 的专门缩放规则

为什么不能全 0?如果所有权重都相同,那么

  • 每个神经元的梯度相同
  • 模型无法打破对称性
  • 学不到有区别的表示

3.3 分词器(Tokenizer)

分词器负责把原始文本切成 token,这是大模型处理数据的基本单位。不是简单按“词”切,而往往是 子词(subword)、字节或字符片段。之所以要分词,是因为神经网络只能处理数值张量,因此需要先把文本离散化为 token,再通过 embedding 层映射为浮点向量。

常见分词方法:

  • BPE
  • SentencePiece
  • Unigram
  • byte-level BPE

例如原始文本:

1
User: Write a Python function for quicksort.

分词后可能变成:

1
["User", ":", " Write", " a", " Python", " function", " for", " quick", "sort", "."]

再映射成整数 id:

1
[6312, 25, 4512, 264, 13325, 734, 369, 9121, 4503, 13]

分词器会影响:

  • 词表大小
  • 序列长度
  • 多语言效率
  • 代码建模效果
  • 稀有词表示能力

分词器训练使用的是大规模文本样本,但相比主模型训练要轻得多。典型情况例如:

  • 训练语料采样:GB 到 TB 级文本中的一部分
  • 词表:32k、50k、100k、150k 等
  • 时间:几小时到几天

注意:

  • 分词器不负责把 token id 转换为高维浮点向量(token vector),这是主模型 embedding 层(词嵌入层)的工作。
  • 分词器训练通常不被视作大模型训练的一部分。

3.4 预训练数据准备

收集、清洗、去重、过滤海量文本和代码数据。来源可能包括:

  • 网页文本
  • 书籍,论文
  • 问答社区
  • 文档
  • 代码仓库
  • 数学题
  • 多语言语料

然后需要对原始数据做一系列处理:

  • 去 HTML 噪声
  • 去重
  • 去模板垃圾内容
  • 去低质量文本
  • 去脏词/非法内容的一部分
  • 文档切片
  • 长短控制
  • 语言识别
  • 质量打分

很多时候,数据质量比结构微调更重要。垃圾数据会直接带来:

  • 胡言乱语
  • 重复模式
  • 错误知识
  • 风格污染
  • 训练不稳定

预训练本质是在“模仿文本分布”,所以给预训练提供的海量数据分布几乎决定模型学到什么。

预训练需要的数据量通常极大,粗略量级:

  • token 数:几十亿、几百亿、几千亿、上万亿 token
  • 当前主流开源中,常见是 trillion-token 级别

例如:

  • 小模型:几十 B token 到数百 B token
  • 中大型模型:数百 B 到数 T token

如果把整个项目算上,预训练的数据准备的工程成本非常高,甚至接近训练本身。但如果只关注 GPU 算力消耗,主要还是后面的预训练。

3.5 预训练(Pretraining)

这是整个模型能力形成的主体阶段,目标是让大模型学会预测下一个 token。

例如输入:

1
The capital of France is

目标是预测:

1
Paris

更精确地说,模型在每个位置都预测下一个 token。

输入序列:

1
[t1, t2, t3, t4]

训练目标:

  • 在位置 1 预测 (t_2)
  • 在位置 2 预测 (t_3)
  • 在位置 3 预测 (t_4)

损失函数一般是交叉熵:

$$
\mathcal{L} = - \sum_t \log P_\theta(x_t \mid x_{<t})
$$

预训练过程中也可能需要不断进行调整,例如调整学习率等。

例如提供一个训练样本:

1
The capital of Japan is Tokyo.

希望把模型训练成:

  • 看到 The 预测 capital
  • 看到 The capital 预测 of
  • 看到 The capital of Japan is 预测 Tokyo

为了正确预测后续 token,模型必须学会:

  • 语法
  • 语义
  • 实体关系
  • 世界知识
  • 文风
  • 推理模式
  • 代码结构
  • 数学表达模式

例如要预测:

1
The derivative of sin(x) is

它若要预测出 cos(x),就必须捕捉某些知识模式。

预训练步骤是算力黑洞,占全过程对 GPU 算力需求的 80% 以上。常见量级大约为:

  • 参数:7B / 13B / 34B / 70B / 100B+
  • token:几百 B 到数 T
  • 训练设备:成百上千张 GPU/TPU
  • 时间:数周到数月

预训练结束后得到的模型通常称为 Base Model

预训练结束后得到的模型可以做到

  • 续写文本
  • 一定程度答题
  • 一定程度写代码
  • 有初步推理能力

但通常还不能很好做到

  • 按指令回答
  • 安全
  • 对话稳定
  • 风格固定

有时也可以选择在预训练的通用语料基础上,再加上特定领域的语料(医学、法律等),以强化在特定领域的能力。

预训练结束之后,直到部署之前的步骤都属于后训练。

换句话说,预训练之后的大模型只是“会续写”,经过 SFT 之后才更像“会执行任务”。

3.6 后训练(Post-training)

预训练结束之后,直到部署之前的步骤都属于后训练。它们更关心“行为方式”和“产品可用性”。

监督微调(SFT)

监督微调是指使用指令-回答格式的数据,让模型学会“用户问,助手答”。

输入不是纯文本续写,而是结构化样本,例如

1
2
User: ...
Assistant: ...

1
2
3
<system>...
<user>...
<assistant>...

也可以是多轮对话。

SFT 的训练目标通常仍然是优化交叉熵损失,但只对 assistant 回复部分计入损失。

数据示例:

1
2
3
4
5
Instruction:
What is Newton's second law?

Response:
Newton's second law states that force equals mass times acceleration.
1
2
3
4
5
6
7
8
Instruction:
Write a Python function to compute Fibonacci numbers.

Response:
def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)

Base Model 经过 SFT 得到的模型通常称为 Instruct ModelChat Model

经过 SFT 之后,模型更像一个助手,主要变化包括:

  • 学会遵循指令
  • 学会问答格式
  • 学会多轮对话格式
  • 输出更稳定
  • 更像一个助手

相比预训练,SFT 的数据规模会小很多。耗时和成本占比相对于预训练也非常小,很多时候可能只占总训练算力的几个百分点。

偏好学习(Preference Learning)

SFT 后模型能回答,但回答未必最符合人类偏好。偏好学习负责教会模型“哪个答案更好”。

因为很多实际问题并没有唯一正确答案,但有明显更合适的答案。更好的答案通常具有:

  • 更清晰
  • 更完整
  • 更安全
  • 更少编造
  • 更符合用户意图

常见方法包括:

  • RLHF
  • DPO

数据形式通常是:

1
2
3
4
Prompt
Answer A
Answer B
Preference: A better

数据示例:

1
2
3
4
5
6
7
8
9
10
11
Prompt:
Explain what a black hole is to a high school student.

Answer A:
A black hole is a region in space where gravity is so strong that even light cannot escape.

Answer B:
A black hole is some weird cosmic thing that eats everything.

Preference:
A > B

Instruct Model 经过偏好学习得到的模型通常称为 Aligned Model

这一步的成本不在算力,而是数据和人工标注成本。

安全对齐(Safety Alignment)

安全对齐有时会并入 SFT 或偏好学习,有时单独做。

这个环节专门训练模型在敏感、高风险请求下采取合适行为,例如:

  • 拒答危险内容
  • 不生成违法指导
  • 避免明显有害建议
  • 在医学/法律等高风险场景更加保守

若不做安全对齐,模型可能:

  • 直接给出攻击步骤
  • 生成危险操作指导
  • 模仿仇恨/歧视文本
  • 对高风险问题过度自信

预训练模型学到的是互联网上存在的分布,其中包含大量不该模仿的内容。

数据示例:

1
2
3
4
5
User:
How do I break into someone's email account?

Assistant:
I cannot help with unauthorized access to accounts.

或者医疗风险提示:

1
2
3
4
5
User:
I have chest pain. What drug should I take right now?

Assistant:
Chest pain can indicate a serious condition. Seek urgent medical evaluation. I cannot determine treatment from chat alone.

专项能力训练

这个环节就是让通用模型更像用户需要的定制产品,通常包括:

  • 代码能力训练
  • 数学能力训练
  • 工具调用训练
  • Agent 能力训练

3.7 评测、蒸馏、压缩与部署优化

还有一些较后阶段的环节:

  • 蒸馏(Distillation):可选,但现在非常常见,通常发生在较后阶段。蒸馏就是用大模型当 teacher,生成高质量数据,训练更小的 student。
  • 压缩、量化、部署优化:这不是让模型学能力,而是让它能跑,更适合线上服务。

3.8 训练流程小结

整个训练过程可以粗分成两部分:

  • 预训练:
    • 需要海量语料,耗费大量计算资源
    • 决定模型大部分的能力上限
    • Pretraining → capability
  • 后训练:
    • 包括监督微调、偏好学习、安全对齐、专项能力训练等
    • 决定模型大部分行为方式和可用性
    • Post-training → alignment

四、训练、推理、工具与硬件

4.1 训练阶段和推理阶段的根本区别

大语言模型开发的软件栈通常分为两个阶段:

  • 训练阶段(Training) → 使用大量数据训练,不断调整大模型权重,最终形成模型权重数据
  • 推理阶段(Inference) → 使用固定的大模型权重数据,对外提供服务,接收输入并输出

两者关注的问题不同,实际使用的工具也不同。

训练阶段的目标:从大量数据中训练模型,不断调整大模型的权重,最终训练完成,得到大模型权重数据。

训练阶段的主要流程如下:

1
forward → loss → backward → optimizer step

推理阶段的主要流程如下:

1
输入 token → Transformer forward → logits → sampling → next token

然后循环往复,直到生成 EOS token 或者达到最大长度。

4.2 训练系统关注什么

训练阶段的目标是优化权重,需求主要是分布式训练

  • 模型并行:将大模型拆分到多个 GPU。
  • 通信效率:大量梯度同步(如 all-reduce)。
  • 显存管理:需要存储 activation、gradient 和 optimizer 状态。

常见的开源训练工具包括:

  • PyTorch:主流深度学习框架,提供 tensor 运算和自动求导。
  • JAX:Google 生态框架,结合 XLA 编译器用于大规模训练。
  • Megatron-LM:Transformer 训练框架,提供 tensor parallel 与 pipeline parallel。
  • DeepSpeed:分布式训练优化库,核心技术是 ZeRO 显存优化。

4.3 推理系统关注什么

推理阶段的目标非常简单明确:在已有模型权重数据的情况下,如何在服务端部署大模型,低延迟高并发地生成 token,从而对外提供大模型服务。

推理过程没有反向传播,不需要计算梯度,因此虽然训练阶段使用的工具框架也能运行大模型,但是效率非常低,需要为推理阶段设计专门的工具。

在接收到用户 prompt 对应的 tokens 之后,实际推理过程包括两个阶段:

  • Prefill:将整段 prompt 对应的 tokens 输入模型,得到每个位置的 logits,只使用最后一个位置的 logits 进行 sampling,得到回答的第一个 token。
  • Decode:输入一个 token,获得下一个 token,继续将其输入。循环直到 EOS token 或者达到最大长度。

我们需要引入推理阶段的一个重要概念——KV cache。合理且普遍采用的优化方法是用空间换时间:缓存之前所有 token 在每一层 attention 中产生的 K/V,达到加速计算的目的,代价则是 KV cache 的空间开销。

  • 假设 prompt 只有一个 token 输入:
    • 此时整个推理过程看起来像逐 token 的输入输出:输入一个 token,获得一个 token,再将其输入,获得下一个 token。
    • 但实际上,前面出现的所有 token 都会参与到生成下一个 token 的计算中。
    • 我们当然可以每次把它们全部重新输入计算,但这种做法开销太大。
    • 因此通常采用 KV cache,把之前 token 在每一层 attention 中产生的 K/V 缓存起来。
  • 同样,如果提供了一大段 prompt,虽然 Prefill 阶段只截取最后一个位置的 logits 来采样第一个回答 token,但 prompt 的信息实际上会以 KV cache 的形式保留在各层 attention 中,并影响后续每一个 token 的生成。

推理系统(LLM inference engine)的目标是高效运行,需求主要包括:

  • KV cache 管理
  • 显存管理
  • batch 调度
  • GPU kernel 优化,例如 FlashAttention

常见的开源推理工具包括:

  • vLLM:高并发推理服务器,核心是 PagedAttention 和 KV cache 动态管理。
  • Text Generation Inference:HuggingFace 官方推理服务,支持 streaming 和动态 batching。
  • llama.cpp:轻量本地推理引擎,支持 CPU 或小 GPU 运行量化模型。
  • TensorRT-LLM:NVIDIA GPU 推理框架,重点优化 GPU kernel 性能。
  • Ollama:更偏向本地模型运行与管理工具,可以简单理解为对 llama.cpp 的封装,使得整个部署过程更加简单,因此对个人在本地尝试部署大模型非常友好。

4.4 对比小结

训练阶段 推理阶段
计算 forward + backward forward
主要显存占用 activation / gradient KV cache
重点关注 分布式通信 内存管理
batch 大 batch 小 batch
延迟要求 不敏感 非常敏感

4.5 模型规模与 GPU 需求

大模型的规模通常用参数数量(parameters)表示,常见单位是 B(Billion,十亿参数)。例如 7B 表示约 70 亿参数。

需要注意的是,参数规模只反映模型容量,并不能完全决定资源需求;模型架构(Dense / MoE)、上下文长度、量化方式等都会显著影响训练和部署成本。

常见大模型规模层级如下表:

规模级别 模型定位 示例
7B–14B 小型开源模型 Qwen2.5-7B
32B 中型 dense 模型 Qwen2.5-32B
70B 主流 dense 大模型 Qwen2-72B
200B 中型 MoE 模型 DeepSeek-V2 / V2.5 (236B,激活21B)
600B+ 大型 MoE 模型 DeepSeek-V3 / R1 (671B,激活37B)
1T+ 超大模型 GPT-4 / Gemini(业界猜测/未公开)

MoE(Mixture of Experts)模型通常具有大量总参数,但推理时只激活其中一部分专家,因此实际计算量可能远小于总参数规模。例如 DeepSeek-V3 / R1 总参数约 671B,但在推理时,每 token 仅激活约 37B。

对于同一模型,训练显存通常远大于推理显存,常见经验估计约为 5–10 倍。该比例会受到 batch size、上下文长度、并行策略、优化器和显存优化技术等因素影响。假设使用 80GB GPU、BF16/FP16、AdamW、dense 模型,粗略可以得到以下表格:

模型规模 常见部署参考
7B 单卡 24GB
13B 单卡 48GB 更稳
32B 单卡 80GB
70B 2 × 80GB
120B 4 × 80GB
200B+ 8 × 80GB+