Git Product home page Git Product logo

deployai / nndeploy Goto Github PK

View Code? Open in Web Editor NEW
457.0 17.0 70.0 11.31 MB

nndeploy是一款模型端到端部署框架。以多端推理以及基于有向无环图模型部署为内核,致力为用户提供跨平台、简单易用、高性能的模型部署体验。

Home Page: https://nndeploy-zh.readthedocs.io/zh/latest/

License: Apache License 2.0

CMake 6.42% Python 1.06% C++ 90.64% C 0.73% Objective-C 0.02% Objective-C++ 1.13%
ascend easy-to-use hpc mnn model-deployment multi-inference openvino parallel rknn tensorrt

nndeploy's Introduction

English | 简体中文

介绍

nndeploy是一款模型端到端部署框架。以多端推理以及基于有向无环图模型部署为内核,致力为用户提供跨平台、简单易用、高性能的模型部署体验。

架构

Architecture

特性

1. 开箱即用的算法

目前已完成 YOLOV5YOLOV6YOLOV8 等模型的部署,可供您直接使用,后续我们持续不断去部署其它开源模型,让您开箱即用

model Inference developer remarks
YOLOV5 TensorRt/OpenVINO/ONNXRuntime/MNN 02200059ZAlways
YOLOV6 TensorRt/OpenVINO/ONNXRuntime 02200059ZAlways
YOLOV8 TensorRt/OpenVINO/ONNXRuntime/MNN 02200059ZAlways
SAM ONNXRuntime youxiudeshouyerenAlways

2. 支持跨平台和多推理框架

一套代码多端部署:通过切换推理配置,一套代码即可完成模型跨多个平台以及多个推理框架部署

当前支持的推理框架如下:

Inference/OS Linux Windows Android MacOS IOS developer remarks
TensorRT - - - - Always
OpenVINO - - - Always
ONNXRuntime - - - Always
MNN - - Always
TNN - - 02200059Z
ncnn - - - - Always
coreML - - - - JoDio-zdjaywlinux
paddle-lite - - - - - qixuxiang
AscendCL - - - - CYYAI
RKNN - - - - 100312dog

Notice: TFLite, TVM, OpenPPL, sophgo, Horizon正在开发中,我们正在努力覆盖绝大部分的主流推理框架

3. 简单易用

  • 基于有向无环图部署模型: 将 AI 算法端到端(前处理->推理->后处理)的部署抽象为有向无环图 Graph,前处理为一个 Node,推理也为一个 Node,后处理也为一个 Node

  • 推理模板Infer: 基于多端推理模块Inference + 有向无环图节点Node再设计功能强大的推理模板Infer,Infer推理模板可以帮您在内部处理不同的模型带来差异,例如单输入、多输入、单输出、多输出、静态形状输入、动态形状输入、静态形状输出、动态形状输出一系列不同

  • 高效解决多模型的复杂场景:在多模型组合共同完成一个任务的复杂场景下(例如老照片修复),每个模型都可以是独立的Graph,nndeploy的有向无环图支持图中嵌入图灵活且强大的功能,将大问题拆分为小问题,通过组合的方式快速解决多模型的复杂场景问题

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

4. 高性能

  • 推理框架的高性能抽象:每个推理框架也都有其各自的特性,需要足够尊重以及理解这些推理框架,才能在抽象中不丢失推理框架的特性,并做到统一的使用的体验。nndeploy 可配置第三方推理框架绝大部分参数,保证了推理性能。可直接操作推理框架内部分配的输入输出,实现前后处理的零拷贝,提升模型部署端到端的性能。

  • 线程池:提高模型部署的并发性能和资源利用率(thread pool)。此外,还支持CPU端算子自动并行,可提升CPU算子执行性能(parallel_for)。

  • 内存池:完成后可实现高效的内存分配与释放(TODO)

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

5. 并行

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

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

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

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

资源仓库

  • 我们已将第三方库、模型仓库和测试数据上传至HuggingFace上,如有需要,欢迎您前往下载使用。

文档

