大家好,我们是 nndeploy 开源团队。我们专注于打造一款端到端的模型推理和部署框架 ------ nndeploy,旨在为用户提供高效、便捷、灵活且兼容主流框架的模型推理和部署体验。
此次,我们开发了 nndeploy 内部推理模块 的相关教程,完全开源免费,希望能帮助大家更好地学习和掌握这一工具。当前我们正处于发展阶段,如果您热爱开源、喜欢折腾,不论是出于学习目的,抑或是有更好的想法,欢迎加入我们,一起探索 nndeploy 的无限可能!
认识nndeploy
nndeploy 是一款致力于为用户打造功能强大、简单易用、高性能且兼容主流框架的端到端模型推理和部署框架,开源地址位于:github.com/nndeploy/nn...

基于以上架构,nndeploy已具备诸多特性:
-
开箱即用的算法:目前已完成YOLOV5、YOLOV6、YOLOV8、Segment Anything、RMBG、stable diffusion、llm等模型的部署,并且易于扩展支持更多模型。
-
支持跨平台和多推理框架 :一套代码可完成模型跨多平台及多推理框架部署,已支持 TensorRT、OpencvVINO、ONNXRuntime、MNN、NCNN、TVM 等多个推理框架。nndeploy 还开发了内部推理框架,支持分类(resnet50)、检测(YOLOV11)、分割(RMBG1.4)等模型。
-
易用性:核心基于有向无环图部署模型,使用节点与边进行任务编排、调度与执行。
-
高性能:集成线程池与部分高性能算子,提升模型部署的并发性能与资源利用率。
-
并行:支持串行、流水线并行、任务并行及以上模式的组合并行,适应不同场景。
更多特性详情可访问开源仓库:github.com/nndeploy/nn...
为什么要实现推理框架
我们阅读过MNN、TNN、ncnn、Tengine等推理框架的源码,深度使用过AscendCL、TensorRT、OpenVINO、ONNXRuntime等等框架,主流推理框架在内部架构上以及算子性能上做的非常非常非常非常好,但是从模型部署的角度出发,仍然有一些可做的功能,例如:
- 支持直接读取ONNX模型:许多推理框架使用自定义的内部格式,需要将ONNX格式的模型,再通过推理框架附带的模型转换工具处理,转换成其自定义模型文件。对于开发者而言,从训练框架直接导出ONNX模型,无需进行额外的模型转换过程,方便算法工程师快速验证模型的精度和性能。对于有包体机要求的场景,仍可以采用模型转换实现。
- **支持手动构图:**当前模型导出机制存在算子细碎问题,尤其是Attention相关的模型,大量小算子影响性能且不利于后续优化。支持手动构图,可低成本构造大算子,便于整体性能优化。
- **支持加载并图优化QDQ模型:**能直接加载 QDQ 量化模型,解绑量化算法与推理框架,可使用更丰富量化算法,推理框架专注量化后模型图优化工作。
- 支持共享上下文和共享流支持共享上下文和共享流,通过共享上下文可实现前后处理与推理的零拷贝,借助共享流能让前处理、推理、后处理重叠执行,减少数据传输开销和等待时间,提升模型部署的整体效率。
- **支持多模型共享内存:**支持多模型共享内存,多个模型推理时,通过复用内存空间,总内存占用不再是各模型内存的简单累加,而是取各模型内存占用的最大值,实现"多个模型,单份内存",有效降低多模型推理的内存消耗,提升资源利用率。
- **动态形状支持:**适配更多的应用场景,支持更多的模型高性能落地,支持动态batch size、动态序列长度、动态图像尺寸。
- **多层次的api:**让开发者轻松上手,提供简单易用的高层API,让资深工程师能够进行更精细的性能调优,提供灵活的底层API。
内部推理模块已经可以做到基本支持上述特性,仍在不断的完善迭代中。
学习推理框架能为你带来什么
目前,nndeploy的推理框架已形成以下架构:

-
模型中间表示(IR):一组用于描述模型的结构和权重信息的数据结构。它是连接模型解释、图优化、计算图构建等推理框架各个关键模块的核心数据结构。IR作为推理框架内部的统一模型表示,在简化框架设计的同时,也方便了各模块之间的交互。
-
模型解释(Model Interpreter):是将训练框架模型文件转换为推理框架自定义模型文件的模块。目前支持将onnx模型文件转换为自定义模型文件(模型结构文件JSON,模型权重文件safetensors),也支持自定义模型文件与自定义IR之间的相互转换。通过模型解释模块,可以实现不同格式的模型在推理框架内部的统一表示,简化了推理框架的设计。
-
计算图(DAG):由算子(Operator)和张量(Tensor)构成的带执行属性的有向无环图,通过IR和配置参数构建而成。
-
运行时(Runtime):负责执行计算图,支持模型推理和单算子执行两种模式。它基于带执行属性的有向无环图,为计算图分配所需资源,写入输入,执行计算图,最终得到推理结果。
-
Ascend算子库(Ascend Operator Library):是基于华为昇腾平台的丰富算子库,算子与计算图紧密关联,是推理框架的核心组成部分。
-
图优化(Graph Optimization):在模型推理的各个阶段对IR或计算图进行优化,以提升模型推理性能。它包括算子融合、常量折叠、公共子表达式消除、Transpose消除、恒等算子消除等多种优化手段,并结合硬件特性和具体模型特点选择合适的优化策略。
-
内存优化(Memory Optimization):通过分析计算图中Tensor的生命周期,让生命周期不重叠的Tensor进行内存复用,以减少内存占用。
-
并行优化(Parallel Optimization):通过合理利用硬件资源的并行能力来提升模型推理性能,目前内部实现了推理的流水线并行。
-
Ascend C算子开发(Ascend C Operator Development):是基于华为昇腾平台的自定义算子开发语言,支持用户根据实际需求自定义和优化算子实现。
面向群体
nndeploy不仅开源了所有代码,还开发了对应的ppt、文档、demo、案例,我们也正在完善,文档会逐步释放出来,针对每一个组件进行了深入浅出的讲解。,主要面向一下三类群体:
-
算法工程师 :nndeploy 为算法工程师提供了一站式解决方案,助力快速验证模型效果、高效搭建 demo。希望算法工程师学习使用 nndeploy,凭借专业知识助力其优化改进,同时深入了解模型推理部署全流程,提升工作效率与成果质量。
-
部署工程师:nndeploy 让模型推理与部署更高效便捷,旨在减轻部署工程师的工作负担。希望部署工程师群体能贡献新的部署场景与经验,推动 nndeploy 完善设计,使其更贴合市场与项目需求。学习 nndeploy 可助工程师把握推理框架细节,攻克性能瓶颈,提升系统稳定性与效率。
-
ai infra初学者、学生、开源爱好者:nndeploy 子模块丰富且独立,便于学习拓展。期望 ai infra 初学者、学生和开源爱好者积极参与学习,提升编程与创新思维,构建推理框架知识体系。这利于职业发展,还能在开源社区交流进步,为秋招增添砝码。
如何关注nndeploy的最新消息
我们的开源地址位于:github.com/nndeploy/nn...
我们的公众号:nndeploy ,还建立了AI推理部署交流群,欢迎大家关注公众号后加入群聊,nndeploy 开发人员会解答相关问题。
我们会不时在知乎等平台发布相关技术文章,欢迎大家关注:www.zhihu.com/column/c_16...
欲深入探讨模型推理与部署的前沿话题,欢迎大家关注 nndeploy 公众号,加入我们的交流社群,与志同道合的伙伴们一同探讨、分享经验,共同进步!