PaddleLite使用NPU(华为)预测部署

    • 华为nova5、nova5i pro、mate30、mate30 pro、mate30 5G、荣耀v30,以及即将推出的mate40、p40。据华为透露,今后上市的大部分手机都会搭载其自研达芬奇架构NPU。

    已支持的模型

    • MobileNetV1
    • MobileNetV2
    • ResNet-18/50
    • ShuffleNetV2
    • CycleGAN (暂时需要华为内部rom的支持)
    • 百度内部业务模型(由于涉密,不方便透露具体细节)
    • sigmoid
    • relu
    • tanh
    • relu_clipped
    • leaky_relu
    • softsign
    • hard_sigmoid
    • concat
    • conv2d
    • depthwise_conv2d
    • conv2d_transpose
    • dropout
    • elementwise_add
    • elementwise_sub
    • elementwise_mul
    • elementwise_div
    • fusion_elementwise_add_activation
    • fusion_elementwise_sub_activation
    • fusion_elementwise_mul_activation
    • fusion_elementwise_div_activation
    • fc
    • bilinear_interp
    • nearest_interp
    • matmul
    • mul
    • pad2d
    • pool2d
    • reduce_mean
    • reshape
    • scale
    • shuffle_channel
    • softmax
    • split
    • sqrt
    • square
    • transpose
    • transpose2
    • unsqueeze
    • unsqueeze2
    • instance_norm (暂时需要华为内部rom的支持)
    • layer_norm (暂时需要华为内部rom的支持)

    编译支持NPU的Paddle Lite库

    • full_publish and tiny_publish for armv8,由于HiAI DDK的armv7和armv8的so库均基于c++_shared构建,因此,建议使用c++_shared编译Paddle Lite。
    • full_publish and tiny_publish for armv7
    • model_optimize_tool工具已经支持生成NPU模型,仅需要将valid_targets设置为npu,arm即可,具体参考。
    • model_optimize_tool生成的模型只是标记了NPU支持的Paddle算子,并没有真正生成NPU HiAI模型,只有在执行时才会将标记的Paddle算子转成HiAI IR,最终生成并执行HiAI模型,具体实现参考PR2576
    • 不同模型,不同型号(ROM版本)的华为手机,在执行阶段,由于某些Paddle算子无法完全转成HiAI IR,或目标手机的HiAI版本过低等原因,可能导致HiAI模型无法成功生成,在这种情况下,Paddle Lite会调用CPU版算子进行运算完成整个预测任务。

    通过JAVA接口加载并执行NPU模型

    • 使用方法和Java实例一致,无需额外设置任何参数,只需将模型换成NPU模型即可。中的Image Classification Demo for Android是同时支持CPU和NPU两种模型的图像分类Demo。
    • 使用方法和C++实例一致,同样无需额外设置任何参数,只需将模型换成NPU模型即可。

    其它说明

    • 华为达芬奇架构的NPU内部大量采用float16进行运算,因此,预测结果会存在偏差,但大部分情况下精度不会有较大损失,可参考Paddle-Lite-Demo中Image Classification Demo for Android对同一张图片CPU与NPU的预测结果。
    • 我们正在持续增加能够适配HiAI IR的Paddle算子bridge/converter,以便适配更多Paddle模型,同时华为研发同学也在持续对HiAI IR性能进行优化。