99POS
全部 75 场景方案 7 方案白皮书 3 防损 1 计价实践 1 品类方案 1 品牌与机型 3 收银选型 16 收银指南 3 算力平台 20 外设与扫码 2 运维与验收 18
首页/ 算力平台/ 模型小了一半,为什么收银没变快

模型小了一半,为什么收银没变快

2026-11-02 算力平台 约 817 字

招标书上的那一栏

设备选型的表里通常有一行:识别模型体积。供应商填 300 MB、150 MB、80 MB,看起来一目了然,评审也容易打分——小的那个显得技术更强。

这行数字不是假的,但它回答的问题很窄:这份模型装不装得下。它不回答跑得快不快,也不回答认得准不准。

有一种压缩方式特别容易造成这种错位:码本量化。

码本量化省的是什么

常规的量化是逐个数值处理的:每个权重单独对齐到一个刻度上,8 位就是 256 个刻度,4 位就是 16 个。刻度是等距的,存的是「第几格」。

码本量化换了个思路:把一组权重(比如连续的 32 个)当成一个整体,去一张预先准备好的表里找最像的那一行,然后只存行号。表里每一行是一小段数值模板,叫码字;整张表叫码本。

好处很直接:

  • 压缩比可以很高。 表里放 256 行,行号就是 8 位;放 16 行,行号就是 4 位。而码字本身可以是高精度的,等于用「少而精的模板」代替「多而粗的刻度」。
  • 块内误差互相抵消一部分。 一个块整体选模板,不是每个数各自往最近刻度上凑,块与块之间不容易累积成方向一致的偏移。

代价也很直接:解码的时候不能直接乘加了,得先查表,把码字取出来,再拼回去。

三种「小了但没快」

第一种:查表比乘法慢。 乘法在芯片上是一条指令,吞吐很高;查表是一次内存访问,地址还不规则。如果码本没放进片上缓存、或者索引排布让访问跳来跳去,解码这一步会比原来更耗时。存储省下来了,时间还回去了。

第二种:算子不支持,退回软件实现。 推理引擎没有对应的查表 kernel,只能在通用核上跑循环。这时候不是「快一点还是慢一点」的问题,是直接掉一个数量级。

第三种:省下的带宽本来就不是瓶颈。 设备内存宽裕、模型能整个放进缓存、单路输入——这种情况下压得再小,帧率也不会动,因为你从来没有卡在搬运上。

三种情况下,模型体积那一栏都会变好看,收银台前的体验一点没变。

门店怎么判断值不值

先问一个更基础的问题:现在到底卡在哪。

如果高峰期掉帧、多路接上就卡、内存占用一路涨到接近上限——那瓶颈在带宽或内存,压缩有机会帮上忙。

如果单路很流畅、加到第三路才开始抖——问题可能在并发调度,不在模型大小。

如果帧率没问题,但识别在某些品类上不稳——那是精度问题,压缩只会让它更糟。

判断的方法不需要多高深:在店里最忙的时段,让设备跑满,看两个数——帧率的 P95(最慢那 5% 有多慢)和内存峰值。这两个数比任何标称值都可靠。

该问供应商的四件事

码本有多大、块有多大。 码本要常驻内存,块大小决定索引开销占比。这两个数不给,压缩比就是一句空话。

解码 kernel 跑在哪颗核上。 CPU、GPU、NPU 是三种完全不同的性能曲线。同一份模型在不同核上,查表的代价能差好几倍。

码本是怎么来的。 离线聚类出来的,还是跟模型一起训出来的。前者便宜、泛化靠运气;后者更贴合任务,但换模型要重做。

换品类要不要重训。 这是合同问题,不只是技术问题。码本是从某一份权重分布里学出来的,门店上了全新品类、包装大改,旧码本的匹配度会下降。到时候谁来重训、多久能到店,最好在签合同前写清楚。

别把码本当免费资产

很多人把码本理解成模型文件的一部分,跟着模型走、不用管。实际不是:它是一份从数据里学出来的资产,和训练集、校准集绑在一起。

这意味着三件事要提前想好:

第一,模型升级时码本要跟着换,版本号要能对上——不然现场会出现「模型是新的、码本是旧的」这种没人能复现的问题。

第二,码本本身也可能泄露训练数据的统计特征,如果模型要外发(送修、退租、交给加盟商),码本得一起算在清理范围内。

第三,验收时不能只测原店原货。挑一批新上架的、没见过包装的商品跑一遍,才知道码本的边界在哪。

一句话

模型体积是选型表里最容易填、也最容易误导的一栏。码本量化能让这一栏很好看,但它换掉的是算术、增加的是访存——省下来的到底是时间还是只是磁盘,得在店里满负荷跑一遍才知道。