深度学习端侧推理框架介绍

news/2024/10/23 22:52:05/

在这里插入图片描述

深度学习端侧推理框架介绍

动端深度学习推理框架专为在移动设备和边缘设备上高效运行深度学习模型而设计。

  1. TensorFlow Lite
  • 介绍:TensorFlow的轻量级版本,专为移动和嵌入式设备优化,支持Android和iOS。
  • 官网网址:https://tensorflow.google.cn/lite/tutorials?hl=zh_cn
  • GitHub:https://github.com/tensorflow/tensorflow
  • 特点:
    • 性能优化:TensorFlow Lite提供了模型转换器,可以将训练好的模型转换成TensorFlow Lite格式,并且支持模型量化来进一步压缩模型大小和提高运行速度。
    • 硬件加速:TensorFlow Lite支持Android神经网络API(NNAPI)进行硬件加速,能够在兼容的Android设备上利用硬件加速深度学习模型的推理。
    • 跨平台支持:TensorFlow Lite不仅支持Android,还支持iOS设备,具有较好的跨平台特性。
    • 社区和文档:作为TensorFlow的一部分,TensorFlow Lite拥有强大的社区支持和丰富的文档资源。
  1. PyTorch Mobile
  • 介绍:PyTorch Mobile 是由 Facebook 的 PyTorch 团队提供的一套工具,它允许开发者在移动设备上运行 PyTorch 模型。PyTorch Mobile 支持 iOS 和 Android
    平台,使得在移动设备上部署和运行深度学习模型变得更加容易。
  • 官网:https://pytorch.org/mobile/home/
  • GitHub:https://github.com/pytorch/pytorch
  • 特点:
    • 跨平台支持:支持 iOS 和 Android,使得模型可以在两大主流移动操作系统上运行。
    • 与 PyTorch 兼容:与 PyTorch 框架兼容,开发者可以在桌面环境中训练模型,并将其无缝迁移到移动设备上
    • TorchScript 支持:支持将 PyTorch 模型转换为 TorchScript 格式,这是一种跨平台的序列化格式,允许模型在没有 Python 环境的设备上运行。
    • C++ 前端:提供 C++ API,允许在移动应用中直接调用和执行 PyTorch 模型,无需 Python 解释器。
    • 动态计算图:支持动态计算图,使得模型可以在运行时动态改变,这对于某些需要动态调整模型结构的应用非常有用。
    • 自动微分:支持自动微分,这对于需要在设备上进行训练或优化的应用非常有用。
    • 模型优化:支持模型量化和剪枝,以减少模型大小并提高推理速度,适应移动设备的资源限制。
    • 预编译的二进制文件:提供预编译的二进制文件,简化了集成过程,无需从头编译。
    • 灵活性:允许开发者在移动设备上进行模型推理和微调,甚至可以在设备上进行二次训练。
    • 性能优化:针对移动设备进行了优化,包括内核融合、内存管理优化等,以提高模型运行效率。
    • 易于集成:提供了详细的文档和示例代码,帮助开发者快速集成 PyTorch Mobile 到他们的移动应用中。
    • 社区支持:作为 PyTorch 生态系统的一部分,PyTorch Mobile 拥有活跃的社区支持,包括官方文档、论坛和GitHub仓库。
  1. MNN
  • 介绍:MNN(Mobile Neural Network)是一个阿里巴巴开发的轻量级的深度神经网络推理引擎,专为移动端优化,同时支持服务器、个人电脑、手机和嵌入式设备。
  • 官网:https://www.mnn.zone/m/0.3/
  • GitHub:https://github.com/alibaba/MNN
  • 特点:
    • 轻量性:MNN的主体功能(模型推理CPU+GPU)无任何依赖,代码精简,方便部署到移动设备和嵌入式设备中。iOS平台上,功能全开的MNN静态库大小约12MB,链接后增加的可执行文件大小约2MB。可裁剪主体功能后静态库大小6.1MB,链接后增加的可执行文件大小约600KB。Android平台上,主体功能动态库大小约800KB左右。
    • 通用性:支持Tensorflow、Caffe、ONNX、Torchscripts等主流模型文件格式,支持CNN、RNN、GAN、Transformer等主流网络结构。支持多输入多输出,任意维度的输入输出,动态输入以及带控制流的模型。
    • 高性能:对iOS、Android、PC、Server的CPU架构进行了适配,编写SIMD代码或手写汇编以实现核心运算,充分发挥CPU的算力。支持基于Metal、OpenCL、Vulkan、CUDA使用设备上的GPU进行推理。广泛运用了Winograd卷积算法提升卷积性能,并支持低精度计算(int8/fp16/bf16)以提升推理性能。
    • 易用性:支持使用MNN的算子进行常用的数值计算,覆盖numpy常用功能。提供MNN CV模块,支持图像仿射变换与归一化等图像处理。支持各平台下的模型训练,尤其是移动端上的模型训练,并支持Python调用。
    • 工具:提供了一系列工具,包括MNN-Converter(模型转换工具)、MNN-Compress(模型压缩工具)、MNN-Express(支持带控制流的模型运行)、MNN-CV(图像处理算法库)和MNN-Train(训练模块)。
    • 跨平台支持:MNN支持Windows、iOS 8.0+、Android 4.3+、Linux及具有POSIX接口的操作系统,使得开发者可以一次开发,多平台部署。
    • 应用场景广泛:MNN已经在阿里巴巴的多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。
  1. ncnn
  • 介绍:NCNN 是一个为移动和嵌入式设备优化的高性能神经网络前向计算框架,由腾讯的优图实验室(YouTu Lab)开发。NCNN 专注于在资源受限的环境中提供快速的深度学习模型推理能力。
  • GitHub:https://github.com/Tencent/ncnn/
  • 特点:
    • 轻量级设计:NCNN 专注于模型的前向推理,不包含训练功能,这使得它在资源受限的设备上更加高效。
    • 跨平台支持:支持多种操作系统,包括 Android、iOS、Windows、Linux 和 macOS。
    • 硬件加速:支持多种硬件加速库,如 ARM Neon、OpenCL、Metal(仅限 iOS)和 Vulkan,以充分利用硬件资源。
    • 模型压缩:支持模型的量化和剪枝,减少模型大小,提高运行速度。
    • 简化操作:提供了简化的 API,方便开发者快速集成和使用。
    • 内存管理:优化了内存管理,减少了内存占用,适合内存受限的设备。
    • 灵活的输入输出:允许开发者灵活地处理网络的输入和输出,方便与现有应用集成。
    • 支持主流模型格式:支持从 Caffe、TensorFlow、PyTorch 等主流框架转换模型。
    • 实时推理:针对实时应用进行了优化,如视频处理和增强现实。
    • 易于部署:提供了预编译的二进制文件和详细的文档,简化了部署过程。
    • 社区支持:拥有活跃的社区和开源支持,开发者可以在 GitHub 上找到 NCNN 的最新版本和相关讨论。
  1. ONNX Runtime Mobile
  • 介绍:ONNX Runtime Mobile 是微软开发的一个开源项目。它被设计为一个轻量级的推理库,用于在移动设备(如Android和iOS)上执行ONNX(Open Neural
    Network
    Exchange)模型。这个项目提供了一个优化的执行环境,使得机器学习模型能够在边缘设备上高效运行,包括个人电脑、智能手机、专用嵌入式设备或物联网设备。ONNX
    Runtime Mobile 支持与 ONNX Runtime 相同的API,使得应用代码可以管理和执行推理会话。
  • 官网:https://onnxruntime.ai/
  • GitHub:https://github.com/microsoft/onnxruntime
  • 特点:
    • 跨平台支持:ONNX Runtime Mobile 支持在 Android 和 iOS 平台上运行,使得开发者能够将 ONNX 模型部署到移动设备上。
    • 性能优化:针对移动设备进行了特别的优化,以减少磁盘占用空间,同时保持高性能的推理能力。
    • 减少操作符和类型:为了最小化二进制大小,ONNX Runtime Mobile 支持一组减少的操作符和类型,这些与典型的移动应用需求相一致。
    • 模型转换要求:使用 ONNX Runtime Mobile 之前,需要将 ONNX 模型转换为 ORT 格式。
    • NNAPI 和 CoreML 集成:ONNX Runtime Mobile 可以利用 Android 平台上的 NNAPI(神经网络API)和 iOS 平台上的 CoreML 进行硬件加速。
    • 图优化:ONNX Runtime 应用了大量的图优化,以提高模型的推理性能。
    • Execution Providers (EP) 框架:通过其可扩展的 Execution Providers 框架与不同的硬件加速库协同工作,以在硬件平台上以最佳方式执行 ONNX 模型。
    • 量化支持:ONNX Runtime 支持模型量化,这可以显著减少模型大小,同时提高推理速度。
    • 自定义操作和优化:开发者可以自定义操作和优化,以适应特定的应用场景和硬件特性。
    • 社区和文档支持:ONNX Runtime 拥有活跃的社区和丰富的文档资源,帮助开发者快速上手和解决问题。
  1. ML Kit
  • 介绍:ML Kit 是由 Google 提供的一款开源的机器学习 SDK,它包含了一系列预训练模型,可以帮助开发者在 Android 和 iOS 应用中快速添加机器学习功能。
  • 官网:https://developers.google.cn/ml-kit?hl=ur
  • GitHub:https://github.com/googlesamples/mlkit
  • 特点:
    • 广泛的功能覆盖:ML Kit 提供了包括图像识别、面部识别、物体检测、姿势估计、语音识别、语言识别、手势识别、行为识别、地理位置识别、翻译、自然语言处理和推荐系统等多种机器学习功能。
    • 多平台兼容性:ML Kit 适用于 Android 和 iOS 平台,允许开发者在这两个平台上轻松集成机器学习功能。
    • 灵活性选择:ML Kit 允许在边缘设备或云端执行模型推理,提供了灵活的部署选项。
    • 实时和批量数据处理能力:ML Kit 能够满足不同场景下对实时性和批量处理的需求。
    • 自定义模型支持:ML Kit 支持使用自定义的 TensorFlow Lite 模型,允许开发者根据自己的特定需求训练和部署模型。
    • 易于使用的高级别 API:ML Kit 提供了简单易用的 API,使得即使没有机器学习背景的开发者也能快速开发出基于机器学习的应用。
    • Firebase 集成:ML Kit 可以与 Firebase 集成,利用 Firebase 的服务进行模型的托管和更新。
    • 开源项目:ML Kit 也是一个开源项目,其代码可以在 GitHub 等平台上找到,允许社区贡献和改进。
  1. OpenVINO Toolkit
  • 介绍:OpenVINO Toolkit 是由英特尔(Intel)开发的一个开源工具套件,用于优化和部署人工智能(AI)推理。
  • 官网:https://docs.openvino.ai/2024/index.html
  • GitHub:https://github.com/openvinotoolkit/openvino
  1. Paddle Lite
  • 介绍:Paddle Lite 是百度飞桨(PaddlePaddle)深度学习平台下的一个项目,它是一个高性能、轻量级、灵活性强且易于扩展的深度学习推理框架,主要定位于支持包括移动端、嵌入式以及服务器端在内的多硬件平台。
  • 官网:https://www.paddlepaddle.org.cn/paddle/paddlelite
  • GitHub:https://github.com/PaddlePaddle/Paddle-Lite
  • 特点:
    • 多平台支持:Paddle Lite 支持多种平台,包括 Android、iOS、嵌入式 Linux 设备、Windows、macOS 和 Linux 主机。
    • 多种语言支持:Paddle Lite 支持多种编程语言,包括 Java、Python、C++。
    • 轻量化和高性能:Paddle Lite 针对移动端设备的机器学习进行优化,压缩模型和二进制文件体积,高效推理,降低内存消耗。
    • 模型优化:Paddle Lite 提供了模型优化工具,包括量化、子图融合、Kernel优选等优化手段,使得优化后的模型更轻量级,耗费资源更少,执行速度更快。
    • 多硬件支持:Paddle Lite 架构已经验证和完整支持多种硬件平台,包括 ARM CPU、Mali GPU、Adreno GPU、华为 NPU,以及 FPGA 等,且正在不断增加更多新硬件支持。
    • 架构设计:Paddle Lite 的架构设计着重考虑了对多硬件和平台的支持,并且强化了多个硬件在一个模型中混合执行的能力,多个层面的性能优化处理,以及对端侧应用的轻量化设计。
    • 开源项目:Paddle Lite 是一个开源项目,其所有项目代码在 Github 上维护,遵循 Apache License Version 2.0 许可协议。
    • 模型量化:Paddle Lite 支持静态离线量化、动态离线量化和量化训练等多种量化方式。
    • 调试分析工具:Paddle Lite 提供了调试和性能分析工具,帮助开发者优化模型和提高性能。
    • 移动端模型训练:Paddle Lite 支持移动端模型训练,使得模型训练更加灵活和便捷。
  1. 其他

