Skip to content

第 1 章 LLM 入门

欢迎来到 zero-to-sglang 课程的第一章。作为整个课程的起点,本章将带你建立对大语言模型(Large Language Model, LLM)的整体认知,为后续深入学习推理流程、GPU 架构与推理框架打下基础。

1 本章学习目标

完成本章学习后,你将能够:

  1. 说清楚 LLM 的基本定义、发展脉络,以及它能做什么、不能做什么。
  2. 了解 LLM 在现实中的典型应用场景。
  3. 理解 LLM 的核心架构——Transformer,掌握位置编码、多头注意力、层归一化与残差连接、前馈网络等关键组件的作用。
  4. 熟悉贯穿全课程的关键基础概念(Token、参数、上下文窗口、自回归生成等)。

2 LLM 的定义、简要发展与边界

什么是 LLM。 大语言模型是一类基于深度神经网络、在海量文本上训练的语言模型。它的核心能力是:给定一段文本,预测下一个最可能出现的 token(词元)。正是这种看似简单的"预测下一个词"的能力,在足够大的模型规模和数据规模下,涌现出了理解、推理、生成、翻译、编码等多样化能力。这里的大(Large)既指参数量大(从数十亿到数千亿甚至上万亿参数),也指训练数据量大。

  • 2017 年:Google 提出 Transformer 架构(《Attention Is All You Need》),用自注意力机制取代了 RNN/CNN,奠定了现代 LLM 的基础。
  • 2018–2019 年:BERT(双向编码器)与 GPT(自回归解码器)两条路线兴起,预训练 + 微调范式成为主流。
  • 2020 年:GPT-3(175B 参数)展示了大规模模型的"少样本学习"能力,规模效应被广泛重视。
  • 2022 年至今:ChatGPT 引爆应用浪潮,LLaMA、Qwen、DeepSeek 等开源模型快速迭代,模型在架构(如 RoPE、GQA/MLA、RMSNorm、SwiGLU)和训练技巧上持续演进。

能力边界。 LLM 虽然强大,但是本质其实是一个概率模型,根据输入不断预测下一个字符的概率,所以大模型有明确的局限,它可能产生看似合理却错误的内容(幻觉);知识受限于训练数据的截止时间;对超出上下文窗口的长文本记忆有限;缺乏真正的因果推理与外部世界的实时感知。理解这些边界,有助于我们合理地使用和优化模型。

3 LLM 的典型应用

LLM 已经渗透到大量实际场景中,典型应用包括:

3.1 对话与问答

传统对话助手是LLM的主要阵地 以聊天为主,用户提问、模型回答。从最开始的GPT3至今,传统对话助手有了很大进步,从单模态到多模态,从文字到图片,音频,从离线的聊天到可以联网搜索。对话助手在一部分占据了搜索引擎的生态位,大家有问题很有可能是去问AI,而不是去浏览器搜索。

3.2 文本生成

内容生成与创作是LLM提效最显著的领域。现在大模型写作,撰写报告的应用常见已经非常常见,一些比较深入有公文写作、会议纪要,PDF、Doc直接生成,在文本生生成方面的应用已经非常广泛。

同时大模型还在翻译层面大方光彩,大模型正在取代传统的机器翻译,各家模型厂商出的flash模型正在成为翻译界的主要角色

3.3 代码相关

Claude code、Codex、Cursor是进来最火的AI 编程工具,国内的Qcode、Zcode、Codebuddy 等国内厂商的产品也在抢占市场,这些vibe coding 工具让行外人也能一句话生成一个作品,减轻程序员的工作压力,他们变得越来越火爆,以至于没用过他们就相当与“落伍”了

这些应用的背后,都依赖模型高效的推理能力——这也正是本课程后续章节(推理流程、GPU、推理框架)要重点解决的问题。

3.4 AI应用的基础:推理成本和延迟

这些应用都是以大模型为核心的,大模型的输出对于ai工具是最重要的,我们在使用ai工具实质是在利用大模型的输出,大模型的输出又依托于推理,推理成本直接影响模型使用成本,推理延迟也会直接影响用户体验,因此推理成本和延迟至关重要。

