MNN:高效轻量级深度学习框架
简介
MNN是一个高效轻量级的深度学习框架,由阿里巴巴开发。它支持深度学习模型的推理和训练,在设备端推理和训练方面具有领先的性能。目前,MNN已经集成到阿里巴巴30多个应用中,包括淘宝、天猫、优酷、钉钉、闲鱼等,覆盖了直播、短视频、搜索推荐、以图搜货、互动营销、权益分发、安全风控等70多个应用场景。此外,MNN还被应用于物联网等嵌入式设备中。
主要特点
轻量级
MNN经过专门优化,可以轻松部署到移动设备和各种嵌入式设备上:
- iOS平台:完整选项的armv7+arm64静态库大小约12MB,链接后可执行文件增加约2MB。
- Android平台:核心so库大小约800KB(armv7a - c++_shared)。
- 使用MNN_BUILD_MINI可以将包大小减少约25%,但会限制固定模型输入大小。
- 支持FP16/Int8量化,可以将模型大小减少50%-70%。
通用性
MNN支持多种深度学习框架和模型类型:
- 支持TensorFlow、Caffe、ONNX、Torchscripts等框架。
- 支持CNN、RNN、GAN、Transformer等常见神经网络。
- 支持多输入多输出模型、各种维度格式、动态输入、控制流等特性。
- 支持iOS 8.0+、Android 4.3+以及具有POSIX接口的嵌入式设备。
- 支持CPU和GPU的混合计算。
高性能
MNN采用多种优化技术以实现高性能:
- 使用大量优化的汇编代码实现核心计算,充分利用ARM/x64 CPU。
- 使用Metal/OpenCL/Vulkan支持移动端GPU推理。
- 使用CUDA和tensorcore支持NVIDIA GPU以获得更好的性能。
- 卷积和转置卷积算法高效稳定,广泛使用Winograd卷积算法。
- 对支持FP16的新架构ARMv8.2性能提升2倍,对ARMv8.2和VNNI使用sdot可提升2.5倍。
易用性
MNN提供了多种易用功能:
- 支持使用MNN的算子进行类似NumPy的数值计算。
- 支持轻量级图像处理模块,类似OpenCV但只有100k大小。
- 支持在PC/移动端构建模型并进行训练。
- MNN Python API让机器学习工程师可以轻松使用MNN进行推理、训练和图像处理,无需接触C++代码。
工具
基于MNN的张量计算引擎,提供了一系列用于推理、训练和通用计算的工具:
- MNN-Converter:将其他模型转换为MNN模型用于推理,支持TensorFlow(lite)、Caffe、ONNX、Torchscripts等,并进行图优化以减少计算量。
- MNN-Compress:压缩模型以减小大小并提高性能/速度。
- MNN-Express:支持具有控制流的模型,使用MNN的算子进行通用计算。
- MNN-CV:类似OpenCV的库,但基于MNN,因此更加轻量级。
- MNN-Train:支持训练MNN模型。
社区支持
MNN提供了钉钉讨论群以方便用户交流和获取帮助。虽然讨论主要以中文进行,但也欢迎并会帮助英语使用者。
总结
MNN是一个功能强大、性能优异、易于使用的深度学习框架,特别适合移动和嵌入式设备。它在阿里巴巴内部得到了广泛应用,并作为开源项目为整个AI社区提供服务。无论是用于研究还是生产,MNN都是一个值得考虑的优秀选择。