跳到主要内容

微调怎么做 — 一步训练在做什么,以及只训两千分之一为什么够

这一章讲三件事: 「训练」这个动作拆开来到底是哪四步(每一步都带具体的数); 一块两万多块的游戏显卡装不下一个 70 亿参数的模型,却怎么能微调它; 以及训完之后模型仍然太大太贵时,还有什么招。

它在全书链条里的位置: 第 10 章回答「该不该微调」,这一章回答「怎么微调」。 它也是全书唯一一章需要你真的懂一点模型内部的——但只需要懂四个动作。

1. 顶层全景:用一块 24 GB 的游戏显卡,微调一个 70 亿参数的模型

这一章的主走查是一件具体的事: 拿一块消费级显卡, 微调一个可以自己下载下来跑的 70 亿参数模型,做客服助手。

先说一个贯穿全章的单位:显卡上自带的那块内存叫显存, 模型要参与计算,就得先装进显存里——而这块地方有多大,是这一章一切约束的来源。 我们这块卡的显存是 24 GB

① 全量微调:全精度下至少要 28 GB 显存 → **装不下**

② 冻住原模型不动,只在注意力的两个部位各挂两个小矩阵,只训这些:
**70 亿里的三四百万个,大约两千分之一**

③ 再把原模型的那些数压成 4 位来存(光这一项省约 75% 内存),
**但计算时仍在更高精度下做**

④ 参数怎么填:秩 8、缩放 16(实际缩放 = 16 ÷ 8 = 2)、
只挂 query 和 value 两个部位、训练时随机关掉 10% 的连接

⑤ 1000 个例子、等效一次处理 4 条、每步挪 0.0002、整套过一遍
→ **跑 15 到 30 分钟**(全量微调要数小时到数天)

⑥ 训完的模型仍太大太贵,服务不起
→ 拿它当老师,给一批领域问题生成回答,再用这些问答对训一个小 5–20 倍的学生

图说:①→② 是「训得少一点」,②→③ 是「存得省一点」,⑤→⑥ 是「跑得便宜一点」。
**三件事各解决一个不同的瓶颈。**

但要看懂第 ② 步为什么行得通,得先弄清第 ⑤ 步那几个数在拧什么。 所以先讲训练本身。

2. 「训练的一步」到底在做什么:四个动作

这一节是这一章的地基。它只有四步,而且每一步都能拿一道具体的题走一遍。

先看现象:说是「学习」,到底谁在改什么

第 10 章说微调「真的去更新模型的那些数」。那些数是什么、怎么被更新的?

先把「那些数」认清楚。 模型内部干的事,归根到底是一堆「乘一下、再加一下」的算式1

乘上去的那个数就是权重(第 07 章讲关键词检索时已经用过这个词,是同一个意思: 一个乘数,越大越占分量)。

而加上去的那个数叫偏置,管的是「基线该挪到哪」—— 如果理想输出通常在 5 附近,偏置就能把起点从 0 挪到 5,让学习更容易。

合起来,书给的算式是:

输出 = (输入 × 权重) + 偏置

一个 70 亿参数的模型,说的就是这类数一共有七十亿个。

四个动作,拿一道具体的题走一遍

书把训练拆成一个反复重复的四步循环2下面这道题和数字是为演示编的, 但四步的名字和顺序是书里的:

一道分类题:这条客服留言是不是投诉?正确答案是「是」,记作 1。

① 前向传播 ── 数据从头到尾流过模型,吐出一个预测
它答:0.3 (意思是「三成把握认为是投诉」)

② 算损失 ── 拿预测和正确答案比,量出「错得多离谱」的那一个数
正确答案 1,它答 0.3 → 差 0.7
**这个数就是第 10 章那个损失,越低越好**

③ 反向传播 ── 反过来算:这 0.7 的错,每一个参数各担了多少责
参数 A:担责 +0.12,说明它把结果往下拽了 → 该往上调
参数 B:担责 −0.03,几乎没影响 → 基本不动
参数 C:担责 +0.31,是主要责任方 → 该大幅上调
**「每个参数担多少责、该往哪个方向调」这个量,叫梯度**

