采风全网
达观天下

模型压缩:显存不够时,我们究竟在省什么

有人问我,把一个几十 GB 的模型塞进显存有限的卡里,除了换硬件还有别的办法吗。我说可以试试模型压缩。对方愣了一下,说听起来像把文件打成压缩包。这个误解挺常见:压缩包不改变信息本身,而模型压缩恰恰是在承认一件事——模型里有大量用不上的东西,可以把它们拿掉。

冗余藏在哪

训练出来的权重矩阵里,很多数值彼此接近,甚至整行整列都在做近似的事。压缩的前提就是这种冗余真实存在;如果每一比特都承载独立信息,任何压缩都会直接损伤能力。

模型压缩的几条常见路径各有侧重:量化把高精度浮点换成低位宽整数,改动小、落地广;剪枝按某种重要性标准去掉连接或整块结构;蒸馏让一个小模型去拟合大模型的输出分布,学的是行为而非参数;低秩分解把一个大矩阵拆成两个更瘦的矩阵相乘,用乘法换存储。

这些手段经常叠着用。先剪枝再量化,或先蒸馏出一个骨架再量化,效果不一定线性叠加,需要逐层看误差怎么累积。

省下来的和花出去的

省的是显存、带宽和延迟,其中内存带宽往往更关键——不少推理场景的瓶颈并不在算力,而在数据搬运。少搬一些字节,收益是立竿见影的。

代价分几层。最直接的是精度,通常先坏在长尾输入上:常见样本看不出来,冷门样本错得离谱。其次是校准,量化需要一小批数据估计数值范围,这批数据的分布稍有偏移,误差就会被放大。还有一层容易被忽略:稀疏结构在通用硬件上未必跑得更快,省了存储不等于省了时间,得看具体的算子支持。

该先问的问题

讨论压缩比容易脱离场景。端侧设备、批量推理、在线微调,对精度、延迟和可改动程度的容忍度完全不同。同一套方案在一种场景能用,换到另一种可能连基线都达不到。

我的判断是先把瓶颈量出来:是显存不够、带宽不够,还是首字延迟太长。这三件事对应的手段不一样。如果只是显存不够,量化往往就够了;如果是吞吐上不去,剪枝和结构改动才值得投入。反过来,一个模型还没跑通、效果还不稳定时,先别压——压缩会掩盖问题,让你分不清是模型本身不行,还是压坏了。

模型压缩更像一门取舍的手艺,而不是一个可以调用的开关。它的价值在于把模型放进原本放不进去的地方,代价是你得清楚自己放弃了什么。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:模型压缩:显存不够时,我们究竟在省什么
文章链接:https://tech.cfdanews.com/ai/565.html