工程师的 AI 学习指南:从数学基础到生产落地
工程师的 AI 学习指南:从数学基础到生产落地
过去两年,我从一个大数据工程师逐步转型到 AI Agent 工程和推理优化方向。这个过程中,我踩过不少弯路——要么一头扎进论文里出不来,要么只停留在调 API 的层面。回头看,最有效的学习路径是从第一性原理出发,沿着"数学 → 模型 → 训练 → 推理 → 工程"这条链路逐层打通。
这篇文章把我的学习路径和工程经验整理成一份系统的指南,希望能帮到想进入 AI 领域的工程师。
一、数学基础:没你想象的那么难
很多工程师看到数学公式就打退堂鼓,但实际上 LLM 涉及的数学只需要三块基础,而且都可以通过代码来理解。
1.1 线性代数:一切计算的根基
LLM 的本质是矩阵运算。一个 token 是一个向量,一层网络就是一次矩阵乘法。你只需要掌握以下几个概念:
矩阵乘法——神经网络的核心操作。矩阵 W 对向量 x 做变换,把 x 投影到新的空间:
import torch
W = torch.randn(4, 3) # 权重矩阵: 3维 → 4维
x = torch.randn(3) # 输入向量
y = W @ x # 一次线性变换,这就是一个"线性层"
点积——衡量两个向量的相似度。这是 Attention 机制的数学基础:
a · b = |a| · |b| · cos(θ)
点积越大,两个向量方向越一致。Attention 本质上就是用点积来衡量"两个 token 有多相关"。
直觉:矩阵乘法就是对数据做空间变换——拉伸、旋转、投影。神经网络的每一层都在做这样的变换,把原始数据一步步变换到我们需要的表示空间。
1.2 微积分与梯度:模型如何学习
训练神经网络 = 找损失函数的最小值,工具就是梯度下降:
θ_new = θ_old - η · ∇L(θ)
θ = 模型参数(矩阵 W 里的数字)
η = 学习率(步长,通常 1e-4 ~ 1e-3)
∇L = 损失对参数的梯度(指向函数增长最快的方向)
沿梯度反方向走一小步,损失就会减小。PyTorch 的 autograd 帮你自动完成了梯度计算:
x = torch.tensor(5.0, requires_grad=True)
for _ in range(100):
loss = (x - 3) ** 2 # 最小值在 x=3
loss.backward() # 自动求梯度
with torch.no_grad():
x -= 0.1 * x.grad # 梯度下降
x.grad.zero_()
# x ≈ 3.0
链式法则是反向传播的数学基础——它告诉我们如何把最终误差逐层传回去,让每一层知道自己该怎么调整。作为工程师,你不需要手推每个公式,但要理解这个过程。
1.3 概率论:LLM 的输出本质
LLM 的输出就是概率分布——"下一个 token 是什么"的概率。
Softmax 把原始分数变成概率分布:
softmax(z_i) = exp(z_i) / Σ_j exp(z_j)
交叉熵损失衡量预测分布和真实分布的差距:
L = -log(模型给正确答案的概率)
模型给正确答案的概率越高,损失越低。整个训练过程就是在不断降低这个损失。
困惑度(Perplexity) 是评估语言模型的核心指标:
PPL = exp(平均交叉熵损失)
PPL=1 表示完美预测,GPT-4 级别模型在通用文本上大约 5-15。
学习建议:不要先啃教科书。推荐 3Blue1Brown 的 线性代数的本质 和 微积分的本质 视频系列,结合 PyTorch 代码动手验证,3-5 天就能建立足够的直觉。
二、LLM 核心原理:Transformer 全链路
2.1 从文本到向量
LLM 不直接处理文字。文本首先被 Tokenizer 切分为子词单元,然后通过 Embedding 层映射为高维向量:
"我喜欢深度学习" → [3421, 8765, 12003, 9087] → 4个4096维向量
Embedding 本质是一个查找表——一个 (vocab_size, d_model) 的矩阵,每个 token ID 对应表中的一行。训练过程中,语义相近的词会自动聚集到向量空间中相近的位置。
2.2 Self-Attention:核心中的核心
Attention 解决的核心问题是:让每个 token "看到"其他 token,建立长距离依赖。
每个 token 通过三个矩阵生成 Query、Key、Value:
Q = X · W_Q → "我在找什么信息?"
K = X · W_K → "我能提供什么信息?"
V = X · W_V → "我的实际内容"
Attention 计算:
Attention(Q, K, V) = softmax(Q · K^T / √d_k) · V
分解来看:
Q · K^T→ 计算每对 token 之间的关联分数/ √d_k→ 缩放,防止点积过大导致 softmax 饱和softmax→ 归一化为注意力权重(概率分布)· V→ 用权重对 Value 加权求和
def self_attention(X, W_Q, W_K, W_V):
Q, K, V = X @ W_Q, X @ W_K, X @ W_V
d_k = Q.shape[-1]
scores = Q @ K.transpose(-2, -1) / math.sqrt(d_k)
weights = F.softmax(scores, dim=-1)
return weights @ V
Multi-Head Attention 把维度拆分成多个头,每个头独立学习不同的关注模式——有的关注语法关系,有的关注语义,有的关注位置。
因果遮罩(Causal Mask) 确保 GPT 类模型只能看到前面的 token,不能偷看未来:
a b c d
a [ 1 0 0 0 ]
b [ 1 1 0 0 ]
c [ 1 1 1 0 ]
d [ 1 1 1 1 ]
2.3 完整的 Transformer Block
一个 Transformer Block 包含两个子层,都有残差连接:
x → LayerNorm → Multi-Head Attention → + (残差) → LayerNorm → FFN → + (残差) → 输出
现代 LLM 的关键设计选择:
- Pre-Norm(先 Norm 再 Attention,比 Post-Norm 训练更稳定)
- RMSNorm 替代 LayerNorm(LLaMA 的选择,计算更快)
- SwiGLU 替代 ReLU 作为 FFN 激活(效果更好)
- RoPE 旋转位置编码(相对位置编码,支持长度外推)
2.4 训练流程
预训练的目标极其简单——给定前面的 token,预测下一个:
def compute_loss(model, token_ids):
logits = model(token_ids[:, :-1]) # 输入:除最后一个
targets = token_ids[:, 1:] # 标签:除第一个
return F.cross_entropy(logits.reshape(-1, logits.size(-1)), targets.reshape(-1))
规模感受:LLaMA 用 1.4 万亿 token 训练,数千张 GPU 跑数月,成本数千万美元。
对齐(Alignment) 让模型从"预测下一个词"变成"有用的助手":
- SFT:用指令-回答数据微调,只在回答部分计算损失
- RLHF:训练奖励模型,用 PPO 强化学习优化
- DPO:直接从人类偏好数据优化,不需要单独的奖励模型
混合精度训练是现代 LLM 训练的标配:
- 权重主副本用 FP32(精确更新)
- 前向/反向用 BF16(快、省显存)
- BF16 比 FP16 更不容易溢出,是首选精度格式
学习建议:跟着 Andrej Karpathy 的 Let's build GPT from scratch 从零实现一个 mini GPT,然后阅读 nanoGPT 源码(约 300 行核心代码)。这是理解 Transformer 最高效的方式。
三、推理优化:从理论到生产
推理是 AI Infra 中我花精力最多的方向。模型训练好了只是第一步,如何高效地为用户提供服务才是真正的工程挑战。
3.1 KV Cache:避免重复计算
自回归生成每一步都要过完整个模型。没有 KV Cache 时,之前 token 的 K、V 会被重复计算:
无 Cache:step 3 要重算 token 1、2、3 的 K/V
有 Cache:step 3 只算 token 3 的 K/V,与缓存拼接
KV Cache 的显存开销不可忽视——LLaMA-7B 处理 2048 tokens 约占 1GB 显存。这也是为什么长序列推理很吃显存。
3.2 vLLM 与 PagedAttention
vLLM 的核心创新是借鉴操作系统虚拟内存的分页思想来管理 KV Cache:
- 传统方式:为每个请求预分配最大长度的连续内存,浪费严重
- PagedAttention:按需分配固定大小的 block,允许非连续存储
好处:减少内存浪费、提高并发、支持 prefix 共享。
python -m vllm.entrypoints.openai.api_server \
--model /path/to/model \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.9 \
--max-num-batched-tokens 8192
关键调优参数:
| 参数 | 说明 | 建议 |
|---|---|---|
gpu-memory-utilization |
显存利用率 | 0.85-0.95 |
max-num-batched-tokens |
最大批处理 token 数 | 根据显存调整 |
max-num-seqs |
最大并发序列数 | 匹配业务 QPS |
3.3 量化部署
量化把高精度权重映射到低精度(FP16 → INT8/INT4),在精度损失可控的情况下显著降低显存和提升速度:
scale = max(|W|) / 127
W_int8 = round(W / scale)
推理还原:W ≈ W_int8 × scale
我在实际项目中使用 GPTQModel 做 4-bit 量化:
from gptqmodel import GPTQModel, QuantizeConfig
quantize_config = QuantizeConfig(bits=4, group_size=128, desc_act=True)
model = GPTQModel.from_pretrained(model_name, quantize_config=quantize_config)
model.quantize(calibration_dataset)
model.save_quantized(output_dir)
3.4 推理优化全景
| 技术 | 原理 | 效果 |
|---|---|---|
| KV Cache | 缓存已计算的 K/V | 避免重复计算 |
| PagedAttention | 分页管理 KV Cache | 吞吐量 2-4x |
| Continuous Batching | 动态合并请求 | 比 static batching 提升数倍 |
| Flash Attention | IO-aware Attention | 速度 2-4x |
| 量化(GPTQ/AWQ) | 低精度权重 | 显存减半+ |
| Speculative Decoding | 小模型猜,大模型验 | 速度 2-3x |
生产环境必须关注的核心指标:TTFT(首 token 延迟)、TPS(吞吐量)、GPU 利用率、KV Cache 使用率。
四、AI Infra 技术栈:工程师的主战场
如果你是大数据或后端工程师,AI Infra 是最自然的切入方向。分布式系统、数据 Pipeline、高并发优化这些能力可以直接迁移。
4.1 主要方向
| 方向 | 核心工作 | 与传统后端的关联 |
|---|---|---|
| 分布式训练平台 | 多机多卡训练、集群调度 | 分布式经验直接迁移 |
| 推理服务 | 模型部署、在线推理 | 高并发/低延迟经验可迁移 |
| MLOps/ML 平台 | Pipeline 编排、实验管理 | 数据 Pipeline 经验匹配 |
| GPU/异构计算 | CUDA 编程、Kernel 优化 | 需要较多新知识 |
4.2 分布式训练
训练 LLM 需要成百上千张 GPU,关键技术:
数据并行:每张卡持有完整模型,训练不同的数据子集,梯度通过 AllReduce 聚合。
模型并行:
- Tensor Parallelism:把单个矩阵拆到多张卡
- Pipeline Parallelism:把不同层分到不同卡
DeepSpeed ZeRO:把优化器状态、梯度、参数分片到多张卡,显著降低单卡显存需求。三个阶段逐步优化:
- ZeRO-1:分片优化器状态
- ZeRO-2:+ 分片梯度
- ZeRO-3:+ 分片参数
4.3 GPU 编程基础
不需要成为 CUDA 专家,但要理解核心概念:
- SM(Streaming Multiprocessor):GPU 的基本计算单元
- Warp:32 个线程组成的调度单位
- 内存层级:寄存器 → 共享内存 → L2 Cache → HBM(全局显存)
- 关键瓶颈:通常是显存带宽,不是算力(memory-bound vs compute-bound)
Flash Attention 的成功就证明了这一点——它没有减少计算量,而是通过减少 HBM 访问次数来提速。
4.4 MLOps 与部署
生产级 AI 系统需要完整的工程体系:
- 模型版本管理:训练、评估、上线的完整链路
- Kubernetes 调度:GPU 资源管理、弹性伸缩
- 监控告警:Prometheus + Grafana 追踪推理延迟、GPU 利用率、错误率
# K8s HPA 根据 GPU 利用率自动伸缩
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
五、AI Agent 工程实践
Agent 是我当前最核心的方向。把 LLM 从"问答工具"变成"能执行任务的智能体",这中间有大量的工程问题。
5.1 ReAct 模式
ReAct(Reasoning + Acting)让 LLM 交替进行推理和行动:
def react_loop(query, tools, max_steps=10):
context = [{"role": "user", "content": query}]
for step in range(max_steps):
response = llm.chat(context, tools=tools)
if response.is_final_answer:
return response.content
tool_result = execute_tool(response.tool_call)
context.append({"role": "tool", "content": tool_result})
5.2 工程落地的关键挑战
工具设计——好的工具是 Agent 成功的前提:
- 接口定义清晰,参数描述准确
- 返回有意义的错误信息
- 保证幂等性
上下文管理——Token 限制是核心约束:
- 滑动窗口策略
- 关键信息摘要
- 只传递相关的 Schema(比如 NL2SQL 场景只传相关表的元数据)
可观测性——生产环境必须看得见:
- 每一步的推理过程和工具调用链路
- Token 消耗和延迟追踪
- 异常告警(死循环、工具调用失败)
5.3 NL2SQL Agent
这是我在实际项目中实现的一个典型 Agent 应用:
- 用户用自然语言描述查询需求
- Agent 理解意图,结合表 Schema 生成 SQL
- 执行查询,格式化结果返回
关键优化:
- Schema 感知:不把所有表都塞进 prompt,只传相关的
- Few-shot:提供领域相关的查询示例
- 安全校验:执行前检查 SQL,防止注入和误操作
- 多步修正:SQL 执行失败时,把错误信息反馈给 LLM 让它修正
六、学习路径与资源推荐
基于我自己的经验,推荐以下学习路径:
阶段一:数学直觉(3-5 天)
别啃教科书,用视觉化的方式建立直觉:
阶段二:从零实现(5-7 天)
这是最关键的一步,没有捷径:
- Andrej Karpathy Let's build GPT from scratch 视频
- 阅读并跑通 nanoGPT(约 300 行核心代码)
- 在自己机器上训练一个字符级语言模型
- 理解每一行代码对应的数学公式
阶段三:阅读真实代码(5-7 天)
从玩具实现过渡到生产级代码:
- 阅读 HuggingFace Transformers 中 LLaMA 的实现
- 重点理解:RoPE、GQA(Grouped Query Attention)、KV Cache
- 对比简化实现和生产实现的差异
阶段四:推理与 Infra(持续)
- 部署 vLLM 推理服务,做压测对比
- 用 GPTQModel 做一次模型量化
- 阅读 DeepSpeed ZeRO 论文
- 阅读 Flash Attention 论文(理解 IO-aware 设计)
阶段五:Agent 实践(持续)
- 基于 ReAct 模式实现一个完整的 Agent
- 在实际场景中落地(NL2SQL、代码生成、文档问答等)
- 关注工程问题:可观测性、容错、成本控制
推荐资源清单
必读论文:
- Attention Is All You Need(Transformer 原始论文)
- Efficient Memory Management for LLM Serving with PagedAttention(vLLM)
- Megatron-LM(理解模型并行)
- DeepSpeed ZeRO(显存优化)
课程:
- Stanford CS149: Parallel Computing(GPU 编程基础)
- Stanford CS224N: NLP with Deep Learning
- Andrej Karpathy 的 YouTube 频道
书籍:
- Designing Data-Intensive Applications(分布式系统圣经,AI Infra 同样适用)
开源项目:
写在最后
AI 这个领域变化极快,但底层的数学和系统设计原理是稳定的。与其追逐每一个新框架和新模型,不如把 Transformer 的每一个组件理解透,把分布式系统的基本功打扎实。
对于工程师来说,最大的优势是我们知道如何把东西做出来。理解了原理之后,从 prototype 到 production 的路径,是我们最熟悉的领域。
不要等到完全准备好才动手。边学边做,边做边学,这是工程师学 AI 最有效的方式。