④ 更新参数 ── 每个数朝「错少一点」的方向挪一丁点
参数 C 从 1.840 挪到 1.846(挪多少由学习率定,见下一节)

然后换下一道题,从 ① 重来。

图说:**四步循环,重复几千几万次。** 书给的比方是扔飞镖:
扔一镖(①)→ 看偏了多远(②)→ 分析动作哪里不对(③)→ 调整瞄准(④)。
**这个比方到此为止,后文一律用四步的名字。**

四步的名字都写在上面那张图里,其中两个要单独说一句。

第 ① 步叫前向传播,叫这个名字是因为数据从输入端一路往输出端走,一步不回头你平时用模型答一句话,走的就只有这一步——后面三步只在训练的时候才发生。

第 ③ 步是这四步里唯一「反过来走」的,所以叫反向传播: 它从末端那个「错了 0.7」出发,倒着一路算回去,得出每个参数各担多少责。 它也是整件事在计算上最贵的一步——这正是「训练比使用贵得多」的由来。

而第 ③ 步算出来的那个量——「每个参数担多少责、该往哪个方向调」——叫梯度。

3. 那四个旋钮,各拧在这四个动作的哪一步上

这一节的关键:它们不是四个新概念,是刚才那四个动作的参数。 先各给一个名字。

第一个:训练不是一道题走一遍就更新一次的——它一次拿几道题走完前三步, 再更新一次参数;这几道题合起来算作一个批。

而一个批里放几道题,这个数量叫批大小,这就是第一个旋钮。

第二个:第 ④ 步每次挪多大一丁点,这个幅度叫学习率。

第三个:整套题从头到尾过几遍,这个次数叫轮数(第 03 章讲对话时用过「轮」这个字, 这里是同一个意思:数一整趟)。

第四个:攒好几批的梯度再一起更新一次,这个技巧叫梯度累积。

旋钮它拧的是第几步具体拧什么调过头会怎样
批大小拧 ①②③ 和 ④ 之间一次拿几道题走完前三步,再更新一次参数大:更新更稳,但更占内存;小:省内存,但每次更新更飘
学习率拧第 ④ 步每次挪多大一丁点大:可能一步冲过头;小:训得极慢
轮数拧整个循环整套题从头到尾过几遍多:学得更透,但会过拟合(第 10 章那件事)
梯度累积拧 ③ 和 ④ 之间攒好几个小批的责任账,再一起更新一次—— 这是省内存的技巧,用小批的内存拿到大批的效果

第四行值得单独说,因为主走查里用到了它:

想要「一次处理 4 条」的稳定性,但显存只够一次处理 1 条:

一次 1 条 → 走完 ①②③,把责任账记下来,**先不更新**
再来 1 条 → 走完 ①②③,责任账加进去,**还不更新**
再来 1 条 → …
第 4 条 → 责任账加完,**这时才做一次 ④ 更新**

效果 ≈ 一次处理 4 条,而峰值内存只有 1 条的量。

图说:这就是主走查第 ⑤ 步「一次 1 条 + 攒 4 次 = 等效 4 条」的确切含义。

4. 全量微调的账:为什么装不下

这一节给出第 ① 步那个数,并说清它为什么是硬约束。

「把整个模型的所有参数都参与更新」这种做法叫全量微调。它的账书给了3:

训一个 70 亿参数的模型,全精度下至少要 28 GB 显存,否则就得多张卡协同。

这个数有参照物: 一块消费级顶配游戏显卡的显存是 24 GB——差了 4 GB,装不下。 而数据中心那类卡才有 80 GB。

书列的三个缺点:内存要求巨大、算力昂贵、而且有第 10 章那个灾难性遗忘的风险4

所以问题变成:能不能不动那七十亿个数,还把行为改掉?

下一节要用到一个词:一张按行、按列排开的数字方阵,就叫矩阵。 模型内部那些权重,正是按这样一张张方阵组织起来的。

5. 低秩适配:冻住原模型,只挂两个瘦矩阵

这一节是全章机制最深的一处。书只给了一个比方,我们把机制补齐。

书给的做法:三步