LLM自回归生成特性导致内存需求随输入序列长度和批次大小线性增长。高并发场景下,GPU显存70%以上被KV Cache(这些概念后面会讲)占用,限制单卡并发上限与上下文长度,因缓存丢弃导致的重复计算进一步推高成本。据英伟达测算,未做KV Cache卸载优化的推理集群,单位Token生成成本因重复计算提升2-3倍,高并发峰值期甚至提升3.5倍。某中等规模企业AI智能客服,因KV Cache显存瓶颈和缓存驱逐导致的额外成本,占单月总运营成本的78%。

延迟直接影响体验。首Token延迟(TTFT)和单Token延迟(TPOT)决定用户交互体验。能否满足人眼阅读速度(≤150ms/Token)的服务等级目标,已成为生产部署的关键约束。

这些就是高效推理工具要解决的问题。。

这些高效推理框架的出现,正是为了解决应用爆发后日益严峻的成本与延迟瓶颈,推动LLM从技术可用走向商业可赚。

4 核心架构:Transformer

transformer模型的起源可以追溯到2017年,当时由Google研究团队在论文《Attention Is All You Need》中首次提出。该模型的核心创新是引入了自注意力机制(Self-Attention Mechanism),摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN)结构。自注意力机制允许模型在处理序列数据时并行计算,从而大幅提高了计算效率,并解决了长距离依赖问题。

1-1-transformer.png

图 1. Transformer 的整体架构

上述图中是Transformer 的 Block 结构,左边是编码器Block,右边是解码器Block,解码器和编码器堆叠*N就是transformer结构

4.1 位置编码(Positional Encoding)--正余弦位置编码

PE(pos,2i)=sin(pos100002i/dmodel)PE(pos,2i+1)=cos(pos100002i/dmodel)

变量说明

pos:token在序列中的位置(0, 1, 2, ..., N-1) i:维度索引 dmodel:模型嵌入维度(论文中512) 10000:基础频率(可配置) 代入公式计算出位置编码后直接和词嵌入相加 X=Token+PE(pos)

正余弦位置编码是 Transformer 模型中为序列引入位置信息的关键设计。由于 Transformer 的核心是自注意力机制,它本身不具备对输入顺序的感知能力,如果直接将词向量输入模型,那么我爱你和你爱我会被视为相同的集合。为了解决这一问题,需要在输入中显式加入位置信息。正余弦位置编码是一种无需训练、通过固定公式生成的位置表示方式,其核心思想是利用不同频率的正弦和余弦函数,为序列中的每个位置生成一个唯一的、且具有相对位置关系感知能力的编码向量。

具体来说,对于序列中第 pos 个位置(从 0 开始计数)和编码向量的第 d 维(总维度为 dmodel),我们定义维度配对索引 i=0,1,,dmodel21。编码值的生成规则如下:

当维度 d 为偶数(即 d=2i)时,使用正弦函数;当维度 d 为奇数(即 d=2i+1)时,使用余弦函数。值得注意的是,同一对中的偶数维和奇数维共享相同的频率基数

计算公式为:

PE(pos,2i)=sin(pos100002i/dmodel)PE(pos,2i+1)=cos(pos100002i/dmodel)

这里 100002i/dmodel 决定了不同维度上的波长,从而形成一个多尺度的编码体系:低维度(小 i)对应高频,可以精细区分相邻位置;高维度(大 i)对应低频,能够覆盖较远距离的相对关系。最终,每个位置都会得到一个与词向量维度相同的编码向量,二者相加后作为模型输入。

这种设计带来了几个显著的优势。首先,它完全确定,无需额外参数,避免了增加模型复杂度或引入训练中的位置嵌入过拟合问题。其次,通过三角函数的周期性,编码值被约束在 [1,1] 之间,数值稳定,易于与词向量相加。更重要的是,它天然支持相对位置的建模:对于任意固定的偏移量 k,位置 pos+k 的编码向量可以表示为位置 pos 编码向量的线性变换(仅依赖于 k),这使得自注意力机制更容易学习到序列中元素的相对位置关系,而非仅仅绝对位置。这一特性在处理变长序列和捕捉局部依赖时尤为关键。

