兄弟们,最近社区里不少人在问模型量化,今天直接开聊。量化本质就是把FP32的权重和激活值压缩到INT8甚至更低,比如4bit、2bit。好处很明显:模型体积砍半甚至更多,推理速度起飞,尤其适合手机、边缘设备这些显存带宽吃紧的地方。但坑也不少,我试过几个方案,分享点干货。
先说落地常用的。PTQ(训练后量化)最省事,拿个校准集跑一遍就能搞定,像TensorRT、ONNX Runtime都支持。代价是精度掉得厉害,尤其小模型,比如MobileNet直接掉3-5个点。QAT(量化感知训练)效果稳,能在训练里模拟量化误差,精度损失压到1%以内,但得重训,费时间。还有混合精度,关键层留FP16,非关键层砍到INT8,适合CV任务。
实际部署时,注意硬件兼容性。比如某些GPU对INT8卷积加速有限,不如用FP16。还有,别盲目压到4bit,除非你模型够大(比如7B以上),或者用LLM.int8()这类先进方法。我试过把LLaMA-7B压到4bit,推理快40%,但生成质量偶尔飘,需要调参。
最后,社区里老哥总说量化是“免费午餐”,真不是。付出精度换速度,值不值看你场景。你们部署时碰到过哪些量化翻车案例?比如激活值溢出、精度崩了怎么修?评论区唠唠 🔥 |