参数、数据、算力:三个"大小"千万别混

先给结论: 论文里的"大"至少有三种完全不同的单位——参数量数的是"有多少个可调数字",数据量数的是"读了多少个词元",计算量数的是"一共做了多少次运算"。单位不同,就不能放在一起比大小。 读论文时最容易犯、后果最大的错,就是把这三个"大小"当成同一件事。

一、三个"大小"是三种不同的单位,混着看就会读错论文

三个「大小」与它们的关系参数量 N有多少个可调数字数据量 D读了多少词元算力 C一共多少次运算互相制约,不能单独比关系式(来自论文式 2 的近似)算力 ≈ 每个词元的开销 × 数据量每个词元开销 ≈ 6 × 参数量 (前向 2 + 反向约 4)算力固定时:模型翻倍能读的数据就得减半所以要先算账再动手这正是第一篇论文的主题

参数量、数据量、算力三者互相制约;算力固定时此消彼长

先认这三个词。每个词第一次出现,都用最土的说法解释一遍:

名字单位人话DeepSeek 第一篇论文里的例子
参数量parameters(个)模型内部"可调旋钮"的个数,像脑细胞数量7B、67B
数据量token(词元)训练时一共读进去多少词元,像读了多少字2T
计算量FLOPs(次运算)训练全程一共做了多少次乘加运算论文记为 C,按结构公式估

这里的 B 是"十亿"的数量级缩写,T 是"万亿"的数量级缩写,它们不是单位。7B 读作"大约 70 亿个参数",2T 读作"2 万亿个词元"。前者在数零件,后者在数阅读量——一个是库存,一个是阅读量,天生没法比大小。

还要提前拆掉一个雷:论文口径下的 7B、67B 是近似名称,不是精确清点结果。所以看到"67B 用了 2T 词元",不要顺手去算"每个参数平均摊到多少词元"——一边是近似值,一边是不同单位。

二、“2T 词元"不等于"2T 篇文档”,也不等于多少字节

这个反例几乎每个人都会踩。

词元(token) 是模型处理的最小单位,但它既不是字,也不是单词。切法跟"字"或"单词"都不完全对应——一个常用的两字词可能只占一个词元,一个生僻长词也可能被切成好几段。怎么切完全由模型自己的分词表决定:DeepSeek 第一篇论文的常规词元表有 10 万个词条,加上 15 个特殊标记是 100,015 个,训练时矩阵还预留到 102,400 个位置。这三个词表数字描述的是三个不同对象,不能互相替换。

于是:

  • “2T 词元”不等于 2T 篇文档。一篇长文和一句短话,词元数可以差出好几个数量级(每差一个数量级就是十倍),所以"多少词元"推不出"多少篇文"。
  • “2T 词元”也不自动等于多少字节(多少 GB 文本)。同一段文字换一套分词表,词元数就变了,而字节数一个都没变。
  • 中文的 2T 词元和英文的 2T 词元,信息量也不能直接比较——分词表和内容分布都不一样。

这个数字的后果: 论文里写"我们用了 2T 数据",你只获得了"读了多少词元"这一条信息。它既没告诉你读了多少篇文档,也没告诉你占了多少硬盘。

三、“KV cache 降到 1/8”,降的是笔记,不是显存,更不是速度

第二个反例更隐蔽,因为它出现在"省"字最密集的地方。

KV cache(读作"K-V 缓存")可以理解成模型读长文章时做的读书笔记:读过的内容算一遍就存下来,后面不必重算。它的大小按"元素个数"数,而它的公式里开头乘了一个 2——这个 2 来自 K 和 V 两份,不是"每个数占 2 字节"的意思。这种"数字长得像、来源却完全不同"的坑,论文里到处都是。

DeepSeek 67B 的做法,是让多个查询头共用一组笔记:64 个查询头只配 8 个 KV 头(这种结构叫 GQA,即多个头共享一份笔记)。在层数和每头维度都不变的前提下,笔记的原始存储量确实降到了 1/8。

但这句"降到 1/8"有三个必须补上的前提:

  1. 降的只是笔记本身,不是整个模型的显存。 显存里还住着模型权重、临时中间数据、通信缓冲,笔记只是其中一部分。
  2. 不等于快 8 倍。 论文没有承诺速度会按这个比例走;省内存和省时间是两件事。
  3. KV 头变少,不等于注意力输出变少。 查询头还是 64 个,只是它们共用笔记,各自的打分依然不同。

看到"省到 1/8"先问:省的是哪一部分?分母是谁? 如果分母只是笔记,那它和"整个系统省到 1/8"是完全不同的两句话。

四、规模代理 M 不是参数量:67B 这个数不能直接代进去

这是全文最容易搞错、也最值得记住的一处。

论文要研究"模型做大一点、还是数据多读一点更划算",就需要一个能同时反映两者的成本刻度。它没有直接用参数量,而是定义了一个新量,本文把它叫规模代理 M:

M 的含义是"每处理一个词元,模型大约要做多少次运算"(单位是 FLOPs/token)。

它由模型的结构算式估出来,粗略地说,是"每层的矩阵运算量乘以层数",再加上"注意力那部分的运算量";论文还顺手估了一条经验:训练时每处理一个词元、每个参数大约要算 6 次(前向约 2 次,反向粗估是前向的 2 倍)。

关键点:M 的单位是"次运算/词元",参数量的单位是"个"。 所以在"计算量 = M 乘以数据量"这个关系里,论文自己写明:把 M 当成 67B 代进去,是没有单位意义的。

