Skip to content

nndeploy/nndeploy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English | 简体中文

nndeploy

简单易用、高性能、支持多端的AI推理部署框架

| 文档 | 公众号 | 知乎 | discord | 哔哩哔哩 | ask deepwiki |


新闻

  • [2025/05/29] 🔥 nndeploy开源团队和昇腾官方合作的推理框架课程上线啦

快速开始

已部署的模型

文生图 (Stable Diffusion 1.5) 大语言模型 (QWen) 图像分割 (RBMGv1.4) 更多模型
Stable Diffusion QWen RBMGv1.4 链接

介绍

nndeploy是一个简单易用、高性能、支持多端的AI推理部署框架。

主要解决以下模型部署中的痛点:

  1. 推理框架的碎片化:现在业界尚不存在各方面都远超其同类产品的推理框架,不同推理框架在不同平台、硬件下分别具有各自的优势。例如,在NVidia显卡上TensorRT性能最佳,在x86 CPU上OpenVINO最优,在苹果生态下CoreML最佳,在ARM Android有ncnn、MNN等多种选择。

  2. 多个推理框架的学习成本、开发成本、维护成本:不同的推理框架有不一样的推理接口、超参数配置、Tensor等等,假如一个模型需要多端部署,针对不同推理框架都需要写一套代码,这对模型部署工程师而言,将带来较大学习成本、开发成本、维护成本。

  3. 模型的多样性:从模型部署的角度出发,可以分为单输入、多输入、单输出、多输出、静态形状输入、动态形状输入、静态形状输出、动态形状输出一系列不同。当这些差异点与内存零拷贝优化结合时,通常只有具备丰富模型部署经验的工程师才能快速找到最优解。

  4. 模型高性能的前后处理:模型部署不仅仅只有模型推理,还有前处理、后处理,推理框架往往只提供模型推理的功能。通常需要部署工程师基于对原始算法的理解,通过C++开发该算法前后处理,这需要大量重复工作。

  5. 多模型的复杂场景:目前很多场景需要由多个模型组合解决业务问题,没有部署框架的支持,会有大量业务代码、模型耦合度高、灵活性差、代码不适合并行等问题。

架构以及特点

Architecture

1. 简单易用

  • 基于有向无环图部署模型: 将AI算法部署抽象为有向无环图,前处理、推理、后处理各为一个节点

  • 推理模板Infer: 模板可处理各种模型差异,包括单/多输入输出和静态/动态形状等等

  • 高效解决多模型组合场景:支持图中嵌入图功能,将复杂任务拆分为多个独立子图,通过组合方式快速解决多模型场景问题

  • 快速构建demo:支持多种输入输出格式(图片、文件夹、视频等),通过编解码节点化实现高效通用的demo构建

2. 高性能

  • 多种并行模式:支持串行(按拓扑排序依次执行节点)、流水线并行(多帧场景下将不同节点绑定到不同线程和设备)、任务并行(多模型场景下挖掘并行性缩短运行时间)以及上述组合并行模式。

  • 线程池与内存池:通过线程池提高并发性能和资源利用率,支持CPU算子自动并行(parallel_for)提升执行效率;内存池实现高效的内存分配与释放(开发中)

  • 一组高性能的算子:完成后将加速您模型前后处理速度(开发中)

3. 支持多种推理后端

4. 内置推理子模块

框架内部开发的推理子模块,作为缺省推理框架,当用户环境未编译链接其他推理框架时可使用此框架。在实际应用中,推荐使用芯片厂商提供的对应平台推理框架

当前支持华为昇腾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推理部署交流群,请简单备注个人信息)

致谢

贡献者

Star History Chart