Skip to content

稳定的v1.0.0.0版本

Latest
Compare
Choose a tag to compare
@Alwaysssssss Alwaysssssss released this 21 Mar 15:53
· 49 commits to main since this release

1. 优化后的全新架构

2. 新增模型支持

我们新增对分割模型SAM(segment anything)的支持

3. 新增多种并行模式

  • 串行:按照模型部署的有向无环图的拓扑排序,依次执行每个节点。

  • 任务并行:在多模型以及多硬件设备的的复杂场景下,基于有向无环图的模型部署方式,可充分挖掘模型部署中的并行性,缩短单次算法全流程运行耗时。

  • 流水线并行:在处理多帧的场景下,基于有向无环图的模型部署方式,可将前处理 Node、推理 Node、后处理 Node绑定三个不同的线程,每个线程又可绑定不同的硬件设备下,从而三个Node可流水线并行处理。在多模型以及多硬件设备的的复杂场景下,更加可以发挥流水线并行的优势,从而可显著提高整体吞吐量。

  • 上述模式的组合并行:在多模型、多硬件设备以及处理多帧的复杂场景下,nndeploy的有向无环图支持图中嵌入图灵活且强大的功能,每个图都可以有独立的并行模式,故用户可以任意组合您复杂场景下的模型部署任务的并行模式,具备强大的表达能力且充分发挥硬件性能。

4. 新增线程池

线程池在nndeploy中扮演着至关重要的角色。它支撑nndeploy并行的需求,为任务级并行和流水线并行提供了稳定的基础。线程池的实现让框架能够更高效地管理并发任务,有效利用计算资源,并提升框架整体的性能表现。

5. 有向无环图的优化与重构

  • Node重构与优化:Node是有向无环图中的节点,代表进行某项运算或操作。前处理、推理、后处理、编解码都是节点,整个有向无环图也可以看做一个节点。节点本身不持有任何数据,数据从输入边流入,经过计算后,流出到输出边中。

  • Edge的重构与优化:Edge是有向无环图中的边,代表数据流动的方向,每个节点的输出边负责管理内存。Edge中可能持有Mat、Tensor、Buffer等数据。Edge分为固定边和流水线边,在串行、任务级并行中仅使用固定边;在流水线并行中仅使用流水线边。

  • Graph的重构与优化:Graph是有向无环图。由一系列Node、Edge及其拓扑关系组成,Graph中也可以嵌入Graph。

  • Loop Graph:继承Graph,新增Loop Graph,增强有向无环图的表达能力,提高复杂多模型部署场景下的开发效率。

  • Condition Graph:继承Graph,新增Loop Graph,增强有向无环图的表达能力,提高复杂多模型部署场景下的开发效率,在处理多帧以及多设备部署单模型场景下,通过与流水线并行的组合,可充分发挥所有硬件的性能,可显著提高整体吞吐量。

6. 推理模板的重构

对推理模板进行重构,基于多端推理模块 Inference + 有向无环图节点 Node 重新设计功能强大的推理模板Infer,Infer推理模板可以帮您在内部处理不同的模型带来差异,例如单输入、多输出、静态形状输入、动态形状输入、静态形状输出、动态形状输出、是否可操作推理框架内部分配输入输出等等一系列不同,面对不同的模型带来差异,通常需要具备丰富模型部署经验的工程师才能快速且高性能解决。

7. 新增编解码节点化

对于已部署好的模型,需要编写demo展示效果,而demo需要处理多种格式的输入,例如图片输入输出、文件夹中多张图片的输入输出、视频的输入输出等,通过将上述编解码节点化,可以更通用以及更高效的完成demo的编写,达到快速展示效果的目的。

8.多端推理子模块

当前版本新增如下推理框架的支持:

Inference/OS Linux Windows Android MacOS IOS developer remarks
ncnn - - - - Always
coreML - - - - JoDio-zdjaywlinux
paddle-lite - - - - - qixuxiang
AscendCL - - - - CYYAI
RKNN - - - - 100312dog

9. 设备管理模块

当前版本新增如下华为昇腾设备管理模块的支持:

Device Manager developer remarks
AscendCL CYYAI

10. 文档

构建了友好、全面的文档