080 NPU的知识蒸馏支持:教师-学生模型的硬件优化
从一次诡异的精度回退说起
去年做一款轻量级AI芯片的部署时,遇到一个让我挠头三天的问题:同样的模型,在GPU上量化后精度损失不到1%,一上NPU直接掉了5个点。排查了量化参数、算子对齐、甚至怀疑过DDR带宽,最后发现罪魁祸首是——教师模型和学生模型的激活值分布差异,在NPU的定点计算中被放大了。
当时我们用的知识蒸馏方案很常规:教师模型(ResNet-50)输出软标签,指导学生模型(MobileNetV2)训练。GPU上跑FP32一切正常,但NPU的INT8推理时,学生模型的某些中间层激活值出现了严重的饱和截断。原因在于蒸馏过程中,学生模型被迫去拟合教师模型的“软分布”,这种分布往往比硬标签更平滑、更宽泛,导致学生模型的激活值范围比正常训练时大得多——而我们的量化校准集,用的是普通训练后的数据。
这个坑让我意识到:知识蒸馏不是单纯的训练技巧,它和NPU的硬件特性深度耦合。今天这篇笔记,就聊聊我在NPU上落地教师-学生模型时踩过的坑和总结的优化方法。
教师-学生模型的硬件视角
知识蒸馏的核心思想,是让一个小模型(学生)去模仿一个大模型(教师)的行为。传统上我们关注的是训练阶段的损失函数设计,但到了NPU部署阶段,问题变成了:
教师模型的“知识”如何以硬件友好的方式传递给学生?
NPU的典型瓶颈包括:计算精度(INT8/INT4)、激活值范围、内存带宽、算子融合能力。蒸馏过程