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

基于以上架构,nndeploy已具备诸多特性:
开箱即用的算法:目前已完成YOLOV5、YOLOV6、YOLOV8、Segment Anything、RMBG、stable diffusion、llm等模型的部署,并且易于扩展支持更多模型。
支持跨平台和多推理框架:一套代码可完成模型跨多平台及多推理框架部署,已支持 TensorRT、OpencvVINO、ONNXRuntime、MNN、NCNN、TVM 等多个推理框架。nndeploy 还开发了内部推理框架,支持分类(resnet50)、检测(YOLOV11)、分割(RMBG1.4)等模型。
易用性:核心基于有向无环图部署模型,使用节点与边进行任务编排、调度与执行。
高性能:集成线程池与部分高性能算子,提升模型部署的并发性能与资源利用率。
并行:支持串行、流水线并行、任务并行及以上模式的组合并行,适应不同场景。
更多特性详情可访问开源仓库:https://github.com/nndeploy/nndeploy。
为什么要实现推理框架
我们阅读过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的最新消息
我们的开源地址位于:https://github.com/nndeploy/nndeploy
我们的公众号:nndeploy ,还建立了AI推理部署交流群,欢迎大家关注公众号后加入群聊,nndeploy 开发人员会解答相关问题。
我们会不时在知乎等平台发布相关技术文章,欢迎大家关注:https://www.zhihu.com/column/c_1690464325314240512
欲深入探讨模型推理与部署的前沿话题,欢迎大家关注 nndeploy 公众号,加入我们的交流社群,与志同道合的伙伴们一同探讨、分享经验,共同进步!
nndeploy开源推理框架教程来袭,模型推理全流程,轻松上手,一键精通!的更多相关文章
- Java/JDK安装教程手册(正规图文全流程)、运行、环境配置
Java/JDK教程手册 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Download Resouc ...
- 【翻译】借助 NeoCPU 在 CPU 上进行 CNN 模型推理优化
本文翻译自 Yizhi Liu, Yao Wang, Ruofei Yu.. 的 "Optimizing CNN Model Inference on CPUs" 原文链接: h ...
- 【模型推理】量化实现分享一:详解 min-max 对称量化算法实现
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文剖析一下 m ...
- 天猫精灵业务如何使用机器学习PAI进行模型推理优化
引言 天猫精灵(TmallGenie)是阿里巴巴人工智能实验室(Alibaba A.I.Labs)于2017年7月5日发布的AI智能语音终端设备.天猫精灵目前是全球销量第三.中国销量第一的智能音箱品牌 ...
- 基于CPU版本的Caffe推理框架
最近一段时间,认真研究了一下caffe.但是,里面内容过多,集合了CPU版本和GPU版本的代码,导致阅读起来有些复杂.因此,特意对caffe代码进行了重构,搭建一个基于CPU版本的Caffe推理框架. ...
- 移动端 CPU 的深度学习模型推理性能优化——NCHW44 和 Record 原理方法详解
用户实践系列,将收录 MegEngine 用户在框架实践过程中的心得体会文章,希望能够帮助有同样使用场景的小伙伴,更好地了解和使用 MegEngine ~ 作者:王雷 | 旷视科技 研发工程师 背景 ...
- 【模型推理】Tengine 模型转换及量化
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 本文介绍一下 Tengine 模型转换 ...
- 优化故事: BLOOM 模型推理
经过"九九八十一难",大模型终于炼成.下一步就是架设服务,准备开门营业了.真这么简单?恐怕未必!行百里者半九十,推理优化又是新的雄关漫道.如何进行延迟优化?如何进行成本优化 (别忘 ...
- MindSpore模型推理
MindSpore模型推理 如果想在应用中使用自定义的MindSpore Lite模型,需要告知推理器模型所在的位置.推理器加载模型的方式有以下三种: 加载本地模型. 加载远程模型. 混合加载本地和远 ...
- 【模型推理】量化实现分享二:详解 KL 对称量化算法实现
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文剖析一下 K ...
随机推荐
- Sa-Token v1.40.0 发布 🚀,来看看有没有令你心动的功能!
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证.权限认证.单点登录.OAuth2.0.微服务网关鉴权 等一系列权限相关问题. 目前最新版本 v1.40.0 已发布至 Mav ...
- 开源接流:一个方法搞定3D地图双屏联动
老大提需求:一份数据,在2D地图上可编辑,在3D地图上显示高度信息,关键是两个地图得支持视图同步,末了还来句"两天时间够了吧?"我饶了饶头,内心各种问候...,代码如何下手,特X的 ...
- 表治理-Iceberg小文件合并测试
总结 指标 合并前 合并后(因测试中多次合并,数据会偏多) 查询速度 246秒 13秒 表总大小 9.2G 26.4G 单个文件大小 1-25MB 60MB左右 metadata目录文件数 37 75 ...
- Leetcode 765 情侣牵手 / Hetao-013 翅膀打结 题解 [ 黄 ] [ 并查集 ] [ BFS ] [ 贪心 ]
经典的连通块题,幸好我之前在 leetcode 看过原. 转化 首先观察到一对cp无论是男在前,还是女在前,都视为配对成功,对答案无影响. 因此,我们可以把一对情侣赋同一个编号,直接加一除以二即可. ...
- RabbitMQ(二)——模式类型
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...
- 微信企业付款到零钱(Java版)
订阅专栏1.开通条件. 商户注册超过90天且,连续30天有交易,可以每天支付1元来刷,目前测试可行.随后在微信商户平台 - 产品管理自动开启,然后需要申请. 疑问: 话说是要有公众号appid才行,但 ...
- 大数据之路Week10_day01 (通过直接创建Hfile文件的方式往Hbase中插入数据)
package com.wyh.parctise; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.P ...
- 读论文-基于序列模式的电子商务推荐系统综述(A Survey of Sequential Pattern Based E-Commerce Recommendation Systems)
前言 今天读的论文为一篇于2023年10月3日发表在<算法>(Algorithms)的论文,这篇文章综述了基于序列模式的电子商务推荐系统,强调了通过整合用户购买和点击行为的序列模式来提高推 ...
- 面试题10- II. 青蛙跳台阶问题
地址:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/ <?php /** 一只青蛙一次可以跳上1级台阶,也可 ...
- C#短链接生成方法
public class Program { static void Main() { Random rd = new Random(); for (int i = 0; i < 10; i++ ...