21. 实验资料与 Notebook
学习目标
- 选择正确 Notebook 与依赖
- 从干净内核执行全部单元格
- 按模板保存实验证据
前置知识
- 完成环境章节
本章产物下载并解压实验包,成功运行环境 Notebook。
本站只托管静态文档和下载文件,不运行用户代码,也不提供共享 Jupyter 服务。Notebook 应在本地、个人云环境或自有 GPU 实例中执行。
21.1 Notebook 下载
| 实验 | 资源要求 | 下载 |
|---|---|---|
| 环境自检 | CPU,约 1 分钟 | 00-environment-check.ipynb |
| 张量、梯度与优化 | CPU,约 1 分钟 | 01-tensor-autograd.ipynb |
| 因果注意力 | CPU,约 1 分钟 | 02-attention.ipynb |
| 训练最小 GPT | CPU 约 2~5 分钟,MPS/CUDA 可加速 | 03-tiny-gpt.ipynb |
| KV Cache | CPU,约 2 分钟 | 04-kv-cache.ipynb |
| 从零实现 LoRA | CPU,约 1 分钟 | 05-lora.ipynb |
| 训练并比较 Tokenizer | CPU,约 2 分钟 | 06-tokenizer.ipynb |
| RAG 检索与指标 | CPU,约 2 分钟 | 07-rag-retrieval.ipynb |
| 困惑度与成对评估 | CPU,约 1 分钟 | 08-evaluation.ipynb |
| Next-token Loss 与 Mask | CPU,约 1 分钟 | 09-language-modeling.ipynb |
| DPO Objective | CPU,约 1 分钟 | 10-dpo-objective.ipynb |
21.2 本地运行
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements-core.txt
python -m pip install jupyterlab
jupyter labNotebook 默认保存为未执行状态,避免把旧环境的输出误认为当前结果。首次运行应选择 Restart Kernel and Run All Cells;执行完成后检查断言、图表和资源使用记录。
21.3 独立代码运行顺序
# 自动微分
python code/01_tensor_autograd.py
# 手写注意力
python code/02_attention_from_scratch.py
# 训练 BPE
python code/03_train_bpe.py
# 从零训练 TinyGPT
python code/04_tiny_gpt.py train --steps 2000
python code/04_tiny_gpt.py generate --prompt "注意力"
# 手写 LoRA
python code/05_lora_from_scratch.py
# 真实模型 LoRA/SFT
python -m pip install -r requirements-finetune.txt
python code/10_prepare_sft_data.py --input data/sft_train.jsonl --output-dir artifacts/sft-data
python code/06_sft_lora.py --epochs 1
# 偏好数据校验与 DPO dry-run
python code/13_dpo_lora.py --data data/preference_train.jsonl --dry-run
# 困惑度评估
python code/07_evaluate_perplexity.py
# 最小 RAG 检索与离线评估
python code/08_rag_retrieval.py --query "KV Cache 为什么占用内存?"
python code/11_rag_pipeline.py --query "KV Cache 为什么占用内存?"
python code/08_rag_retrieval.py --evaluate
python code/12_evaluate_cases.py
# 完成 TinyGPT 训练后启动本地 API
python code/09_serve_tiny_gpt.py --checkpoint artifacts/tiny_gpt.pt实验验收不以命令全部执行结束为标准。每一步都需要回答三个问题:
输入和输出的张量形状是什么?
优化目标或系统瓶颈是什么?
采用什么对照实验证明该解释?能够稳定回答这三个问题,才说明实验已经产生可迁移的工程知识。
21.4 应该从哪个实验开始
| 当前状态 | 起点 | 下一步 |
|---|---|---|
| 从未使用 PyTorch | 00 → 01 | 数学基础与语言模型形状 |
| 会训练普通神经网络 | 02 → 03 | TinyGPT 完整闭环 |
| 只会调用模型 API | 02、04 | 推理、评估与服务 |
| 已做过 LoRA | 06、08 | 检查数据、对照与统计方法 |
| 正在做知识库 | 07 | 扩展真实 query,再连接生成模型 |
| 准备部署 | 04、08 + 服务章节 | 容量、错误路径和可观测性 |
不要一次运行全部实验再回头阅读。推荐节奏是:先预测输出和失败点,运行一个 Notebook,修改一个变量,记录结果,再进入下一章。
21.5 下载与运行故障
| 现象 | 处理 |
|---|---|
Notebook 找不到 data/ | 从压缩包根目录启动 Jupyter,或保持 notebooks/、code/、data/ 相对结构 |
| Kernel 与终端 Python 不同 | 在 Notebook 打印 sys.executable,重新选择虚拟环境 kernel |
| 模型下载很慢或失败 | 先完成不下载模型的 00~05、07~08;不要让网络阻塞原理主线 |
| MPS/CUDA OOM | 缩小 batch、context 和模型;记录实际配置,不静默更改 |
| 图表无输出 | 检查 Matplotlib backend;命令行测试出现非交互警告不影响断言 |
| 旧输出看似成功 | Restart Kernel and Run All Cells,禁止依赖乱序执行的变量 |
资源页验收:从全新目录解压后,只根据本页命令完成环境 Notebook;能够说明每个生成文件的位置,并用实验模板保存第一份报告。