FDE Times 数据在招 FDE 职位 862▼55 近 7 天在招职位数的变化(同口径比较):不计入本周新开始追踪的公司的职位近 7 天新增 70在招公司 180支持远程 24%美国薪资中位数 $200k招聘最多 Palantir 95
ENVI

前线部署工程师(FDE)的专业媒体

书籍与课程

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

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

封面: Build a Large Language Model (From Scratch)
Build a Large Language Model (From Scratch) · Sebastian Raschka · 封面图片:Open Library
分享微博

要点速览

  • 全书 368 页,Manning 于 2024 年 9 月出版。第 2 至 7 章从文本数据和注意力讲起,依次是组装 GPT、预训练和两类微调。
  • 官方仓库中的代码在普通笔记本电脑上就能运行。KV 缓存在第 4 章的附加材料里,LoRA 在附录 E。
  • 这本书比预想的更难,也更耗时。第 2-4 章要精读,之后根据客户常见问题的类型选读第 6 章或第 7 章。
上方是醒目的大数字:不用 KV 缓存需要 220,100 次 token 处理,下面是一条横跨整个宽度的长条。再往下是使用缓存时的 1,200 次,按同一比例画成一条细条。两者都对应 1,000 个 token 的提示词外加生成 200 个 token。
对于 1,000 个 token 的提示词和 200 个生成 token,KV 缓存把 token 处理次数从 220,100 降到 1,200,因为之前 token 的 key 和 value 无需重新计算。每个新 token 仍需对所有已存储的 key 做注意力计算。来源:文中的粗略估算,依据 rasbt/LLMs-from-scratch 仓库第 4 章的 KV 缓存附加材料(Sebastian Raschka)。

设想客户问你:提示词变长时,为什么计算成本涨得比提示词长度还快?如果你只通过 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 经验”更有说服力。

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

这篇文章对你有帮助吗?

7 个信源
路线图上的下一篇 · 阶段 1: 基础认知一本 2013 年的统计教材,补上 FDE 最常跳过的一课2023 年的 Python 版 ISLP 讲如何在客户数据上诚实评估模型,有几章下周的项目就用得上。