0%

C++_离线部署指南

自动摘要: 背景: 用于C++集成,将AI算法作为中间件,数据中转件 保证客户最低运行策略,即CPU能运行,快慢不是第一追求效率 部署包不能过大 步骤: ……..

背景:

  • 用于C++集成,将AI算法作为中间件,数据中转件
  • 保证客户最低运行策略,即CPU能运行,快慢不是第一追求效率
  • 部署包不能过大

步骤:

  • 常见AI推理步骤

数据处理:

  • 目的:
    • 将数据处理成网络需要的格式,并对数据进行特征提取
  • 问题:
    • 一般常常使用python库直接进行特征提取,C++无对应的库
  • 解决方案:
    • **
      • 找不到合适的C++库;
      • C++库过于复杂,效率不一定高
        • 可用性:
          • 特征提取部分就是C++在进行
          • 或者python库来源于C++绑定,如Open3D,openmesh等
    • 推理时,把数据处理部分用C++重构
      • 对数据处理部分要有一定理解,并能找到C++库进行重写
      • 需保证python,C++处理的一致性
        • 可用性:
          • 适用于对特征提取的C++库使用非常了解
          • 或者python库来源于C++绑定,如Open3D,openmesh等
    • 附带python解释器,直接执行python代码并调用第三库解决
      • 程序中会依赖python环境安装
        • 可用性:
          • 大量使用python库来进行数据处理
          • 有些python库重写工作量巨大

网络推理:

  • 目的:
    • 将处理好的数据通过AI框架进行推理输出
  • 问题:
    • 原生libtorch,TensorRT包过大,部署均超过1GB
    • TensorRT等GPU方案过于依赖GPU硬件设备,否则无法运行
    • 有些框架不兼容三维算子
  • 解决方案
    • image.png

      • 网址链接:https://onnxruntime.ai/
    • **

      • 工作量过大,难度过大
      • 原生
        • 可用性
          • 需要C++参与训练
          • 用于服务期部署,需要求与python推理一致性
    • 使用OpenVino推理框架,保证CPU能获得上获得最优速度

      • 不支持GPU
      • 对8代后的Intel有很好的表现
      • 支持自定义算子
      • 支持加密
        • 可用性
          • 商业化部署
          • 需要保证CPU上最优推理效率
          • 客户机一般都是8代以后的Intel CPU
          • AMD CPU也支持
    • 使用OpenCV-DNN进行推理

      • 不支持GPU
      • 简单,两行代码
      • 效率不高,大量算子不支持,兼容性很差
        • 可用性
          • 使用比较常见的AI框架(老框架),如YOLO基线系列,GANs基线系列
          • 图像类非常方便
    • 使用onnxruntime系列框架

      • 行业公认,文档多
      • 推理依赖在100MB内
      • 支持自定义算子,但是版本迭代过慢
      • 支持硬件资源,来自选择后端程序,如可选OpenVino作为后端
        • 可用性
          • 行业公认框架,维护成本低,易于部署
          • 对效率追求不太高
    • windows自带的DIrectML,winML框架

      • 只支持windows10-192xxx以上版本
      • image.png
      • 现阶段windows最优方案,几乎无第三方依赖
      • 自适应选择硬件资源
      • 效率跟ONNXRUNTIME框架一致
      • winML文档资源缺乏,DIrectML文档缺乏
        • 可用性
          • 对硬件不确定性高
          • 仅支持windows平台

注:腾讯,百度,阿里巴巴等AI推理框架未探究,因为大多针对手机端优化****如:NCNN/MNN/TNN/TVM

结果优化:

  • 目的:
    • 将结果进行二次处理,达到最优表现
  • 同数据处理部分

欢迎关注我的其它发布渠道