正余弦位置编码最早在《Attention Is All You Need》中提出,作为原始 Transformer 的标准位置编码方案。尽管后来出现了可学习的位置嵌入、相对位置编码等变体,但正余弦编码因其简单、高效且无需训练的特性,仍在许多序列建模场景中被广泛使用或作为理解位置编码机制的经典范例。

4.2 多头注意力机制(Multi-Head Attention)

1-2-MultiHeadAttention.png

图 2. 多头注意力机制

注意力机制仿照人类注意力的运行原理,人类在看一张图片时不会将注意力均匀的放在照片的每个角落,而是有选择的观察图片中亮眼和突出的部分。注意力机制也是这样,会关注输入中重要的部分,表现为权重大。注意力机制本质是加权求和。

多头注意力机制是 Transformer 模型的核心创新。它通过并行执行多个注意力头,让模型能够从不同角度、不同语义层面同时关注序列中的多种依赖关系,从而极大增强了对复杂模式的建模能力。下面从单头注意力的做法与局限出发,逐步展开多头注意力的完整设计。

4.2.1 单头注意力的做法与局限

单头注意力的计算基于缩放点积注意力机制。对于输入序列 X(形状为 [batchSize,seqLen,dmodel]),首先通过三组权重矩阵将其映射为查询(Q)、键(K)、值(V):

Q=XWQ,K=XWK,V=XWV

其中 WQ,WK,WV 的形状均为 [dmodel,dmodel],因此 Q,K,V 的形状保持 [batchSize,seqLen,dmodel]。随后计算注意力输出:

Attention(Q,K,V)=softmax(QKTdk)V

这里 dk=dmodel,缩放因子 dk 用于防止点积结果过大导致梯度进入饱和区。

单头注意力的局限在于,它只能计算一种查询-键-值关系,如同只用一双眼睛观察。这导致模型难以同时捕获语法结构、语义关联、长程依赖等多种模式,注意力分布往往过于分散,无法聚焦于多个重要的子空间。因此,普遍做法是将注意力机制重复多次,让每个头学习不同的子空间表示,最后将结果合并。

4.2.2 多头注意力的设计思想

多头注意力通过将 dmodel 维的查询、键、值拆分为 h 个独立的头,每个头在更低维的空间(dk=dmodel/h)中并行执行注意力计算,从而使模型能够从多个表示子空间中联合提取信息。每个头都有自己的投影矩阵,可以关注到不同类型的特征,例如(这只是个例子,我们无法确定每个头的分工) 有的头可能聚焦局部语法结构,有的头则捕捉远距离语义依赖,当然,模型内部是一连串的浮点数,我们无法得知具体的分工是怎么样的,但是实践证明这是有用的。

4.2.3 多头注意力的具体计算过程

第一步:多头切分(假定输入 Q, K, V 已完成线性投影)

对于输入 Q,K,V(形状均为 [batchSize,seqLen,dmodel]),首先将其拆分为 h 个头。通过重塑和转置操作,将头维度提前:

python
Q = Q.reshape(batch_size, seq_len, h, d_k)   # [bs, seq_len, h, d_k]
Q = Q.transpose(1, 2)                        # [bs, h, seq_len, d_k]

经过转置后,Q,K,V 的形状变为 [batchSize,h,seqLen,dk]。这样一来,每个头都能独立且高效地进行批处理。

第二步:并行计算每个头的注意力

对于第 i 个头,独立执行缩放点积注意力:

Headi=Attention(Qi,Ki,Vi)=softmax(QiKiTdk)Vi

其中 Qi,Ki,Vi 的形状均为 [batchSize,seqLen,dk],因此 QiKiT 的形状为 [batchSize,seqLen,seqLen],表示该头内部所有位置两两之间的注意力分数。该头的输出 Headi 形状同样为 [batchSize,seqLen,dk]

第三步:拼接与最终线性变换

将所有头的输出沿头维度拼接起来,恢复原始维度:

MultiHead(Q,K,V)=Concat(Head1,...,Headh)

拼接后的形状为 [batchSize,seqLen,h×dk]=[batchSize,seqLen,dmodel]。最后通过一个输出投影矩阵 WO(形状 [dmodel,dmodel])进行线性变换,得到最终的多头注意力输出:

