兄弟们,最近团队搞了个端侧部署项目,把一个大模型从8GB干到500MB,跑在手机和边缘设备上。过程比较痛苦,但结果还行,分享几个关键点。
**1. 量化是第一步,但不是全部**
INT4量化能砍掉75%的模型大小,但精度掉太多。我们用了混合精度:关键层保持FP16,非关键层INT4,最后精度从89%掉到86%,能接受。工具推荐NNCF和TensorRT。
**2. 剪枝比你想的难**
结构化剪枝(直接砍通道)比非结构化剪枝(稀疏化)更适合端侧,因为硬件对稀疏矩阵支持差。我们砍了30%的Transformer层,推理速度只快了20%,但内存占用降了40%。别贪,砍太多会导致模型“脑残”。
**3. 运行时优化才是真功夫**
模型小了,但加载慢?用内存映射(mmap)代替一次性加载;算子融合(比如把LayerNorm和Attention合并)减少Kernel调用。实测推理延迟从120ms降到85ms,苹果M1芯片上跑的。
**4. 坑点**
- 某些量化后的层在ARM上崩了,得手动调整scale值
- 手机内存不够?把模型拆成多个小文件,按需加载
你们端侧部署时遇到过哪些玄学问题?比如模型量化后输出全是NaN?来评论区吐槽。🧐 |