跳转至

第 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 是这条链的起点。可起点为什么不是"一个大模型",而是一堆小模型?

把上面三笔账合起来看:

  1. 能力账:同题实测下,2B 与 4B 在 8 项里 7 项打平。多出来的参数,不一定换回更多的对题。
  2. 资源账:2B 少占 1.6 倍内存、快 1.9 倍。内存直接决定一台机器上能站几个模型。
  3. 短板账:小模型有自己的坑(直答算术),得靠模式和精度去补,不能当它不存在。

三笔账指向同一件事:选模型的第一问不是"谁最强",是"这份活需要多强、我付得起多少"。

当我手里有一个自研的意图分类器(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 秒)
  • 零件链与"按疼补零件"的说法,见序章

本文所有数字均来自本机模型评测记录与实跑数据,读者拿同一批模型、同一套任务可以复算。