① 冻住原模型(也叫基础模型)——它一个数都不改; ② 在特定部位加两个小矩阵; ③ 只训这两个小矩阵,其余全不动。5

书配的比方是:与其重写整本书,不如只贴几张写着改动的便利贴。 这个比方到此为止——它说清了「为什么便宜」,说不清「为什么够用」。

这套做法叫低秩适配,英文缩写叫 LoRA——你在任何一份微调工具的文档里都会见到它

「低秩」低在哪:书没讲,我们补

先要问一个问题:一个「小矩阵」怎么就能表达出对一个巨大矩阵的改动?

拿一张具体的方阵来看: 一个 4096 行 × 4096 列的权重矩阵, 里面有 4096 × 4096 ≈ 1677 万个数

关键的想法是:你想对这张大方阵做的改动,不必自己也是一张同样大的方阵。

你想给这张 4096 × 4096 的大方阵加上一个「改动量」。

笨办法: 改动量本身也是 4096 × 4096 → 又是 1677 万个数要训

低秩的办法:把改动量拆成**两个瘦矩阵相乘**:
A:4096 行 × **8** 列 ← 只有 32768 个数
B:**8** 行 × 4096 列 ← 只有 32768 个数
A × B 的结果:仍然是一张 4096 × 4096 的方阵 ✓

要训的数:32768 + 32768 = **65536 个**
对比原来的:1677 万个
比例:65536 ÷ 16777216 ≈ **0.39%**

图说:中间那个「8」就是**秩**。它越小,这两个矩阵越瘦、要训的数越少,
能表达的改动也越受限。**这就是「低秩」低在哪:低在中间那一维上。**
**这段推导是我们补的**,书只给了「贴便利贴」这个比方;
两个瘦矩阵相乘这一层,我们从这套工具的源码里核实过[^6]。

走查第 ② 步:把这笔账算到整个模型上

这个 70 亿参数的模型:32 层,每层里 query 和 value 两个部位各是一张 4096×4096 的方阵
(层数和边长这两个数不在书里,来自通用知识)

每挂一个适配器: 4096 × 8 + 8 × 4096 = 65,536 个数
一共挂几个: 32 层 × 2 个部位 = 64 个
合计要训: 64 × 65,536 = **4,194,304 ≈ 419 万个**

书给的说法: 「大约三四百万个,而不是七十亿个」 ✓ 对得上

比例: 419 万 ÷ 70 亿 ≈ **两千分之一**

图说:**这笔换算是我们算的**,书只给了「三四百万」和「70 亿」这两个数。
**算出来能和书对上,说明我们对机制的理解是对的**——这就是补机制的意义。

挂上去的那两个小矩阵,行内叫适配器——这个词你在配置文件和文档里都会看到。

效果:这样够用吗

书给的数6:

只训全部参数的 0.1% 到 1%,内存用量降到十分之一, 而效果仍能拿到全量微调的 95% 以上。

注意这里有两个不同的数,别混:

它说的是什么
0.1%–1%这一类方法通常训的量级
两千分之一(约 0.06%)本章这个具体配置落在哪里(秩 8、只挂两个部位)

后者比前者还小,因为它只挂了两个部位、秩只取了 8。 把秩调大、把更多部位挂上,比例就会往 0.1%–1% 那个区间走。

6. 再压一层:4 位存,高精度算

这一节讲主走查第 ③ 步,它解决的是另一个瓶颈:原模型本身也要占显存。

先看现象:冻住不训,不等于不占地方

上一节把「要训的数」从 70 亿降到了 419 万。可那 70 亿个数还得装进显存里 ——前向传播每一步都要用到它们。

做法:三层压缩叠在一起

书给的三条7:

做法具体是什么省多少
① 4 位量化把权重从 16 位或 32 位精度降到 4 位来存光这一项省约 75% 内存
② 一种更聪明的压法压缩之后仍尽量保住最重要的那些权重信息(书叫它 NF4 格式)保住准确度
③ 双重量化连「怎么压」的那套配置参数本身也再压一遍书的比方:像给一个压缩包再压一次

「量化」这个动作第 06、08 章已经用过两次了(压模型、压向量),这里是第三次:压权重—— 同一个动作,同一个定义,只是作用对象不同。