下一步规划

  • 推理后端
    • 完善已接入的推理框架coreml
    • 完善已接入的推理框架paddle-lite
    • 接入新的推理框架TFLite
  • 设备管理模块
    • 新增OpenCL的设备管理模块
    • 新增ROCM的设备管理模块
    • 新增OpenGL的设备管理模块
  • 内存优化
    • 主从内存拷贝优化:针对统一内存的架构,通过主从内存映射、主从内存地址共享等方式替代主从内存拷贝
    • 内存池:针对nndeploy的内部的数据容器Buffer、Mat、Tensor,建立异构设备的内存池,实现高性能的内存分配与释放
    • 多节点共享内存机制:针对多模型串联场景下,基于模型部署的有向无环图,在串行执行的模式下,支持多推理节点共享内存机制
    • 边的环形队列内存复用机制:基于模型部署的有向无环图,在流水线并行执行的模式下,支持边的环形队列共享内存机制
  • stable diffusion model
    • 部署stable diffusion model
    • 针对stable diffusion model搭建stable_diffusion.cpp(推理子模块,手动构建计算图的方式)
    • 高性能op
    • 分布式
      • 在多模型共同完成一个任务的场景里,将多个模型调度到多个机器上分布式执行
      • 在大模型的场景下,通过切割大模型为多个子模型的方式,将多个子模型调度到多个机器上分布式执行

参考

加入我们

  • nndeploy是由一群志同道合的网友共同开发以及维护,我们不定时讨论技术,分享行业见解。当前nndeploy正处于发展阶段,如果您热爱开源、喜欢折腾,不论是出于学习目的,抑或是有更好的想法,欢迎加入我们,收获成就,打磨技术,通过草根的力量,一起共同打造最简单易用、最高性能的模型端到端部署框架。

  • 微信:titian5566 (可加我微信进nndeploy交流群,备注:nndeploy+姓名)

nndeploy's People

Contributors

02200059z avatar 100312dog avatar acheerfulish avatar alwaysssssss avatar chunelfeng avatar cyyai avatar jaywlinux avatar jodio-zd avatar peterh0323 avatar qixuxiang avatar titianzhou avatar wangzhaode avatar wenxin-zhao avatar youxiudeshouyeren avatar zhouhao03 avatar zjhellofss avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nndeploy's Issues

Some improvement ideas

Hi!

  1. num_classes and input_size for model should be available as model init parameters, because there can be multiple custom trained models of the same type (ex Yolov*) in single project, with different input size and num_classes. It will prevent code duplication.

  2. Add YOLOv6 model for RKNN, for now, its most performant NN model for object detection for Rockchip. But RKNN-optimized YOLOv6 model has different opt_head that significately improves inference time (look at: https://github.com/airockchip/YOLOv6/commit/aa12cf70ee1795d00538f78a8857efd0cf17f7e4

  3. Add RTSP (live Video) codec, it's almost the same as Video, except it takes not a Path but rtsp url

是否可以直接提供一个 可以执行的 pipeline

比如,不需要 自己cp config.cmake 做修改,也不用 clone 内容到本地,
本地放一张图片和一个小模型,可以一个shell 跑起来?

或者,可以一个shell 拉取下来 模型和图片?不需要在 clone了

什么时候可以统一更新编译路径

代码中,CMakelist里有很多hardcoded 的路径。
写入了各位contributors的名字, /home/Always等等,可否更新管理一下,方便大家的使用。

谢谢!
支持你们。

demo 跑的非常慢

我使用tensorrt后端尝试使用demo,但是graph->init() 速度耗时非常久,麻烦帮忙看一下0.0 感谢!

环境:GTX 3060 cuda 11.5 Tensorrt 8.6.1.6 opencv 4.6

运行的命令:
./demo_nndeploy_detect --name NNDEPLOY_YOLOV5 --inference_type kInferenceTypeTensorRt --device_type kDeviceTypeCodeCuda:0 --model_type kModelTypeOnnx --is_path --model_value ./yolov5s.onnx --codec_flag kCodecFlagImage --parallel_type kParallelTypeSequential --input_path ./test_data_detect_sample.jpg --output_path ./sample_output.jpg

结果:
image

是否支持fp16模式

看到源码里边有half头文件了,但貌似没有使用,请问下是否已经支持half推理?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.