English | 简体中文
| 文档 | 公众号 | 知乎 | discord | 哔哩哔哩 | ask deepwiki |
- [2025/05/29] 🔥 nndeploy开源团队和昇腾官方合作的推理框架课程上线啦
文生图 (Stable Diffusion 1.5) | 大语言模型 (QWen) | 图像分割 (RBMGv1.4) | 更多模型 |
链接 |
nndeploy是一个简单易用、高性能、支持多端的AI推理部署框架。
主要解决以下模型部署中的痛点:
-
推理框架的碎片化:现在业界尚不存在各方面都远超其同类产品的推理框架,不同推理框架在不同平台、硬件下分别具有各自的优势。例如,在NVidia显卡上TensorRT性能最佳,在x86 CPU上OpenVINO最优,在苹果生态下CoreML最佳,在ARM Android有ncnn、MNN等多种选择。
-
多个推理框架的学习成本、开发成本、维护成本:不同的推理框架有不一样的推理接口、超参数配置、Tensor等等,假如一个模型需要多端部署,针对不同推理框架都需要写一套代码,这对模型部署工程师而言,将带来较大学习成本、开发成本、维护成本。
-
模型的多样性:从模型部署的角度出发,可以分为单输入、多输入、单输出、多输出、静态形状输入、动态形状输入、静态形状输出、动态形状输出一系列不同。当这些差异点与内存零拷贝优化结合时,通常只有具备丰富模型部署经验的工程师才能快速找到最优解。
-
模型高性能的前后处理:模型部署不仅仅只有模型推理,还有前处理、后处理,推理框架往往只提供模型推理的功能。通常需要部署工程师基于对原始算法的理解,通过C++开发该算法前后处理,这需要大量重复工作。
-
多模型的复杂场景:目前很多场景需要由多个模型组合解决业务问题,没有部署框架的支持,会有大量业务代码、模型耦合度高、灵活性差、代码不适合并行等问题。
-
基于有向无环图部署模型: 将AI算法部署抽象为有向无环图,前处理、推理、后处理各为一个节点
-
推理模板Infer: 模板可处理各种模型差异,包括单/多输入输出和静态/动态形状等等
-
高效解决多模型组合场景:支持
图中嵌入图
功能,将复杂任务拆分为多个独立子图,通过组合方式快速解决多模型场景问题 -
快速构建demo:支持多种输入输出格式(图片、文件夹、视频等),通过编解码节点化实现高效通用的demo构建
-
多种并行模式:支持串行(按拓扑排序依次执行节点)、流水线并行(多帧场景下将不同节点绑定到不同线程和设备)、任务并行(多模型场景下挖掘并行性缩短运行时间)以及上述组合并行模式。
-
线程池与内存池:通过线程池提高并发性能和资源利用率,支持CPU算子自动并行(parallel_for)提升执行效率;内存池实现高效的内存分配与释放(开发中)
-
一组高性能的算子:完成后将加速您模型前后处理速度(开发中)
-
一套代码多种推理后端部署:通过切换推理配置,实现一套代码即可完成模型跨多个平台以及多个推理框架部署,性能与原始框架一致
-
当前支持的推理框架如下:
Inference/OS Linux Windows Android MacOS IOS developer TensorRT √ - - - - Always OpenVINO √ √ - - - Always ONNXRuntime √ √ - - - Always MNN √ √ √ - - Always TNN √ √ √ - - 02200059Z ncnn - - √ - - Always coreML - - - √ - JoDio-zd、jaywlinux AscendCL √ - - - - CYYAI RKNN √ - - - - 100312dog tvm √ - - - - youxiudeshouyeren snpe √ - - - - yhwang-hub
框架内部开发的推理子模块,作为缺省推理框架,当用户环境未编译链接其他推理框架时可使用此框架。在实际应用中,推荐使用芯片厂商提供的对应平台推理框架。
当前支持华为昇腾NPU和纯CPU算子后端。计划扩展至X86、CUDA、ARM、OpenCL等异构计算平台。
已适配主流视觉模型:图像分类(ResNet50等)、目标检测(YOLOv11等)、图像分割(RMBG1.4等)。未来将支持大语言模型(LLM)和文本图像多模态模型(Dit等)。
更多技术细节请参考:
- 设备管理模块
- 新增OpenCL的设备管理模块
- 新增ROCM的设备管理模块
- 新增OpenGL的设备管理模块
- 内存优化
主从内存拷贝优化
:针对统一内存的架构,通过主从内存映射、主从内存地址共享等方式替代主从内存拷贝内存池
:针对nndeploy的内部的数据容器Buffer、Mat、Tensor,建立异构设备的内存池,实现高性能的内存分配与释放多节点共享内存机制
:针对多模型串联场景下,基于模型部署的有向无环图,在串行执行的模式下,支持多推理节点共享内存机制边的环形队列内存复用机制
:基于模型部署的有向无环图,在流水线并行执行的模式下,支持边的环形队列共享内存机制
- 接入算子库
- 接入oneDNN,对于部分不支持算子,手写x86平台下的实现
- 接入cudnn和cutlass,对于部分不支持算子,手写cuda平台下的实现
- 接入XNNPACK和QNNPACK,对于部分不支持算子,手写ARM平台下的实现
- 推理子模块
- 支持大语言模型
- 支持stable diffusion
- 增加通信原语,支持分布式推理
- 优化内部的基于图的内存优化策略,探索更多的内存优化策略
- 部署更多的模型
- OCR
- 追踪
- ...
-
当前nndeploy正处于发展阶段,如果您热爱开源、喜欢折腾,不论是出于学习目的,抑或是有更好的想法,欢迎加入我们。
-
微信:titian5566 (欢迎加好友,进活跃的AI推理部署交流群,请简单备注个人信息)
-
我们参考了以下项目:TNN、FastDeploy、opencv、CGraph、CThreadPool、tvm、mmdeploy、FlyCV和oneflow。
-
感谢HelloGithub推荐