小众AI

nndeploy
nndeploy - 易用、高性能、支持多端的AI推理部署框架
nndeploy是一个简单易用、高性能、支持多端的AI推理部署框架。主要解决以下模型部署中的痛点。
  官网   代码仓

nndeploy是一个简单易用、高性能、支持多端的AI推理部署框架。

主要解决以下模型部署中的痛点:

  1. 推理框架的碎片化:现在业界尚不存在各方面都远超其同类产品的推理框架,不同推理框架在不同平台、硬件下分别具有各自的优势。例如,在NVidia显卡上TensorRT性能最佳,在x86 CPU上OpenVINO最优,在苹果生态下CoreML最佳,在ARM Android有ncnn、MNN等多种选择。
  2. 多个推理框架的学习成本、开发成本、维护成本:不同的推理框架有不一样的推理接口、超参数配置、Tensor等等,假如一个模型需要多端部署,针对不同推理框架都需要写一套代码,这对模型部署工程师而言,将带来较大学习成本、开发成本、维护成本。
  3. 模型的多样性:从模型部署的角度出发,可以分为单输入、多输入、单输出、多输出、静态形状输入、动态形状输入、静态形状输出、动态形状输出一系列不同。当这些差异点与内存零拷贝优化结合时,通常只有具备丰富模型部署经验的工程师才能快速找到最优解。
  4. 模型高性能的前后处理:模型部署不仅仅只有模型推理,还有前处理、后处理,推理框架往往只提供模型推理的功能。通常需要部署工程师基于对原始算法的理解,通过C++开发该算法前后处理,这需要大量重复工作。
  5. 多模型的复杂场景:目前很多场景需要由多个模型组合解决业务问题,没有部署框架的支持,会有大量业务代码、模型耦合度高、灵活性差、代码不适合并行等问题。

主要功能

1. 简单易用

  • 基于有向无环图部署模型: 将AI算法部署抽象为有向无环图,前处理、推理、后处理各为一个节点
  • 推理模板Infer: 模板可处理各种模型差异,包括单/多输入输出和静态/动态形状等等
  • 高效解决多模型组合场景:支持图中嵌入图功能,将复杂任务拆分为多个独立子图,通过组合方式快速解决多模型场景问题
  • 快速构建demo:支持多种输入输出格式(图片、文件夹、视频等),通过编解码节点化实现高效通用的demo构建

2. 高性能

  • 多种并行模式:支持串行(按拓扑排序依次执行节点)、流水线并行(多帧场景下将不同节点绑定到不同线程和设备)、任务并行(多模型场景下挖掘并行性缩短运行时间)以及上述组合并行模式。
  • 线程池与内存池:通过线程池提高并发性能和资源利用率,支持CPU算子自动并行(parallel_for)提升执行效率;内存池实现高效的内存分配与释放(开发中)
  • 一组高性能的算子:完成后将加速您模型前后处理速度(开发中)

3. 支持多种推理后端

  • 一套代码多种推理后端部署:通过切换推理配置,实现一套代码即可完成模型跨多个平台以及多个推理框架部署,性能与原始框架一致
  • 当前支持的推理框架如下:
Inference/OS Linux Windows Android MacOS IOS developer
TensorRT - - - - Always
OpenVINO - - - Always
ONNXRuntime - - - Always
MNN - - Always
TNN - - 02200059Z
ncnn - - - - Always
coreML - - - - JoDio-zdjaywlinux
AscendCL - - - - CYYAI
RKNN - - - - 100312dog
tvm - - - - youxiudeshouyeren
snpe - - - - yhwang-hub

4. 内置推理子模块

框架内部开发的推理子模块,作为缺省推理框架,当用户环境未编译链接其他推理框架时可使用此框架。在实际应用中,推荐使用芯片厂商提供的对应平台推理框架。

当前支持华为昇腾NPU和纯CPU算子后端。计划扩展至X86、CUDA、ARM、OpenCL等异构计算平台。

已适配主流视觉模型:图像分类(ResNet50等)、目标检测(YOLOv11等)、图像分割(RMBG1.4等)。未来将支持大语言模型(LLM)和文本图像多模态模型(Dit等)。

编译

1. 拉取源代码