Output=MultiHead(Q,K,V)WO

该输出保持了与输入相同的维度,便于残差连接等后续操作。

4.2.4 原始论文中的具体参数

在《Attention Is All You Need》中,多头注意力的设计采用以下配置:

  • 模型维度 dmodel=512
  • 头数 h=8
  • 每个头的维度 dk=dv=dmodel/h=64
  • 缩放因子 dk=64=8

这种设置使得多头注意力的计算量与单头注意力相近(每个头在低维空间计算,总计算量基本不变),但显著提升了模型的表示能力。

4.3 层归一化(LayerNorm)与残差连接

4.3.1 什么是归一化

归一化是将数据按特定规则进行缩放,使其落入统一的标准范围或分布的技术。在深度学习中,它主要指对神经网络中间层的激活值或权重进行变换,以稳定训练过程、加速收敛。

在概率论中的归一化公式为 xnorm=(xμ)/σ ,其中 μσ 分别是原始数据的均值和标准差。这样处理后的数据分布被"重置"为标准状态。对每个元素减去均值和除以标准差,最后就是一个方差为一,均值为零的分布

transformer原始的层归一化:

LayerNorm(v)=γvμσ+β

类似的,层归一化就是对同一层(单个样本)进行的归一化,和普通的归一化没有什么本质区别。

  1. 计算均值(对同一层的所有神经元):
μ=1di=1dvi
  1. 计算标准差
σ=1di=1d(viμ)2+ε

其中 ε 是极小常数( 106 ),防止除零错误。

  1. 归一化
v^=vμσ
  1. 可学习参数调整
Output=γv^+β

可学习参数 γ(缩放)和 β(平移),维度与输入相同。让模型自己学习缩放和平移。

4.3.2 什么是残差(Residual)

残差 在深度学习中特指残差连接(Residual Connection),也称为跳跃连接(Skip Connection),是连接神经网络层与层之间的"捷径",让信息可以直接绕过某些层传递。

1-3-Add&Norm.png

图 3. 残差连接与层归一化(Add & Norm)

残差公式:

Output=Input+Layer(Input)

在这张图中可以看到,所谓的残差连接就是将在多头注意力层之前的数据直接在残差层相加,残差连接,从抽象层理解就是引入了浅层的信息流,防止随层数越深,信息的损失越大,误差会随之扩大。残差就是不断引入之前的信息来纠正。

从数学角度上,残差就是不强制网络直接学习理想映射 H(x) ,而是让网络学习"残差" F(x)=H(x)x 如果某层不需要做变换,网络只需学习 F(x)0 ,保留输入 x 。如果需要变换,网络学习对输入的修正量极端情况:即使 Layer 学习效果差,至少能保证 OutputInput,不会比不加深层更差

4.3.3 层归一化和残差连接

在原始Transformer论文中,层归一化(Layer Normalization) 和残差连接(Residual Connection) 是协同工作的核心设计,共同确保深层网络稳定训练。 原始论文中是先残差连接在进行归一化:

output=LayerNorm(x+Sublayer(x))

其中 x是输入到当前子层模块的张量。Sublayer(x)是子层自身的变换(例如多头自注意力或前馈网络),直接作用在 x 上。x+Sublayer(x)则是代表残差连接。LayerNorm代表层归一化,应用于残差连接之后。

后面提出的变体 Pre-Norm(先归一化,再子层,最后残差)相比,这里用的是Post-Norm,顺序是:子层 → 残差 → 归一化

残差连接确保梯度直接回传,至少保留恒等映射能力,而层归一化将相加后的分布标准化,避免数值爆炸/消失二者结合使12层甚至更深的网络可训练

4.4 前馈网络(Feed Forward)与激活函数

1-4-FeedForward.png

图 4. 前馈网络(Feed Forward)

原始Transformer论文《Attention Is All You Need》中使用的激活函数是ReLU(Rectified Linear Unit),具体应用于位置前馈网络 (Position-wise Feed-Forward Networks)。

4.4.1 ReLU的应用位置

在编码器和解码器的每个层中,前馈网络的结构为:

