# 读完这本 368 页的书，你能在白板上讲清 LLM

> 它不会把你变成研究员，但会带你在笔记本电脑上亲手写出注意力、微调和 LoRA。

原文: https://fdetimes.net/zh/books-courses/build-llm-from-scratch-raschka-review/

设想客户问你：提示词变长时，为什么计算成本涨得比提示词长度还快？如果你只通过 API 调用过模型，回答多半含糊其辞。如果你亲手写过注意力机制，两分钟就能在白板上画清楚。

Sebastian Raschka 的 *Build a Large Language Model (From Scratch)* 承诺的正是这一点。全书 368 页，Manning 于 2024 年 9 月出版（ISBN 9781633437166）。据 Manning 介绍，读者不依赖任何现成的 LLM 库，亲手写出一个基础模型，再把它改造成分类器和能遵循指令的聊天机器人。

如果你在为客户部署 LLM，这不是一本理论书。它帮你把所部署的东西弄明白，明白到能诊断故障、估算成本，并选对定制模型的方式。

## 一本用来敲代码的书，不是用来读的

官方仓库 rasbt/LLMs-from-scratch 的编排顺序，就是一个必须让模型真正跑起来的人会走的顺序。第 2 章处理文本数据，第 3 章讲注意力，第 4 章组装 GPT 模型，第 5 章是预训练，第 6、7 章讲两类微调。附录 E 讲 LoRA。

代码设计为在普通笔记本电脑上用合理的时间跑完，机器有 GPU 时会自动使用。Manning 对读者的要求只是中级 Python 水平和一定的机器学习基础。Raschka 还提供与本书配套的免费 YouTube 课程，卡在某一章时很有用。

## 为什么提示词长一倍，注意力成本变成四倍？

注意力一章要你亲手为每一对 token 计算分数。简单算一下：n 个 token 的序列会产生 n×n 的矩阵。1,000 个 token 时，矩阵有 100 万个单元格；2,000 个 token 时，有 400 万个。

仓库中第 4 章的附加材料实现了键值缓存（KV cache）。Raschka 解释说，缓存保存已经算好的 key 和 value 向量，生成新 token 时可以直接复用。

粗略估算一下差别：提示词 1,000 个 token，模型再生成 200 个 token。没有缓存时，每一步生成都要重新处理整个序列，长度从 1,001 到 1,200 个 token，累计 220,100 次 token 处理。

有缓存时，模型只处理一次这 1,000 个 token，之后走 200 步，每步只处理一个新 token，总共 1,200 次。这个数字并不是总计算成本。每个新 token 仍要对所有已存储的 key 做注意力计算，所以节省来自不必为之前的 token 重新计算 key 和 value，注意力计算本身并没有消失。

Raschka 也坦言了代价：代码更复杂，内存占用随序列长度增长。所以客户抱怨延迟时，你知道该问什么：提示词多长，输出多长，缓存开没开，机器还剩多少内存。

**要点:** 你不需要替客户训练模型，但必须知道它会在哪里出问题。

## 客户要的是标签，还是生成的文本？

第 6 章和第 7 章区分了两种不同的任务。面向分类的微调把模型变成打标签的工具；指令微调则教模型回应请求。客户想把支持工单自动分成五类，这是第 6 章的问题，用测试集上的准确率来衡量。

如果客户想要的是一个帮忙起草工单回复的助手，那就进入了第 7 章，评测难得多。输出越自由，越没有唯一的标准答案可供比对。所以在宣称微调后的模型优于原模型之前，你需要一套可重复的评分方法。

到了客户现场，先别急着谈微调，先写下他们的问题是打标签还是生成文本。答案既决定方法，也决定评测方式。

## 两个陷阱：浅尝辄止和急于微调

一位独立读者在 DEV Community 上写道，这本书需要投入大量精力，读完花的时间可能比你预想的长。不要只为了“知道”而读。只有亲手改变序列长度、看着屏幕上的矩阵尺寸随之变化，n×n 的计算才会真正印在脑子里。

第二个陷阱出现在你把书中所学带到客户那里时：一上来就做指令微调。客户需要的可能只是一个用准确率衡量的工单分类器，你却在第 7 章上耗掉整整一周。

了解书里没讲什么也有帮助。另一篇书评称它是一本从第一性原理出发、逐行讲解代码的指南，但也指出，有些主题，例如 top-p 采样和基于人类反馈的强化学习（RLHF），只是顺带提及或完全没有涉及。

## 应该按什么顺序读？

第 2 至 4 章要非常仔细地读，并把代码重新敲一遍。第 5 章预训练可以读快一些。然后根据客户常见问题的类型选读第 6 章或第 7 章，最后读附录 E 的 LoRA。

回报来得晚，但确实存在。DEV Community 那位读者说，读完之后，再看讲注意力或 KV 缓存的文章就轻松多了。对前线部署工程师（FDE）来说，这正是每周跟上新技术资料的能力。

对职业发展而言，别让所学躺在笔记本里吃灰。把一个用公开数据微调过的模型放到 GitHub 上，配一个页面写清你的评测方法和结果。简历上写一句“从零实现 GPT 风格模型，完成分类微调，并在测试集上评测准确率”，远比“具备 LLM 经验”更有说服力。

下次客户问模型为什么慢、微调为什么没带来提升，你不必再去猜。那些代码，你亲手写过。

**本周动手试试:**

- 克隆 rasbt/LLMs-from-scratch 仓库，在笔记本电脑上运行注意力那一章的 notebook，修改输入序列长度，并打印注意力矩阵的尺寸。
- 找一个公开的分类数据集，按第 6 章做微调，把测试集准确率记在 README 里。
- 开始读第 7 章之前，为一个文本生成问题写一张包含 20 个问题及评分标准的表格。

## 信源

- [Build a Large Language Model (From Scratch) – Manning Publications](https://www.manning.com/books/build-a-large-language-model-from-scratch)

- [Sebastian Raschka – Manning Publications](https://www.manning.com/authors/sebastian-raschka)

- [rasbt/LLMs-from-scratch – GitHub](https://github.com/rasbt/LLMs-from-scratch)

- [Books – Sebastian Raschka](https://sebastianraschka.com/books/)

- [Understanding and Coding the KV Cache in LLMs from Scratch – Sebastian Raschka](https://magazine.sebastianraschka.com/p/coding-the-kv-cache-in-llms)

- [Book Review: Build a Large Language Model (From Scratch) by Sebastian Raschka – DEV Community](https://dev.to/uponthesky/book-review-build-a-large-language-model-from-scratch-by-sebastian-raschka-1286)

- [Building an LLM from scratch – dpranantha](https://dpranantha.github.io/2025-04-10-building-llm-from-scratch)
