一句话定义
中间张量(Intermediate Tensor) 是一个算子的输出交给下一个算子时,落在内存里的那块数据。中间张量压缩指这块数据不按原始精度存、也不按原始字节数搬,而是在写入内存前编码、读出时解码。
它压的对象既不是权重,也不是摄像头进来的那张图,而是网络内部流动的数据。
它解决什么问题
端侧推理的瓶颈常常不是算力,而是搬运。
| 权重 | 中间张量 | |
|---|---|---|
| 什么时候用 | 每个算子读一次 | 每个算子写一遍、下一个算子再读一遍 |
| 大小由什么决定 | 模型结构,固定 | 输入分辨率、通道数、并发路数 |
| 压缩省的是 | 存储占用、首次加载时间 | 内存带宽、运行时峰值内存 |
权重可以慢慢读,中间数据必须马上写、马上读。一路视频跑检测网络,峰值内存里占大头的经常是中间张量而不是权重;同时跑检测、识别、属性几个模型时,几路数据一起抢同一条内存总线,表现就是掉帧、延迟抖动。
把这段数据压掉,省下的是带宽和峰值内存。代价是每个编解码动作本身要花算力和时间。
关键做法
难点不在「能不能压」,在「在哪压」。
- 不是每条边都插一对编解码。 朴素做法是在每个算子之间都编码一次、解码一次,编解码次数一多,省下的搬运量被自己吃掉,甚至更慢。
- 按子图放置。 把计算图切成若干块,只在块的边界编码,块内部一直用压缩格式流动,编解码次数随块数增长,而不是随边数增长。
- 找「绝对支配点」。 arXiv 上的 Linear-Time Non-Local Codec Placement for Machine Learning Model Compression(编号 2610.14703)给出的判据是:把图的边染色,让每个诱导子图弱连通,并且存在一个节点,所有输入到出口的路径都经过它、它到所有输出也都要经过它。这个唯一的节点被作者称为绝对支配点(absolute dominator),是观察整块子图流量的位置,也是学习编解码参数的位置。
- 放置算法对图规模线性。 图越大越需要这一点,否则每换一次模型都要重新算很久。
- 和量化叠加,不互相替代。 量化改的是数值表示(FP16 变 INT8),编解码压的是字节流;两者都在省带宽,但一个在格式层,一个在图结构层。
论文报告的数字是:相对朴素的局部放置,四个模型上建模的操作数流量降低 24%–44%,其中 SigLIP 上 24%、SmolLM2 上 34%。
常见误区
- 「权重压到 4 位,内存和带宽问题就都解决了。」 权重只解释一部分占用。分辨率高、通道宽的网络,峰值内存和带宽常由中间张量决定。
- 「压缩比越高越好。」 解压要花时间。带宽本来就宽裕的设备上,压得越狠、净收益越可能是负的。
- 「论文里的百分比就是加速比。」 它衡量的是建模的操作数流量,不是端到端实测。落到具体芯片上,还要看有没有高效的编解码算子、能不能和前后算子融合。
参考
arXiv:2610.14703,Linear-Time Non-Local Codec Placement for Machine Learning Model Compression(2026-10-10),提出把编解码算子放入源计算图的线性时间放置算法,以「绝对支配点」作为学习编解码参数的位置。
延伸阅读
- 模型文件不大,盒子还是卡——钱可能花在搬数据上 —— 这篇讲的是这件事对门店意味着什么。
相关词条
火眼识别提供端侧视觉引擎与设备管理平台,相关方案见 火眼识别官网。