026、模型量化基础:浮点与整数量化
026 模型量化基础:浮点与整数量化
一次让我通宵的部署事故
去年做的一个智能门锁项目,MCU是Cortex-M4内核,128KB SRAM,1MB Flash。模型在PC上跑FP32精度,识别准确率97.3%,完美。烧到板子上,内存直接爆了——模型权重占掉600多KB,Flash也塞不下。当时心想,这不就是典型的“PC上跑得欢,嵌入式就翻车”吗?
后来用TFLite Micro做量化,模型压缩到原来的四分之一,内存占用降到80KB,推理速度反而快了3倍。但代价是什么?准确率掉到了94.1%。客户说“门锁识别不准,你赔我误报费”。这就是量化的真实世界——没有免费的午餐,只有权衡的艺术。
浮点数在MCU上的奢侈
先看一个残酷的事实:Cortex-M0/M3/M4都没有硬件FPU(浮点运算单元),M4F才有。没有FPU的芯片,跑一次浮点乘法要调用软件库,几十个指令周期。而整数乘法,一个周期搞定。
FP32(单精度浮点)占用4字节,范围约±3.4×10³⁸,精度7位有效数字。但在嵌入式场景,我们真的需要这么宽的动态范围吗?传感器数据通常是12位ADC,范围0-4095;权重经过训练后,分布往往在[-1, 1]之间。用32位去表示一个只需要8位精度的数,就像用卡车运一颗鸡蛋。
量化的核心思想:用更少的比特数去近似表示浮点数,同时尽量保留原始信息。最常见的方案是INT8量化——把FP32映射到[-128, 127]的整数范围。