关键的一句:存的时候是 4 位,算的时候不是

训练时权重虽然存成 4 位,计算却在更高的精度下进行,以保持稳定与准确。8

显存里: 权重按 4 位存着 ← 省地方
要算了: 临时还原成高精度,再参与计算 ← 保准确
算完了: 结果照常;权重还是 4 位躺着

图说:**这是「省内存」和「保精度」的分工,不是折中。**
它成立的前提是「还原」这一步够快——而这正是这套做法能实用的技术核心。

这套做法(在低秩适配之上再加这三层压缩)叫 QLoRA,Q 就是量化的意思。

它换来了什么

一块 24 GB 的消费级显卡上微调 70 亿参数的模型; 一块 80 GB 的卡上微调 700 亿参数的模型——而这以前只有大型数据中心做得到。9

这句话是这一章的落点:它把「微调」这件事从机构级别降到了个人级别。

7. 一条反直觉的警告:省内存的做法,遗忘风险可能更高

书特意用「与常见看法相反」开头写了这一段,而它非常重要10

直觉是:全量微调动了七十亿个数,风险大;只动四百万个,风险小。

书说:在某些场景下,低秩这类做法的遗忘风险比全量微调更高。

为什么

全量微调: 七十亿个数都在动
→ 新知识可以摊薄到全部参数上
→ 每个数只挪一点点

低秩适配: 只有那四百万个在动
→ 新行为的全部压力都压在这一小撮上
→ **如果这一小撮恰好承载着某项通用能力,那项能力就被顶掉了**

图说:**这就是「更高风险」的机制:压力集中,而不是分散。**
这段解释是我们补的;书只给了结论和缓解办法。

书给的缓解办法:在训练数据里掺进一些原领域的「提醒」样例—— 让它在学新东西的同时,不断被提醒旧本事还要留着。

判断(我们的,不是书里的): 这条警告的实用价值在于它推翻了一个很自然的省事思路: 「反正只训 0.1%,应该不会把模型搞坏,先训了再说。」 实际上,「只训一小撮」恰恰意味着你没有余地——被顶掉的东西没有地方分摊。 所以低秩微调之后,通用能力的回归测试不能省。 如果错,会错在: 如果你挂适配器的位置恰好和通用能力关系不大 (比如只挂在最后几层),那这条风险会小很多。 判据是:训完之后拿一批和你的任务完全无关的题跑一遍,看它退步了没有。

8. 一条硬禁令:绝不要在「已经被压过并存下来」的模型上微调

这一节讲一条会让你白训一遍的坑,而书用加粗的「重要」标出了它。

禁令本身

生产上可以部署压过的模型,但微调永远要从全精度或半精度的基座开始。 绝不要微调一个「已经被量化并以那种格式保存下来」的模型。11

理由说得很清楚,而且是可以推的

压缩会在权重里留下小的舍入误差

你在这些**已经略微偏了**的值上继续训

第 ③ 步反向传播算出的「该往哪调」,是基于这些偏了的值算的

第 ④ 步的每一次更新,**都在这些不准之上再叠一层不准**

训练的每一步都在累积误差,而不是纠正它

结果:比从全精度权重微调出来的模型明显更差

图说:**关键在倒数第二行。** 正常训练里误差会被一步步纠正;
而这里的误差在训练开始之前就已经存在,**优化的过程反而把它固化了。**

那上一节那套 4 位压缩为什么可以

这是最容易混的地方,书专门澄清了:

这一章那套做法被禁的那种
什么时候压加载模型的时候临时压压完之后存成文件,以后都用这个文件
原始权重没被改过,压的只是内存里那一份已经被改掉了
训练时算的时候还原成高精度就在压过的值上继续训

一句话:一个是「装载时压,算时还原」,一个是「压完就那样了」。它们不是一回事。

9. 走查第 ④⑤ 步:那六个参数各填什么

书把这套配置的六个参数逐个解释了,而它们正好是主走查的最后两步12