FFN(x)=max(0,xW1+b1)W2+b2

第一层线性变换 + ReLU激活第二层仅为线性变换,无激活函数。

4.4.2 具体参数配置

根据原始论文:

参数说明
输入/输出维度dmodel=512与模型主维度一致
中间层维度dff=2048扩展4倍后再压缩
激活函数ReLU仅应用于第一层

完整流程为先式512维输入,再到线性层(512->2048),然后到ReLU 再到线性层(2048->512) 最后输出。

4.4.3 为什么用ReLU?

ReLU的计算高效,相比Sigmoid/Tanh,ReLU的导数计算简单(0或1)

4.4.4 一个合格的激活函数需要的基础特质

第一,必须是非线性,一个激活函数必须是非线性,对于一个线性函数,无论多么深的神经网络,他始终是一个简单的神经网络,只能拟合简单的函数,多层网络会退化为单层线性模型,对于非线性函数,能增加网络的复杂性,学习复杂问题。

第二是具有可微性,在定义域内几乎处处可微,支持梯度下降和反向传播,否则无法使用梯度下降来训练模型。ReLU在x=0 处不可微,但实践中可以使用次梯度(subgradient),效果良好。

第三计算要简单高效,一个激活函数在模型推理和训练中会被调用数十亿次,在高数量级下的运算下的计算成本不会太高。

4.5 课外延展:从本课基础到最先进的 SOTA

本课作为入门课程,讲解的是最经典、最基础的 Transformer 组件。但工业界和学术界一直在快速演进,许多组件已被更先进的方案替代。下表仅做名词对照,不展开解说,供有兴趣的同学按图索骥、自行延展学习。

组件 / 维度本课基础演进路线 → 最先进(SOTA)
整体架构Encoder-Decoder→ Decoder-only → MoE(稀疏专家)
位置编码正余弦(Sinusoidal / 绝对位置编码)→ 可学习位置编码 → ALiBi → RoPE → NoPE
注意力机制MHA(多头注意力)→ MQA → GQA → MLA → NSA / DSA → KDA
注意力范围全局稠密注意力→ 稀疏注意力 → 滑动窗口注意力 → 全局/局部混合
归一化方法LayerNorm→ RMSNorm → 双重归一化(Pre+Post Norm)/ QK-Norm
归一化位置Post-Norm(后归一化)→ Pre-Norm(前归一化)
激活函数ReLU→ GeLU → Swish → GLU 家族(GeGLU / SwiGLU)
前馈网络(FFN)稠密 FFN(Dense MLP)→ MoE FFN(混合专家)
KV 处理无缓存,逐次重算→ KV Cache → KV 量化 → PagedAttention
位置外推 / 长上下文固定上下文长度→ RoPE 插值/扩展(NTK、YaRN 等)→ 长上下文架构
计算精度FP32→ FP16 / BF16 → FP8 → INT8 / INT4

5 关键基础概念

5.1 提示词工程 (Prompt Engineering)

这是最基础、最直接的交互方式。提示词(Prompt) 就是你给AI的指令或问题,是触发模型生成内容的输入文本。而提示词工程,就是一套系统性地研究和设计提示词的方法,目的是让AI更稳定、更准确地输出你想要的结果。

它像一份写给AI的文档,关键在于交代清楚背景和要求,让模型的输出更可控。当任务变复杂,需要在提示词里塞入大量动态信息时,提示词会变得臃肿,效果会下降。

5.2 上下文工程 (Context Engineering)

如果说提示词工程是把话问好,那上下文工程就是为对话准备所有背景资料。上下文指在一次推理过程中提供给LLM的全部信息,包括提示词、历史对话、外部数据等。上下文工程则是一门设计和优化这些信息,以提升AI理解和任务表现的学科。

上下文工程不是把所有资料都扔给LLM。它负责管理AI有限的工作记忆即上下文窗口,决定在特定时刻把什么信息放进去。上下文工程是更宏观的系统设计,而提示词工程是在这个设计好的框架内撰写具体指令。

