跳转至

前言:把大模型学成一套可验证的工程能力

大模型领域的术语很多,更新也很快。对零基础读者而言,真正困难的往往不是某一个公式,而是不知道这些公式、代码和工程组件之间是什么关系:Python 为什么要学到类和生成器,矩阵乘法为什么会出现在注意力里,模型已经预训练好了为什么还要 RAG,LoRA 节省的究竟是哪部分显存,Agent 为什么不能简单理解成“让模型自己调用工具”。

本书围绕一个统一问题展开:给定数据、算力和业务目标,怎样构建一个可训练、可评估、可部署、可解释其边界的大模型系统? 十四章不是十四份彼此独立的知识清单,而是一条逐层展开的工程链路。

全书知识地图

图 0-1 全书知识地图:底层能力决定上层系统能否被正确理解、调试与评估。

第一章先建立 Python、张量、梯度和训练循环的直觉;第二、三章进入 Transformer、MoE、Llama 与 DeepSeek 的模型内部;第四至第七章讨论怎样把模型变成服务、RAG 和 Agent;第八至第十三章回到模型生产链,讲预训练、微调、偏好对齐、多模态、分布式训练与推理优化;第十四章把这些知识整理成简历证据、项目表达、手写代码和系统设计能力。

这本书适合谁

如果你只会一点 Python,甚至只运行过几个 Notebook,也可以从第一章开始。零基础不等于不需要基础,而是本书不会假设你已经理解张量形状、反向传播、注意力 mask 或 GPU 显存。每次引入新概念时,我们都会先说明它解决什么问题,再写输入输出、最小例子、常见失败和验证方式。

以下几类读者可以采用不同路线:

  1. 完全初学者:按章节顺序阅读。每章至少完成一个最小代码任务,不要跳过第一章和第二章。
  2. Python 开发者:第一章重点看张量、自动微分和训练闭环,之后进入部署、RAG 与 Agent,再回头补训练章节。
  3. 传统算法或深度学习学习者:可快速复习第一章,但应完成注意力、RoPE、LoRA 和 DPO 的手写代码。
  4. 准备求职的读者:先读第十四章了解能力证据,再按薄弱项回到对应章节;不要把面试题答案与真实项目经验混为一谈。

无论哪条路线,都建议保留一个实验仓库。真正学会的标志不是“看懂了”,而是能在没有正文提示时重新实现,能解释中间形状,能构造失败输入,也能说清实现没有覆盖什么。

第一次学习前的环境准备

本书的基础示例以 Python 3.10 及以上版本为目标。第一至第三章的大部分原理代码在 CPU 上即可运行;真实模型推理、微调和分布式训练通常需要 Linux、NVIDIA GPU、匹配的驱动/CUDA/PyTorch,以及足够的显存。没有 GPU 不妨碍理解核心原理,先用小张量和微型模型验证计算,再选择云端或实验室环境运行大模型。

建议每个项目使用独立虚拟环境。下面展示的是通用流程,不要把版本号永久照抄;安装 GPU 版 PyTorch 时应以官方安装页面给出的兼容命令为准。

python --version
python -m venv .venv

# Windows PowerShell
.venv\Scripts\Activate.ps1

# Linux / macOS
source .venv/bin/activate

python -m pip install --upgrade pip
python -m pip install numpy pytest

安装后先做健康检查,而不是直接下载几十 GB 权重:

import platform
import numpy as np

print("Python:", platform.python_version())
print("NumPy:", np.__version__)

try:
    import torch
    print("PyTorch:", torch.__version__)
    print("CUDA available:", torch.cuda.is_available())
    if torch.cuda.is_available():
        print("GPU:", torch.cuda.get_device_name(0))
except ImportError:
    print("PyTorch 尚未安装;第一章前半部分仍可使用 NumPy 学习。")

如果使用 Windows 学习训练与部署,常见选择是 WSL2 或远程 Linux 主机。路径、文件权限、换行符和多进程启动方式与原生 Windows 不同,遇到问题时应先确认命令究竟在哪个环境执行。涉及 CUDA 的错误要同时记录 GPU 型号、驱动、CUDA runtime 和 PyTorch build;只说“CUDA 版本是 12”通常不够定位问题。

本书的代码分成三层

  1. 原理层:只依赖 Python、NumPy 或 PyTorch,手写反向传播、注意力、RoPE、LoRA、DPO、量化等核心过程。原理代码刻意保持小,方便手算和测试。
  2. 框架层:使用 Transformers、PEFT、TRL、FastAPI、LlamaIndex、vLLM、Accelerate、DeepSpeed 等工具完成规范实现。框架会变化,理解接口与数据流比记住一条命令更重要。
  3. 工程层:讨论服务指标、数据版本、评估集、权限、灰度发布、可观测性、成本与故障恢复。几十行 Demo 不是生产系统,本书会明确两者之间还缺什么。