参数填的值它是什么
8第 5 节那个「中间那一维」。4–8 省内存但学习容量有限;16–32 能抓更复杂的模式,更耗资源
缩放因子16控制这些改动对原模型的影响有多强。实际缩放 = 缩放因子 ÷ 秩 = 16 ÷ 8 = 2
挂在哪些部位query 和 value 两个投影矩阵书的理由:这两个部件帮模型聚焦到相关信息上,微调它们通常收益最好
随机关掉多少连接0.1(即 10%)训练时随机让一成的连接不参与,防止它把例子背下来而不是学会
训不训偏置不训第 2 节说过偏置管「基线挪到哪」;对微调这类适配任务,它通常不如权重重要
任务类型标准的「预测下一个词元」就是第 02 章那个动作

书还给了一条更新的最佳实践: 想更逼近全量微调的效果, 可以把模型里所有那类「乘一下再加一下」的部位都挂上(书里管它们叫线性层, 再加四五个部位),内存代价不大;先从 query 和 value 起步,不够再扩13

训练配置的实际值

一次处理: 1 条
攒几次再更新: 4 次 → **等效一次处理 4 条**(第 3 节那个技巧)
整套过几遍: 1 遍
每步挪多大: 0.0002 ← 比全量微调高
精度: 半精度

为什么学习率比全量微调高:**因为要更新的参数少得多,需要更强的信号才推得动。**

结果:1000 个例子,在一块 24 GB 的消费级显卡上跑 **15 到 30 分钟**
—— 而全量微调「可能要数小时到数天」。

图说:这些数是书里的原样。**参照物就在最后一行:15 分钟 vs 数天。**

一条容易白训一遍的细节

训练数据必须按这个模型家族要求的格式写。 书举的例子是某个开源模型家族要求把指令包在一对特定的符号之间、末尾再加一个表示结束的符号14

书的原话:用错格式会显著恶化微调效果。而每个模型家族的结构都不一样。

这条和第 10 章那条「格式必须一致」是两回事: 那一条说的是你自己的例子之间要一致;这一条说的是要和模型的要求一致。

10. 训完还是太大:把它教给一个小模型

这一节讲主走查的最后一步,它解决的是部署这一端的问题。

先看现象

你微调出来的模型很准,但它太大、太贵、太慢,按规模服务不现实15

做法:让大模型当老师

① 准备一批领域问题
② 让那个又大又准的模型(老师)把它们全答一遍,把回答记下来
③ 拿这些「问题 → 老师的回答」当训练数据,去微调一个小模型(学生)
④ 学生学会在同样的输入下产出同样的输出

图说:**注意第 ③ 步用的就是第 10 章那套微调,数据来源换成了老师的输出。**

这套做法叫蒸馏,全称是知识蒸馏。

书讲得最好的一处:现代做法比经典做法简单得多

(下面这段引文里有个词先说清:让程序从数据里自己找规律,而不是靠人一条条写死规则 ——这一整个领域叫机器学习。 本书讲的这类模型,是它底下的一支。)

(还有一个词也先说清:不公开内部、只能通过接口调用的模型叫闭源模型, 和第 03 章那个「开源」正好相对。引文里「你根本拿不到它的内部概率」说的就是这类模型。)

经典机器学习里的蒸馏,是让学生去匹配老师内部那份「软概率」输出。 但对大型闭源模型,你根本拿不到它的内部概率。好在你也不需要。 现代的做法简单得多:学生只学着模仿老师最终写出来的那段话。 不要内部概率,不要温度缩放,不需要任何特殊权限。16

「学生只学最终输出」这种做法叫序列级蒸馏(序列指的就是老师写出来的那一串词元)。

这一段值得停一下,因为它拆掉了一个门槛: 经典做法要求你能看到老师模型的内部,那意味着你必须自己拥有那个模型; 而现代做法只要求你能调用它、能把它的回答存下来——这是任何人都能做到的。

换来什么:三个数

换来具体是什么
成本学生通常比老师小 5 到 20 倍,内存和算力需求都低得多
速度小模型答得快,对聊天这类实时应用是关键
灵活能跑在老师跑不了的普通硬件上——小显卡、只有处理器没有显卡的机器,甚至装在现场的小设备(行内叫边缘设备)