http://www.ppmy.cn/news/1541458.html

相关文章

IDEA如何查看所有的断点(Breakpoints)并关闭

前言 我们在使用IDEA开发Java应用时,基本上都需要进行打断点的操作,这方便我们排查BUG,也方便我们查看设计的是否正确。 不过有时候,我们不希望进入断点,这时候除了点击断点关闭外,有没有更快速的方便关闭…

滚雪球学Redis[9.1讲]:Redis的常见问题与最佳实践

全文目录: 前言1. Redis的常见问题排查常见错误信息与解决方案性能瓶颈的识别与处理数据一致性问题的排查 2. Redis的最佳实践Redis使用中的通用原则典型业务场景中的最佳实践如何避免Redis中的反模式 小结下期预告 前言 在上一章【第八章:Redis的扩展与…

unity 导入的模型设置详谈

文章目录 1.Model 模型1.1 Scene:场景级属性,例如是否导入灯光和照相机,以及使用什么比例因子1.2 Mesh:网格的属性1.3 Generate :与几何相关的属性,用于处理拓扑,UV和法线 2.Rig 骨骼3.Animatio…

洛谷 [语言月赛 202410] 题解(C++)

本文为洛谷 [语言月赛 202410] 的全部题解(最后一题太麻烦暂时给不出完整代码)目录 题一: 题目大意和解答思路: 代码(C): 题二: 题目大意和解答思路: 代码(C): 题三: 题目大意和解答思路: 代码(C): 题四: 题目大意和解答思路: 代码(C): 题五: 题目大意和解答思路…

《整洁代码最佳实践》阅读心得

《整洁代码最佳实践》心得 阅读《整洁代码最佳实践》这篇文章后,我深感共鸣。作者通过自身经历分享了许多宝贵的观点,不仅强调了整洁代码的重要性,而且还提供了一些具体的实践建议。以下是我在阅读后的几点体会: 1. 命名的重要性…

插入排序(Python)

插入排序是一种简单直观的排序算法,其工作原理类似于我们平时整理扑克牌或书籍的方式。它的核心思想是将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,将其插入到已排序部分的适当位置,从而保持已排序部分的有序性…

MySQL的并行复制原理

1. 并行复制的概念 并行复制(Parallel Replication)是一种通过同时处理多个复制任务来加速数据复制的技术。它与并发复制的区别在于,并行复制更多关注的是数据块或事务之间的并行执行,而不是单纯的任务并发。在数据库主从复制中&…

Element Plus的el-tree-v2 组件实现仅叶子节点显示勾选框,并且只能单选

实现代码 <template><el-tree-v2:data"treeData":props"defaultProps"node-key"id"ref"treeRef"show-checkbox:check-strictly"true":expand-on-click-node"false"node-click"handleNodeClick&quo…