自动摘要: 背景: 用于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库重写工作量巨大
- 可用性:
- 程序中会依赖python环境安装
- **
网络推理:
- 目的:
- 将处理好的数据通过AI框架进行推理输出
- 问题:
- 原生libtorch,TensorRT包过大,部署均超过1GB
- TensorRT等GPU方案过于依赖GPU硬件设备,否则无法运行
- 有些框架不兼容三维算子
- 解决方案
-
- 网址链接: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以上版本
- 现阶段windows最优方案,几乎无第三方依赖
- 自适应选择硬件资源
- 效率跟ONNXRUNTIME框架一致
- winML文档资源缺乏,DIrectML文档缺乏
- 可用性
- 对硬件不确定性高
- 仅支持windows平台
- 可用性
-
注:腾讯,百度,阿里巴巴等AI推理框架未探究,因为大多针对手机端优化****如:NCNN/MNN/TNN/TVM
结果优化:
- 目的:
- 将结果进行二次处理,达到最优表现
- 同数据处理部分