「小 5 到 20 倍」这个数有参照物: 一个 70 亿参数的老师, 学生大约在 3.5 亿到 14 亿参数这一档——而这一档是能跑在一台笔记本上的。 (这个换算是我们算的,书只给了倍数。)

书给的四条实践,以及它们各自的理由

实践理由
老师要够强学生学不到老师没演示过的东西
样例要多样老师只答过一类问题,学生就只会一类
频繁评测不只看准确率,还要看语气和格式——这些正是微调想留住的东西
领域变了就重来重新生成数据、更新学生

11. 作者的判断与证据

书里给了证据的:

说法证据是什么
全量微调 70 亿参数要至少 28 GB 显存一个具体的数,可以和 24 GB 的消费级卡直接对照
只训 0.1%–1%,拿到 95% 以上的效果一组具体的比例,但书没有给测试条件和任务
具体配置落在「三四百万而不是 70 亿」一个具体的数。我们独立算了一遍,对得上
4 位存省约 75% 内存一个可以自己推的数(4 位相对 16 位,正好省四分之三)
1000 个例子跑 15–30 分钟一个具体的时间,配了「全量要数小时到数天」的参照
不能在已压过的模型上微调一条完整的因果推导(舍入误差 → 在偏值上训 → 每步累积)
蒸馏出的模型小 5–20 倍一个倍数区间,书没给测试条件

作者的推测或没给证据的:

说法它是什么
「低秩方法遗忘风险可能更高」一条反直觉的断言,没有实验数据。 但它有机制上的道理(我们在第 7 节补了)
秩取 4–8 / 16–32 的分档经验值
「挂 query 和 value 收益最好」一句经验判断,没有对照数据
「所有线性层都挂上,内存代价不大」一句「最新最佳实践」,没有来源也没有数据

判断(我们的,不是书里的): 这一章最该带走的不是任何一个参数值, 是第 5 节那笔账本身:一个巨大的改动可以被表达成两个瘦矩阵相乘。 这个想法不只用在微调上——它是「用很少的东西表达很大的东西」这一类做法的通用形状, 而第 08 章那三种向量压缩、第 06 章那个「训完再截断」,走的是同一条路。 认出这个形状,比记住秩取 8 还是 16 有用得多。 如果错,会错在: 如果某类任务需要的改动本质上不能被两个瘦矩阵表达 (比如要改的东西遍布模型各处、彼此独立),那低秩这条路在这类任务上就会明显不如全量微调。 判据是:把秩从 8 调到 32,效果有没有继续涨——如果一直在涨,说明它还没表达够。

12. 边界与局限

  • 书完全没讲「低秩」低在哪。 只有「贴便利贴」这个比方。 第 5 节那段机制是我们从这套工具的源码里核实之后补的—— 书自己在参考文献里列了原论文的编号(arXiv:2106.09685),但正文一个字没展开;

  • NF4 那种「聪明的压法」只有名字。 为什么它对模型里的数特别合适, 书在别处提了一句「按正态分布分配区间,而模型里的值大多接近零」,但没有展开;

  • 没有讲怎么评估微调后的模型。 训完了怎么知道它比原来好?这一章一个字没提;

  • 没有讲适配器怎么部署。 训出来的那两个小矩阵是单独存着按需加载,还是合并回原模型? 这是实际部署时第一个要决定的事,书没提;

  • 「遗忘风险可能更高」没有量化。 高多少、什么场景下会发生,书只给了「某些场景」;

  • 蒸馏那一节没有讲怎么选学生模型的大小。 5 倍还是 20 倍?按什么判断?书没说;

  • 具体的模型名和工具名不要记。 这一章提到的模型家族、格式标记、库名, 两年之内会换一批——要记的是那四个动作、那笔矩阵的账、和那三条禁忌。

13. 可带走的