git clone https://github.com/nndeploy/nndeploy.git
cd nndeploy
# 拉取子模块
git submodule update --init --recursive
# 如果拉取子模块失败,调用克隆子模块脚本
./clone_submodule.sh

2. 编译宏介绍

包含了以下几类配置:

  1. 基础构建选项(建议采用默认配置):如是否构建为共享库、使用的C++标准版本等等

  2. 核心模块选项(建议采用默认配置):更细粒度控制需要编译的文件

  3. 设备后端选项(按需打开,默认全部关闭,不依赖任何设备后端):如CUDA、OpenCL、各种NPU等硬件加速支持

  4. 算子后端选项(按需打开,默认全部关闭,不依赖任何算子后端):如cudnn、onednn、xnnpack、qnnpack

  5. 推理后端选项(按需打开,默认全部关闭,不依赖任何推理后端):如TensorRT、OpenVINO、ONNX Runtime等推理框架支持

  6. 算法插件选项(建议采用默认配置,传统CV类算法打开,语言类和文生图类算法默认关闭):如检测、分割、llm、文生图等算法插件

    • 其中传统CV类算法依赖OpenCV,例如检测、分割、分类等,需要打开ENABLE_NNDEPLOY_OPENCV
    • 注意:其中语言类和文生图类模型依赖C++分词器tokenizer-cpp,所以需要打开ENABLE_NNDEPLOY_PLUGIN_TOKENIZER_CPP,打开前参考precompile_tokenizer_cpp.md

3. 编译方法

config.cmake是nndeploy的编译配置文件,用于控制项目的编译选项。

相比于原生cmake -D选项,用户配置好的编译选项文件,可保留下来多次使用,在文件上还可以增加注释,方便后续维护。

相比编译脚本,无需为每个平台编写多种类型脚本,也不会遇到脚本环境问题,只需在根目录创建build目录,将config.cmake复制到该目录,然后修改config.cmake文件,即可开始编译。

假设你在根目录下,具体命令行如下:

mkdir build                 # 创建build目录
cp cmake/config.cmake build # 将编译配置模板复制到build目录
cd build                    # 进入build目录
vim config.cmake            # 使用编辑器vscode等工具直接修改config.cmake文件
cmake ..                    # 生成构建文件
make -j                     # 使用8个线程并行编译

4. 主库编译

  • 默认编译产物为:libnndeploy_framework.so
  • 算法插件编译产物为:libnndeploy_plugin_xxx.so
  • 可执行程序编译产物为:nndeploy_demo_xxx

注:xxx代表特定算法插件和特定的可执行程序,例如:nndeploy_plugin_detect.so、nndeploy_demo_detect、nndeploy_demo_dag

5. Windows

  • 环境要求

    • cmake >= 3.12
    • Microsoft Visual Studio >= 2017
  • | nndeploy提供的第三方库 | | | |

    第三方库 主版本 Windows下载链接 备注
    opencv 4.8.0 下载链接
    OpenVINO 2023.0.1 下载链接
    ONNXRuntime v1.15.1 下载链接
    MNN 2.6.2 下载链接
    TNN v0.3.0 下载链接
    ncnn v0.3.0 下载链接

    注:将上述所有库打包为一个压缩包windows_x64.7z,存放在huggingface上,使用前请将压缩包windows_x64.7z解压

  • 具体步骤

    • 在根目录创建build目录,将cmake/config.cmake复制到该目录

      mkdir build
      cp cmake/config.cmake build
      cd build
      
    • 开始cmake

      cmake ..
      
    • 通过visual studio打开build/nndeploy.sln,开始编译、安装、执行

6. Linux

7. Android


更多...


mcp-agent
一个基于 Model Context Protocol (MCP) 的简单、可组合的框架,用于构建智能代理。它旨在通过 MCP 服务器来管理代理的生命周期,并提供构建生产就绪的 AI 代理的简单模式。
one-api
通过标准的 OpenAI API 格式访问所有的大模型,统一 API 适配,可用于 key 管理与二次分发。
new-api
AI模型接口管理与分发系统,支持将多种大模型转为OpenAI格式调用、支持Midjourney Proxy、Suno、Rerank,兼容易支付协议,可供个人或者企业内部管理与分发渠道使用,本项目基于One API二次开发。