071、NPU的图像分类模型加速:从AlexNet到EfficientNet
071 NPU的图像分类模型加速:从AlexNet到EfficientNet去年做一款AI摄像头产品,选型时用了某家NPU芯片,标称4TOPS算力。跑MobileNetV2时帧率稳定在30fps,客户很满意。结果换了个场景——需要识别更细粒度的花卉品种,我换上了EfficientNet-B0,帧率直接掉到7fps。更诡异的是,同样的模型在PC上用TensorRT推理能跑到60fps,NPU上却连1/3的性能都没发挥出来。拆开一看,问题出在模型结构对NPU计算单元的适配性上。这不是算力不够,是模型结构和NPU架构之间的“语言不通”。卷积层的“方言”问题NPU的核心计算单元通常是脉动阵列(Systolic Array)或类似矩阵乘法器。这东西最擅长处理的是规则、连续、可切分的矩阵运算。AlexNet时代的卷积层,kernel size 11x11、5x5,stride 4或2,这种大卷积核在NPU上跑起来其实很舒服——数据复用率高,计算密度大。但VGGNet把卷积核统一成3x3,堆叠深度。问题来了:3x3卷积在NPU上,如果输入通道数不够大(比如前几层只有3或64通道),计算单元的利用率会很低。我调试时打印过NPU的PE(处理单元)利用率,VGG16的前几层只有12%左右,后面深层才勉强到60%。这里踩过坑:别以为模型小就一定能跑得快。NPU的加速效率取决于能否把计算单元“喂饱”。小卷积核、浅通道数,就像给卡车装了一车羽毛——载重没超,但空间利用率极低。