全章那条走查,一行写完: 一块 24 GB 的显卡 + 一个 70 亿参数的模型 → 全量微调要 28 GB,装不下 → 冻住原模型,每个部位挂两个瘦矩阵 (4096×8 和 8×4096,每个适配器 65,536 个数;32 层 × 2 个部位 = 419 万个, 约两千分之一——这笔换算是我们算的,和书给的「三四百万」对得上)→ 再把原权重压成 4 位存、算时还原成高精度 → 参数填:秩 8、缩放 16(实际 2)、挂 query 和 value、随机关掉 10% → 1000 个例子、一次 1 条攒 4 次、每步挪 0.0002、过一遍 → 15 到 30 分钟跑完 (全量要数小时到数天)→ 训完仍太大,拿它当老师蒸馏出一个小 5–20 倍的学生。

  1. 模型内部的算式就一句:输出 = (输入 × 权重) + 偏置。 权重是乘数,偏置是基线;七十亿参数说的就是这类数有七十亿个;
  2. 训练的一步是四个动作: 前向传播出预测 → 算损失(错得多离谱)→ 反向传播(每个参数担多少责,这个量叫梯度)→ 更新参数(朝错少一点的方向挪一丁点);
  3. 那四个旋钮不是新概念,是这四个动作的参数: 批大小拧「几道题更新一次」、学习率拧「挪多大」、轮数拧「整套过几遍」、 梯度累积拧「攒几批再更新」;
  4. 全量微调 70 亿参数要至少 28 GB 显存,而消费级顶配是 24 GB——差一点点,装不下;
  5. 低秩适配的做法三步:冻住原模型 → 挂两个小矩阵 → 只训这两个;
  6. 「低秩」低在中间那一维: 一张 4096×4096 的改动量,拆成 4096×8 和 8×4096 两个瘦矩阵相乘, 要训的数从 1677 万降到 6.5 万;
  7. 两个比例别混:0.1%–1% 是这一类方法的量级,两千分之一是本章这个具体配置;
  8. 4 位存 + 高精度算是分工,不是折中——存的时候省地方,算的时候还原;
  9. 反直觉的一条:只训一小撮,遗忘风险可能比全量更高,因为压力集中而不是分散。 缓解是在训练数据里掺进原领域的提醒样例;
  10. 硬禁令:绝不在「已经压过并存下来」的模型上微调。 误差在训练开始前就存在,每一步都在累积它而不是纠正它。 而「加载时临时压、算时还原」是另一回事;
  11. 训练数据必须符合这个模型家族要求的格式——这和「你自己的例子之间要一致」是两回事;
  12. 蒸馏:让大模型答一批题,拿这些问答对训一个小 5–20 倍的学生;
  13. 现代蒸馏只学最终输出,不需要老师的内部概率——这拆掉了「必须自己拥有那个模型」这道门槛。

14. 原文地图

