一句话定义

推理引擎(Inference Engine / Runtime) 是设备上真正执行模型的软件层。它读入训练框架导出的模型文件,做图优化,再调用设备上的 CPU、GPU 或 NPU 完成计算,最后把结果交回业务程序。

训练框架不是为端侧设计的:体积大、依赖多、面向的是「怎么训」而不是「怎么快」。引擎解决的是后半段的问题。

它解决什么问题

  • 让模型在设备上跑得起来:把模型转成端侧可执行的形式,剪掉推理用不到的部件。
  • 把性能榨出来:同一份模型在不同芯片上的表现差异,很多时候不是芯片的差距,而是引擎有没有为那块芯片写好算子。
  • 让一份模型下到多种设备:提供统一的模型格式和调用接口,不必为每类硬件单独维护一份代码。

关键做法

  • 模型转换。 把训练产物转成引擎自己的中间表示,转换期可以顺手做量化、算子融合、常量折叠。
  • 图优化。 合并相邻算子、复用内存、调整数据布局,减少访存次数。端侧推理里,省访存常常比省计算更有效。
  • 后端选择。 同一份模型可以走 CPU、GPU 或 NPU。不同后端的算子支持度不一样,选哪一个要看模型里实际有什么。
  • 量化集成。 低比特算子是不是由引擎直接支持,决定了模型压完之后能不能真的变快。没有对应算子时,计算会退回通用路径,压缩的收益可能被吃掉(参见端侧 GPU 推理)。
  • 开源实现。 这类引擎有成熟的开源项目,例如阿里开源的 MNN,面向端侧的轻量推理引擎,提供模型转换与压缩工具链;同类还有 NCNN、TensorFlow Lite、ONNX Runtime 等。

用不上的时候

  • 引擎不是越大越好。 支持平台的数量、宣传的性能数字,都不如算子覆盖、文档质量和排错手段重要——出问题那天,你靠的是日志和工具,不是功能列表。
  • 「支持某格式」不等于「算子都支持」。 转换期遇到不支持的算子会退化或直接失败,这一步要在选型阶段就用真实模型验。
  • 换引擎修不了模型的问题。 长尾品类识别不准属于模型和数据的问题,换一个更快的引擎只会让它更快地认错。

参考

  • 开源端侧推理引擎:alibaba/MNN(GitHub,C++,端侧高性能推理,含模型转换与压缩工具链)

延伸阅读

相关词条


火眼识别提供端侧视觉引擎与设备管理平台,相关方案见 火眼识别官网。