每次运行代码前,先回答四个问题:输入张量或对象是什么?输出是什么?哪部分状态会改变?用什么证据判断更好?如果答不出来,先不要急着调参。

怎样阅读公式和张量形状

公式不是装饰。阅读公式的顺序是:先确定变量含义和形状,再确认求和或归一化发生在哪个轴,最后把公式翻译成程序。以注意力为例:

$$ \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}+M\right)V $$ 假设 Q(B,H,Tq,Dh)K(B,H,Tk,Dh),那么 Q @ K.transpose(-2,-1)(B,H,Tq,Tk)。Softmax 应沿最后一个 Tk 轴归一化,表示每个查询位置对所有键位置的权重。再乘 (B,H,Tk,Dh)V,输出回到 (B,H,Tq,Dh)。mask M 必须能广播到分数矩阵;因果 mask 与 padding mask 解决的是两种不同问题。

遇到求和符号时,写出被消掉的轴;遇到期望时,问随机变量和采样分布是什么;遇到梯度时,问它对哪个标量求导。手算 2×2 或 2×3 的小例子,比一次性读十页推导更能建立直觉。

怎样阅读和调试代码

不要从安装完整训练框架开始。推荐遵循“最小输入—中间量—断言—扩规模”的顺序:

  1. 给函数构造可以手算的输入,先写出预期形状和数值范围。
  2. 打印或返回关键中间量,例如 mask、注意力权重、label、梯度和检索候选。
  3. 用断言固定不变量,例如概率和为 1、未来位置权重为 0、padding 标签为 -100、引用 id 必须存在。
  4. 再增加 batch、长度、混合精度和并发;每次只改变一个主要变量。
  5. 失败时保存最小样例,修复后加入回归测试。

模型与数据文件也可能带来安全风险。不要执行来源不明的自定义代码或反序列化不可信 checkpoint;不要把 API Key 写进 Notebook、截图或 Git 仓库。公开仓库提交前应检查历史记录,因为删除当前文件并不会自动删除旧提交里的密钥。

实验记录模板

建议为每次实验保留以下内容:

  • 任务与假设:想验证什么,为什么预期如此。
  • 数据:来源、许可、清洗、切分、版本和样本数量。
  • 环境:代码提交、依赖、硬件、随机种子和启动命令。
  • 配置:模型、优化器、学习率、批量、精度、序列长度和解码参数。
  • 结果:训练曲线、离线指标、延迟、成本和失败样例。
  • 结论:哪些证据支持或否定假设,尚有哪些替代解释,下一步只改什么。

一个简单的实验目录可以这样组织:

experiment-001/
  README.md          # 问题、运行方法、结论与限制
  config.yaml        # 可机器读取的配置
  environment.txt    # 依赖和硬件
  data_manifest.json # 数据版本与哈希
  logs/              # 原始日志
  results/           # 指标、曲线、失败样例
  tests/             # 回归测试

这种记录习惯会贯穿全书。它也是面试中区分“做过项目”和“看过项目”的关键:真正做过的人能解释取舍、指标定义、失败、恢复条件和结果边界。

关于论文、开源教材与视频

正文中的架构和算法结论优先核对论文原文与官方文档。GitHub 开源教材用于发现讲解顺序、练习题和可运行代码入口,本书会给出链接,但不会复制其受版权保护的正文。建议搭配阅读 Happy-LLM、LLMs-from-scratch、LLM-Universe、All-in-RAG、Hello-Agents、LLaMA-Factory 等公开项目,并核对各自许可证。

视频只作为辅助材料。观看时暂停并手写中间结果,不要把“播放完”当作掌握。原始文档中的私有课程、付费社群和不可公开访问的视频链接不会出现在本书;推荐视频优先使用可公开访问的 B 站入口。

安全、合规与知识边界

大模型可能生成错误内容;RAG 可能检索到过期或无权限证据;Agent 会放大工具权限带来的风险;训练数据还涉及隐私、版权和偏见。医疗、法律、金融等高风险场景必须有领域专家、数据治理、权限控制、人工复核和明确责任边界。本书示例用于学习,不构成专业结论,也不建议直接接入真实敏感数据。

当资料没有公开、实验无法复现或证据互相冲突时,科学的写法是明确“不知道”“尚未验证”或“根据现有证据推测”,而不是用流畅语言填补空白。大模型工程真正稀缺的能力,不是记住所有名词,而是把复杂问题拆成可验证的假设,用数据和代码说明取舍,并在证据不足时守住边界。