主题原书章原文位置
权重与偏置、那条算式Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:712(搜「The main parameters that transform inputs」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:719(搜「(input × weight) + bias」)
训练四步Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:761(搜「Forward Pass」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:771(搜「Parameter Update」)
梯度的定义与扔飞镖的比方Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:777(搜「Gradient」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:796(搜「learning to play darts」)
四个旋钮Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:783(搜「Batch Size」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:792(搜「Gradient Accumulation」)
全量微调 28 GBChapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:501(搜「28GB of GPU VRAM」)
低秩适配三步与便利贴Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:522(搜「sticky notes」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:526(搜「freezes」)
0.1%–1% 与 95% 效果Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:531(搜「0.1% to 1%」)
三层压缩与「4 位存、高精度算」Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:535(搜「4-bit Quantization」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:544(搜「Double Quantization」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:548(搜「calculations happen in a」)
24 GB 与 80 GB 两个门槛Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:552(搜「consumer-grade GPU with」)
遗忘风险可能更高Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:557(搜「Contrary to common belief」)
不能在已压过的模型上微调Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:638(搜「always fine-tune」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:645(搜「compounds those inaccuracies」)
六个参数Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:728(搜「rank dimension」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:735(搜「scaling factor」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:744(搜「randomly disables」)
三四百万而不是七十亿Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:751(搜「3-4 million parameters」)
训练配置与 15–30 分钟Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:805(搜「per_device_train_batch_size」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:869(搜「15-30 minutes」)
格式用错会显著恶化效果Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:850(搜「Using the wrong format」)
现代蒸馏与序列级蒸馏Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:990(搜「soft」) · text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:996(搜「sequence-level distillation」)
蒸馏的三个收益Chapter 5: Fine-Tuning LLMstext/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:1013(搜「5–20× smaller」)

Footnotes

  1. 出处:「Chapter 5: Fine-Tuning LLMs」第 712 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:712,搜「The main parameters that transform inputs」)与第 719 段(同文件 :719,搜「(input × weight) + bias」)。偏置那个「把基线从 0 挪到 5」的例子在第 722 段(同文件 :722,搜「typically around 5」)。

  2. 出处:「Chapter 5: Fine-Tuning LLMs」第 761 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:761,搜「Forward Pass」)起的四步,梯度的定义在第 777 段(同文件 :777,搜「Gradient」),扔飞镖的比方在第 796 段(同文件 :796,搜「learning to play darts」)。上面那道分类题和 0.3 / 0.7 / 1.840 这些数是为演示编的,书没有给算例。

  3. 出处:「Chapter 5: Fine-Tuning LLMs」第 501 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:501,搜「28GB of GPU VRAM」)。「消费级顶配 24 GB」这个对照来自书自己在第 552 段(同文件 :552,搜「consumer-grade GPU with」)给的数。

  4. 出处:「Chapter 5: Fine-Tuning LLMs」第 503 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:503,搜「Expensive computation costs」)。

  5. 出处:「Chapter 5: Fine-Tuning LLMs」第 522 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:522,搜「sticky notes」)与第 526 段(同文件 :526,搜「freezes」)。

  6. 出处:「Chapter 5: Fine-Tuning LLMs」第 531 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:531,搜「0.1% to 1%」)。「本章这个具体配置落在两千分之一」是我们按第 750 段(同文件 :750,搜「3-4 million parameters」)那个数算的。

  7. 出处:「Chapter 5: Fine-Tuning LLMs」第 535 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:535,搜「4-bit Quantization」)、第 541 段(同文件 :541,搜「Smart Compression」)与第 544 段(同文件 :544,搜「Double Quantization」)。书对量化给的定义是「降低存储模型权重所用数字的精度」,并配了「压缩高分辨率图片」这个比方——和我们在第 06、08 章用的是同一个定义。

  8. 出处:「Chapter 5: Fine-Tuning LLMs」第 548 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:548,搜「calculations happen in a」)。

  9. 出处:「Chapter 5: Fine-Tuning LLMs」第 552 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:552,搜「consumer-grade GPU with」)与第 554 段(同文件 :554,搜「single 80GB GPU」)。

  10. 出处:「Chapter 5: Fine-Tuning LLMs」第 557 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:557,搜「Contrary to common belief」)。「压力集中而不是分散」这个解释是我们补的;书只说了「如果那些参数恰好关键,通用能力就可能丢掉」。

  11. 出处:「Chapter 5: Fine-Tuning LLMs」第 638 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:638,搜「always fine-tune」)与第 643 段(同文件 :643,搜「compounds those inaccuracies」)。书用加粗的「Important」标出了这一条。

  12. 出处:「Chapter 5: Fine-Tuning LLMs」第 728 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:728,搜「rank dimension」)、第 735 段(同文件 :735,搜「scaling factor」)、第 744 段(同文件 :744,搜「randomly disables」)与第 746 段(同文件 :746,搜「not training bias parameters」)。

  13. 出处:「Chapter 5: Fine-Tuning LLMs」第 740 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:740,搜「recent best」)。

  14. 出处:「Chapter 5: Fine-Tuning LLMs」第 846 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:846,搜「delimit the instruction」)与第 850 段(同文件 :850,搜「Using the wrong format」)。

  15. 出处:「Chapter 5: Fine-Tuning LLMs」第 985 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:985,搜「serving that model at scale」)。

  16. 出处:「Chapter 5: Fine-Tuning LLMs」第 990 段(text/08-ch05-chapter-5-fine-tuning-llms-for-improved-performa.txt:990,搜「soft」)与第 994 段(同文件 :994,搜「sequence-level distillation」)。三个收益在第 1013 段(同文件 :1013,搜「5–20× smaller」)。四条实践在同一节末尾。