第 23 节 · Small Model:小模型不是缩水的大模型¶
同一个 2B 和 4B 放在一张卷子上,做对的题一样多。这一节要算的是小模型这笔账:「小」不是「弱」,是「便宜」。
一、同一张卷子,做对一样多的题¶
先上现场。
2026 年 8 月 23 日,我把 Qwen3.5 的 2B 和 4B 两个尺寸都做了 4-bit 量化,放在同一台机器上(M4 Max、48G 内存),喂同一套 8 项任务,一次跑完。
同题、同机、同量化精度。第一行结果就反直觉:
| 指标 | 2B | 4B |
|---|---|---|
| 客观质检通过 | ⅞ | ⅞ |
| 干净输出(无前言、直给格式) | 6/8 | 6/8 |
八项任务,两个尺寸都过 7 项、挂 1 项——而且挂的是同一项。
这 8 项不是拿排行榜上的题凑的,是我机器上真正要干的活:写代码、抽结构化 JSON、意图分类、工具调用、按指定格式出表格、逻辑推理、中文总结,外加一道数学。代码那项看"能不能跑",JSON 那项看"合不合法",分类看"选项对不对"——都是我的程序能直接判对错的客观标准。
在这张贴近真实工单的卷子上,多出来的那 2B 参数,没有换回更多的对题。
图 A-23-1(待出):同一套 8 项任务,2B 与 4B 的逐项打分明细
二、「小」不是「弱」,是「便宜」¶
既然做对的题一样多,那差距在哪?在账上。
| 指标 | 2B | 4B | 差距 |
|---|---|---|---|
| 峰值内存 | 1,989 MB | 3,255 MB | 4B 是 1.6 倍 |
| 直答吞吐 | 250.5 t/s | 131.4 t/s | 2B 快 1.9 倍 |
| 思维模式吞吐 | 约 287 t/s | 约 145 t/s | 2B 快约 2 倍 |
| 冷启动加载 | 151 秒 | 151 秒 | 持平 |
这张表比上一张更能说明问题。
内存那一行,直接决定"一台机器上能同时站几个模型"。1,989 MB 和 3,255 MB 的差别不是"快一点慢一点",是同一条内存上,2B 能摆下的班底比 4B 厚六成。吞吐更直接:250.5 对 131.4,同一个回答,2B 攒字的速度快了将近一倍——落到用户身上,就是"卡不卡"。
冷启动那一行是个意外,也是个诚实的注脚:两者都是 151 秒。也就是说,这 151 秒不是"模型小"要付的代价,是本地推理框架第一次加载权重时的固定开销(反量化加编译),跟模型多大没关系。换成小模型,这一段一秒都省不下来。想省它只有一条路:让模型常驻,别反复冷启——这是后面的章节才展开的事。
拿机队来打比方:同一条航线,窄体机和宽体机都能准点飞到,乘客体验没差别。但窄体机省油、不占大停机位、周转快。机队怎么编,从来不是"谁更先进"的问题,是"这条航线该派谁"的问题。你不会拿宽体机去飞所有航线,正如你不该拿 4B 去干所有的活。
所以这句话要说精确:小模型的能力够用,而在内存、吞吐这两项上占优(延迟可由吞吐推得);冷启动那一项两者持平(同为 151 秒),既不是它的优势,也不是它的劣势。当一份活 2B 就能干到 ⅞,多掏的那 1.6 倍内存和 1.9 倍时间,换回来的是零。
图 A-23-2(待出):同题同分,两种吨位的代价对照——内存 1.6 倍、吞吐 1.9 倍
三、但小模型有自己的短板¶
上面那张 8 项表里挂掉的那 1 项是数学,得单独拎出来——因为它是本节最不体面、也最该记住的一段。
一道等差数列题,直答模式下:
- 2B 答:第 20 项 = 100,和 = 400 —— 完全错
- 4B 答:第 20 项 = 58,和 = 570 —— 错,只差一位(答案是 59 / 610)
4B 错得更"接近",但接近不叫对。这件事的结论不是"4B 比 2B 强",而是:在 4-bit 量化下,纯算术这种活,两个尺寸都不可靠。
那开思维模式呢?两个都能算对——代价是推理过程超过 1,200 个 token 还没写完,同一道题 2B 要 4.2 秒、4B 要 8.3 秒。而直答模式解这道题只要大约 20 个 token、不到 0.3 秒。同一道题,token 差了 60 倍,时间差了十几到二十几倍。
这就是小模型的真实短板:它不是"答不出",是你不逼它慢下来想,它就太快地答错。直答快而不可靠,思维慢而可靠——这个取舍得按任务切:涉及数值计算的,开思维模式、或者换更高精度的量化;其余绝大部分活,默认直答就够了。
还有一句必须说在前面,免得这句结论被读大:"2B 与 4B 在 8 项里 7 项打平",范围就到这里。 我手上压根没有"大模型 vs 小模型同任务对照"的数据,只有这两个尺寸之间的实测。一句超出证据边界的话,比一个答错的数更危险。
四、把大模型压进小模型,账要重新算¶
前面几节讲的是怎么把一个模型训出来、怎么把它对齐;这一节要讲的是更贵的那条路:把大模型的能力,压进一个我自己训的小模型里。
这条路我走得很惨。同一个任务(意图分类),两代基座合起来一共微调 8 次:7 次 No-Go,只有 1 次 Go。
先把闸门的三条线写死——粗分类精度 ≥ 0.90、细分类精度 ≥ 0.85、输出能被正确解析的比例 ≥ 0.90。三条一起过,才算 Go。
第一代基座(0.5B)前后两版,最好的是这版:
| 指标 | 成绩 | 线 | 判定 |
|---|---|---|---|
| 粗分类 | 93.83% | ≥ 90% | 过 |
| 细分类 | 83.33% | ≥ 85% | 差 1.67 个点 |
| 解析率 | 100% | ≥ 90% | 过 |
就差这 1.67 个点,这个模型就上不了。它不是打分制,是闸门制——一条线没过,前面所有的好成绩都不作数。
然后我换 0.8B 的基座重来。首战更难看:粗分类 84.04%、细分类 55.85%。这里还有个残酷的对照——如果我不设零样本基线,很可能会误以为"微调把模型教会了";可基线(未微调的基座模型)在这件事上的粗分类精度是 0%,它连输出格式都拼不出来。
接下来这六轮(首战即第 1 轮),把每一轮的改动和成绩摆在一起,惨状一目了然:
| 轮次 | 这一轮动了什么 | 粗分类 | 细分类 | 解析率 |
|---|---|---|---|---|
| 1 | 首战(用 Alpaca 格式) | 84.04% | 55.85% | 99.5% |
| 2 | rank 16→32,同时扩到 MLP 层 | 68.62% | 31.91% | 89.36% |
| 3 | 加上 EOS 训练 | 60.64% | 47.87% | 79.79% |
| 4 | 格式换成 ChatML | 87.77% | 45.74% | 100% |
| 5 | 训练从 3 轮加到 5 轮 | 83.51% | 40.43% | 100% |
| 6 | rank 保持 16,只把作用范围扩到 MLP 层(并回到 3 轮) | 93.09% | 88.83% | 100% |
表注:表中第 2–5 轮为验证集成绩,最后一行(第 6 轮)为测试集成绩。
逐行读:
- 第 4 轮把编码格式从 Alpaca 换成 ChatML,解析率直接从 79.79% 拉到 100%,粗分类从 60.64% 跳到 87.77%。格式不是小事——格式不对,模型输出得再对,机器也读不出来。
- 第 5 轮把训练从 3 轮加到 5 轮,反而掉了——在 940 条样本上过拟合了。3 轮才是甜点。
- 第 6 轮过了——最终 Go 的这组成绩(粗分类 93.09%、细分类 88.83%)是测试集上的。
第 6 轮为什么管用,值得单说,因为它是本节最"原理"的一处。我用的基座是混合注意力架构:一部分层走线性注意力,一部分层走全注意力。LoRA 只挂在注意力层上时,它实际只覆盖了 24 层里的 6 层;扩到 MLP 层之后,覆盖的是全部 24 层。
原来"我的微调没效果",不是这座模型学不会,是我只教会了它四分之一的层。
但第 2 轮和第 6 轮都动过 MLP,结果却一败一胜——所以别把结论读成"扩 MLP 就能过"。真正决定输赢的,是那一轮里同时绑着的其他旋钮:第 2 轮还同时把 rank 翻倍、格式还是错的 Alpaca;到第 6 轮,格式和轮数早就调对了,才轮到这个变量上台。
这就是"账要重新算"的意思:实验里没有真正的单变量,只有一串被同时拨动的旋钮——每换一个,整张账就作废重算一遍。
这一趟 0.8B 换掉 0.5B,最后赚到什么,也很精确:
| 对 0.5B 最好的那版 | 结果 |
|---|---|
| 细分类 | +5.5 个点 |
| 粗分类 | 基本持平(-0.74) |
| 上下文窗口 | 256K 对 128K,翻倍 |
细分类越过的 +5.5 个点,正好跨过 85% 那条线;上下文翻倍。换基座的收益,全落在"卡线的那一项"和"隐含能力"上,不在已经打平的那一项上。
还有第二个跑过闸门的模型:情感分类,用的是 0.5B 基座,准确率 0.9202,这一版(0.5B)就过了线。同样是 0.5B 量级,换个任务、换份数据,结果可以是一次 No-Go,也可以是一把过。
所以"把大模型压进小模型"不是一道一次性能过的关,是一串要逐个换变量、逐个试错的实验。 8 次里 7 次打回来,这才是常态。
图 A-23-3(待出):8 次微调的战损图——7 次 No-Go,最后一次靠"把作用范围从 6/24 层扩到 24/24 层"过线
五、为什么一个 AI System 需要 Small Model¶
回到那条链:
Model → Small Model → Model Pool → Router → Context → Knowledge/Memory → Agent → Harness/State → Evaluation/Gate → 闭环/反馈 → AI System
Small Model 是这条链的起点。可起点为什么不是"一个大模型",而是一堆小模型?
把上面三笔账合起来看:
- 能力账:同题实测下,2B 与 4B 在 8 项里 7 项打平。多出来的参数,不一定换回更多的对题。
- 资源账:2B 少占 1.6 倍内存、快 1.9 倍。内存直接决定一台机器上能站几个模型。
- 短板账:小模型有自己的坑(直答算术),得靠模式和精度去补,不能当它不存在。
三笔账指向同一件事:选模型的第一问不是"谁最强",是"这份活需要多强、我付得起多少"。
当我手里有一个自研的意图分类器(0.8B)、一个情感分类器(0.5B),外加几个现成的基座模型时,我要回答的从来不是"哪个最好",而是"这批活,各派谁最划算"。这就是下一节的事——Model Pool:为什么一个模型不够。
小模型存在的意义,不是"穷人的大模型"。它是让"一个系统里放好几个模型"这件事在账上成立的那块地基。 没有便宜的那一档,池子就无从谈起——你不可能在一条内存上摆五个大模型,正如一支机队不可能全是宽体机。
这一节到此:小模型的能力边界在哪、它的账怎么算、以及把一个模型压小的代价有多大。下一次,我们把这几个不同档位的模型摆到一起——那是 Model Pool 要解决的问题。
数据与出处¶
- 2B vs 4B 同题实测(2026-08-23,M4 Max 48G,4-bit 量化,8 项任务一次跑完):峰值内存、直答与思维模式吞吐、冷启动、逐项结果与客观质检——本机实跑、当日落盘
- 微调淘汰记录(两代基座合计 8 次微调、7 次 No-Go、1 次 Go)与 Go 的三条阈值(粗分类 / 细分类 / 解析率)
- 两代基座的逐轮评测结果表:所用格式、LoRA rank 与作用范围、训练轮数,以及对应的三项指标
- 0.8B 零样本基线(粗分类 0%)
- 混合注意力架构下 LoRA 的覆盖范围:注意力层 6/24、MLP 层 24/24
- 情感分类模型的评测结果(准确率 0.9202)
- 本地推理框架首次加载开销的实测(两个尺寸同为 151 秒)
- 零件链与"按疼补零件"的说法,见序章
本文所有数字均来自本机模型评测记录与实跑数据,读者拿同一批模型、同一套任务可以复算。