架构

架构简介

Architecture

架构详解

  • Directed Acyclic Graph:有向无环图子模块。模型端到端的部署流程可抽象成 3 个子块:模型前处理+>模型推理+>模型后处理,这是一个非常典型的有向无环图,对于多模型组合的算法而言,是更加复杂的的有向无环图,直接写业务代码去串联整个过程不仅容易出错,而且还效率低下,采用有向无环图的方式可以极大的缩减业务代码的编写。

  • Process Template:前后处理模板以及推理子模板。我们希望还再可以简化您的部署流程,因此在模型端到端的部署的模型前处理+>模型推理+>模型后处理的三个过程中,我们进一步设计模板。尤其是在推理模板上面花了足够多的心思,针对不同的模型,又有很多差异性,例如单输入、多输出、静态形状输入、动态形状输入、静态形状输出、动态形状输出、是否可操作推理框架内部分配输入输出等等一系列不同,只有具备丰富模型部署经验的工程师才能快速解决上述问题,故我们基于多端推理模块 Inference + 有向无环图节点 Node 再设计功能强大的推理模板Infer,这个推理模板可以帮您在内部处理上述针对模型的不同带来的差异。

  • Resouce Pool:资源管理子模块。正在开发线程池以及内存池(这块是 nndeploy 正在火热开发的模块,期待大佬一起来搞事情)。线程池可实现有向无环图的流水线并行,内存池可实现高效的内存分配与释放。

  • Parallel: 并行模块。基于有向无环图的并行模块,任务并行可缩短单次算法全流程运行耗时,流水线并行可提高算法全流程运吞吐量。

  • Inference:多端推理子模块( nndeploy 还需要集成更多的推理框架,期待大佬一起来搞事情)。提供统一的推理接口去操作不同的推理后端,在封装每个推理框架时,我们都花了大量时间去理解并研究各个推理框架的特性,例如 TensorRT 可以使用外存推理,OpenVINO 有高吞吐率模式、TNN 可以操作内部分配输入输出等等。我们在抽象的过程中不会丢失推理框架的特性,并做到统一的使用的体验,还保证了性能。

  • OP:高性能算子模块。我们打算去开发一套高性能的前后处理算子(期待有大佬一起来搞事情),提升模型端到端的性能,也打算开发一套 nn 算子库或者去封装 oneDNNQNN 等算子库(说不定在 nndeploy 里面还会做一个推理框架呀)

  • Data Container:数据容器子模块。推理框架的封装不仅推理接口的 API 的封装,还需要设计一个 Tensor,用于去与第三方推理框架的 Tensor 进行数据交互。 nndeploy 还设计图像处理的数据容器 Mat,并设计多设备的统一内存 Buffer。

  • Device:设备管理子模块。为不同的设备提供统一的内存分配、内存拷贝、执行流管理等操作。