论文还用附录报告了为什么非换不可:如果直接拿"不含词表部分的参数量"去预测表现,往往会高估大模型;换成"含词表部分的参数量",又往往低估。所以作者改用 M 这个成本代理,它在自己这组实验里预测得更准。

论文表 3 的第一行留下了一个能对得上的例子:一个小模型(8 层、宽度 512、序列长 4096)算出来 M 约为 3.52 亿 FLOPs/词元。这个数看起来和"多少亿参数"长得几乎一样——正因为长得像,才最容易被顺手代错。

同一张表的最后一行,差别就藏不住了:那个模型(80 层、宽度 8192)含词表的参数量是 653 亿个,而它的 M 是 4190 亿 FLOPs/词元。一个数"有多少个零件",一个数"每个词元要算多少次",既不同量级、也不同单位。 论文把三种"规模表示"并排放在这张表里,正是为了说明它们不能互相替代。

还有两条诚实的边界,论文比很多转述都保守:这个估法用的是标准注意力的近似,遇到 GQA 必须重算;它也不算真实 GPU 账单,通信、重算、padding、算子开销都不在里面。而发布版 67B(论文表 2 里是 95 层)并不在表 3 那批实验模型里,所以这里不给你凑一个它的 M 值。

五、算力固定时,模型做大一倍,能读的数据就必须减半

这条不是估算,是定义式带来的必然。

论文把三者的关系写成了一句用文字就能读的话:

计算量 ≈ 模型大小(M)乘以数据量(D)

乘法的性质决定了:只要总计算量 C 定住,M 翻倍,D 就必须减半。 这不是"我们观察到通常如此",而是在写下这个等式的瞬间就已经成立。

换句话说,“模型多大、数据多少"不是两个能各自随便加大的旋钮,它们是同一个预算下此消彼长的两项。读到"某模型用了 2T 数据"时,真正该问的不是"2T 算多吗”,而是"它是拿多大的模型换来的"。

再给一个必须标清单位的真实配置。DeepSeek 第一篇论文的 7B 配置里写着:上下文长度 4096,全局 sequence batch 2304。

这里要格外小心:2304 数的是"一次并行处理多少条序列(条)",4096 数的是"每条序列有多少个词元(个)"——一处是条数,一处是长度。两者相乘,才得到每步理论处理的词元数:2304 × 4096 = 9,437,184,约 943 万词元/步。

这就是"序列数不能直接当词元数用"的活例子。 论文的预算拟合里出现的批量是按词元计的,而配置表里那一栏的单位是序列。同一个字母 B,两处单位不同,混用会让每步词元数少算 4096 倍——正好差出那条序列的长度。

六、IsoFLOP 不是"越大越好",是沿这条约束找损失最小的那个配比

有了第五节的约束,一个常见误解就能被拆掉:在固定算力下,“模型越大越好"这句话是说不通的——你把模型做大,就必须少读数据,两边都会影响最终效果。

论文的做法叫 IsoFLOP(iso 是"相等"的意思,FLOPs 就是算力):固定总计算量,只改"模型多大、数据多少"的分配比例,看哪一点验证误差最小。 作者在"10 的 17 次方"到"3 乘 10 的 20 次方"的 8 档预算上各试了约 10 种配比,用一份与训练分布相近的、1 亿词元的独立验证集来评估,以 BPB 报告——BPB 是一种按字节口径衡量的误差,可以想象成"压缩这段话平均每个字节差多少”,它不是准确率,不能当分数看。

一句话的直觉:IsoFLOP 不是在问"模型能造多大",而是在问"这些算力怎么切最划算"。

论文在这组实验上拟合出的规律是:最优模型规模大约按算力的 0.5243 次方增长,最优数据量大约按算力的 0.4757 次方增长。

这两个指数必须带上三条前提:

  1. 它是"特定数据 + 特定架构"的拟合结果,不是定律。 论文表 4 自己列了对照:引用 OpenAI / OpenWebText2 的结果是 0.73 与 0.27,Chinchilla / MassiveText 是 0.49 与 0.51,而本文当前数据是 0.524 与 0.476。换个语料,指数就变。
  2. 两个指数加起来正好等于 1,来自预算约束,不是巧合。 因为 M 乘 D 必须等于 C,两个指数和必然为 1。它不该被看成一个"神奇常数"。
  3. 不能拿它当通用公式去套别的模型。 论文明确提醒:不能把 0.5243 当成新语料、新分词表或专家混合结构的通用常数。

顺便记一个换算感觉:按这组拟合,算力涨 10 倍时模型约涨 3.34 倍、数据约涨 2.99 倍。并不是"参数量和词元数永远 1 比 1 同步增长"。

最后留一把通用尺子:以后在论文或新闻里看到任何"多大多大"“快了多少倍"“省了多少”,先别急着记数字,先问两句——单位是什么、跟谁比。这两句能问出来,你就已经比大多数读者读得准了。


一句话总结: 参数数"零件个数”、数据数"读了多少词元"、算力数"算了多少次",三个大小必须连着单位一起读;而固定算力时模型和数据此消彼长,论文研究的正是这个配比怎么分配最划算。

记住这个数字: 0.5243 与 0.4757——DeepSeek 第一篇论文在自身数据与架构上拟合出的"模型指数"与"数据指数";两者相加为 1 是预算约束的必然,不是到处通用的常数。

下一篇: 第一步不是造模型,是算该花多少钱