上层框架:
Tensorflow Lite
Caffe2
CoreML: 苹果的移动端框架;底层调用Metal;
PyTorch Mobile:
- CPU端定点计算:使用自家的QNNPACK做CPU端INT8量化计算;
- CPU端浮点计算:使用XNNPACK;
- iOS GPU端计算:Metal
- Android GPU端计算:Vulkan
- Android上的DSP和NPU支持:通过Google NNAPI
- 支持计算图优化
腾讯NCNN
- 主要支持CNN网络,可计算部分分支
- 无依赖(CPU上):不依赖任何第三方库,完全独立实现所有计算过程,不需要BLAS/NNPACK等数学计算库。
- 跨平台:纯 C++ 实现,跨平台的cmake来编译,支持 Linux、Windows、MacOS、Android、iOS等
- 性能:为ARM CPU优化使用NEON指令集和手写NEON汇编,充分利用一切硬件资源;
- 内存优化:采用原始的滑动窗口卷积实现,并在此基础上进行优化,大幅节省了内存。在前向网络计算过程中,ncnn可自动释放中间结果所占用的内存,进一步减少内存占用。
- 支持OpenMP多核并行计算;
- 功耗:对ARM big.LITTLE架构的手机CPU,使用了更精细的调度策略控制功能,能够指定使用大核心或者小核心,或者一起使用,获得极限性能和耗电发热之间的平衡;
- 库size小:不依赖任何第三方库,binary小;可定制要哪些功能进binary;
- 支持INT8和Float16的模型精度;
- 减少内存拷贝:支持直接内存零拷贝引用加载网络模型;
- 可注册自定义层实现并扩展:用户可以把自己写的网络层,加入进来;
小米MACE
- 性能:ARM CPU上用Neon; 支持OpenCL;
- 性能:使用Winograd优化卷积计算;
- 性能:优化启动速度;
- 功耗:支持芯片的功耗管理,例如ARM的big.LITTLE调度,ARM的big.LITTLE功率选项;
- 响应延迟:自动拆解长时间的OpenCL计算任务,来保证UI渲染任务能够做到较好的抢占调度, 从而保证系统UI的相应和用户体验。
- 内存优化:通过运用内存依赖分析技术,以及内存复用,减少内存的占用。
- 内存优化:保持尽量少的外部 依赖,保证代码尺寸精简。
- 模型加密与保护:支持将模型转换成C++代码,以及关键常量字符混淆,增加反向工程的难度。
- 硬件支持广:支持高通,联发科,以及松果等系列芯片的CPU,GPU与DSP(目前仅支持Hexagon)计算加速。 同时支持在具有POSIX接口的系统的CPU上运行。
阿里MNN
- 通用性:支持 Tensorflow、Caffe、ONNX 等主流模型格式,支持 CNN、RNN、GAN 等常用网络;
- 支持异构设备混合计算:可以动态导入 GPU Op 插件,替代 CPU Op 的实现;
- 轻量性:减少对第三方库的依赖,binary文件size很小;
- 性能:支持运行网络模型中的部分路径,或者指定 CPU 和 GPU 间并行运行;
- CPU: 手写汇编
- iOS GPU: Metal
- Android GPU: OpenCL, Vulkan; OpenGL; 针对某些型号的设备做了深度调优;
- 卷积计算优化:广泛使用Winograd算法;
- 体用了新的ARM v8.2提供的Float16计算;
通用:
OpenCL: 并行计算标准;通吃所有CPU/GPU;(苹果主推Metal,已弃用之)
CPU:
QNNPACK: Facebook的INT8推理库;支持Android/iOS的CPU
ARM CPU:
Neon: ARM v7以上的SIMD指令集/库
XNNPACK: 浮点计算库;
Android GPU:
Vulkan: openGL 5.0,除了图形渲染还对通用高性能计算支持的好
iOS GPU:
Metal: 图形框架,比openGL更低功耗; (OpenCL和OpenGL已被苹果弃用)