做好上下文工程很重要,要让安排好在什么时刻给模型什么信息,原因一是模型的上下文窗口有限,把所有信息都输入到模型中会把模型的上下文窗口耗尽,,并且会分散模型的注意力,表现为模型降智,原因二是成本因素,每次都带全部信息进行推理会消耗更多的token,因此做好上下文工程很重要。

5.3 技能 (Skill)

技能 可以理解为结构化的提示词给AI用的专业技能包。它将完成某项特定任务的经验、流程、规则等封装成一个可复用的标准化模块。skill告诉模型该如何做,调用什么工具。

如果说大模型是一个人,那技能就是让大脑能精准完成特定工作的执行手册或者说是说明书。它解决了大模型知道该做什么,但不知道具体怎么做的问题。技能是智能体(Agent)的手脚,是其执行具体任务的核心能力单元。

5.4 检索增强生成 (RAG)

RAG(Retrieval-Augmented Generation) 是一种让LLM在生成回答前,先从外部知识库检索最新、最相关信息的技术。

它有效解决了LLM的两个核心痛点:一是知识陈旧,模型训练数据有截止日期,二是容易一本正经地胡说八道,即产生模型幻觉。通过引入外部权威知识作为依据,RAG能显著提升回答的准确性和可靠性。

RAG是实现上下文工程的一种关键技术手段,负责从长期记忆(如向量数据库)中检索信息,以填充到模型的短期工作记忆(上下文窗口)中。

5.5 智能体 (Agent)

如果说前面的概念都是让AI更好地思考和回答,那么智能体 就是让AI开始行动。AI智能体是一个能够自主感知环境、理解目标并执行任务以达成目标的软件实体。

它像一个有自主行为能力的人,具备自主性,可以独立工作,具有反应性可以动态响应,还有目标驱动可以为完成任务而规划行动的能力。

一个典型的智能体工作流程是目标拆解 + 技能调用 + 结果验证。它接到任务后,会自己拆解步骤,调用相应的skill去执行,并检查结果。

5.6 Harness

Harness可以理解为智能体的运行底座或操作系统。它不是一个具体的模型,而是一套为模型提供手脚和神经系统的工程框架。

它负责处理让模型能干活的所有工程事宜,比如工具调用、任务规划、执行调度、内存管理等。一个广为流传的公式是:模型(大脑)+ Harness(手脚和神经系统)= 智能体(Agent)。它让你能像搭积木一样,组合各种插件来构建自定义的Agent。

5.7 其他的基础概念

Token(词元):文本被分词器切分成的最小单位,模型实际处理的是 token 对应的整数 ID,对于deepseek一个token约等于1.6-1.7个汉字。

Embedding(词嵌入):把离散的 token ID 映射为连续的向量表示,Embedding向量带有语义信息,可以用作聚类、分类等,也可以将文档嵌入使用RAG进行检索。

参数(Parameters):模型中可学习的权重,参数量常用来衡量模型规模,如 7M、70B,其中M是百万,B是十亿,我们说一个模型有600B参数,就是说这个模型有6000亿的参数,一个参数就是一个浮点数。

自回归生成(Autoregressive Generation):模型逐个生成 token,每次都把已生成的内容作为输入来预测下一个 token。

上下文窗口(Context Window):模型一次能处理的最大 token 数量,决定了它能看到多长的文本,现在的主流旗舰模型基本支持1M上下文窗口,大概可以塞进去1.5本到2本左右的《红楼梦》。

6 总结与测试题

6.1 课程总结

本章我们建立了对大语言模型的整体认知:LLM 本质上是"预测下一个 token"的大规模神经网络,在规模效应下涌现出多样能力;它经历了从 Transformer 提出到如今开源模型繁荣的快速发展,同时也存在幻觉、知识时效等边界。其核心架构 Transformer 由位置编码、多头注意力、层归一化与残差连接、前馈网络四大组件构成,并在自注意力机制上实现了高效的并行计算。这些概念是后续学习推理流程与系统优化的基础。

6.2 测试题

  1. 用一句话说明 LLM 的核心能力是什么,并解释为什么"预测下一个 token"能带来如此丰富的能力。
  2. 自注意力机制为什么需要位置编码?正余弦位置编码是如何提供位置信息的?
  3. 简述残差连接和层归一化各自的作用。

参考资料