推理引擎架构
date
Dec 19, 2024
slug
infer-eng
status
Published
tags
AI-Infra
summary
type
Post
推理引擎特点
High Performance 高性能
- 适配iOS、Android和PC的硬件架构和操作系统,优化单线程运行深度学习模型以实现设备最大算力。
- 对主流加速芯片进行深度调优,如OpenCL优化推理性能,Vulkan减少初始化时间。
- 编写SIMD代码或手写汇编以充分发挥芯片算力,并针对不同kernel算法提升性能。
- 支持多种计算精度以提高推理性能,并适配ARMv8.2和AVX5I2架构的指令集。

Lightness 轻量
- 主体功能无任何依赖,代码精简,可以方便地部署到移动设备和各种嵌入式设备中。
- 支持Minⅰ编辑选项进一步降低包大小,大约能在原库体积基础上进一步降低体积。
- 支持模型更新精度FP16/Int8压缩与量化,可减少模型50%-75%的体积。
Versatility 通用
- 支持Tensorflow、PyTorch、MindSpore、ONNX等主流模型文件格式。
- 支持CNN / RNN / GAN / Transformer等主流网络结构。
- 支持多输入多输出,任意维度输入输出,支持动态输入,支持带控制流的模型。
- 支持服务器 / 个人电脑 / 手机及具有POSIX接口的嵌入式设备。
- 支持Windows / iOS8.0+ / Android4.3+ / Linux / ROS等操作系统。
Accessibility 可拓展的
- 支持使用算子进行常用数值计算,覆盖numpy常用功能
- 提供CV / NLP等任务的常用模块
- 支持各平台下的模型训练
- 支持丰富的API接口

整体架构
优化阶段:
- 模型转换工具,由转换和图优化构成;
- 模型压缩工具、端侧学习和其他组件组成。
运行阶段:
即推理引擎,负责AI模型的加载与执行,可分为调度与执行两层。

工作流程

开发推理程序
- 配置推理选项
::Config
,包括设置模型路径、运行设备、开启/关闭计算图优化等
- 创建推理引擎对象
::Predictor(Config)
,其中 Config 为配置推理选项
- 准备输入数据
- 将原始输入数据根据模型需要做相应的预处理(比如减均值等标准化操作)
- 先通过
auto input_names = predictor->GetInputNames()
获取模型所有输入Tensor
名 - 通过
auto tensor=predictor->GetInputTensor(input_names[i])
获取输入Tensor的指 - 通过
tensor->copy(data)
,将预处理之后的数据data拷贝/转换到tensor中
- 执行推理,运行
predictor->Run()
完成推理执行
- 获得推理结果并进行后处理
- 通过
auto out_names=predictor->GetOutputNames()
获取模型所有输出Tensor名称 - 通过
auto tensor=predictor->GetOutputTensor(out_names[i])
获取输出Tensor指针 - 通过
tensor->copy(data)
,将tensor数据拷贝/转换到data指针上 - 批量推理验证数据集并计算模型精度判断推理结果的正确性
- 将模型推理输出数据进行后处理(根据检测框位置裁剪图像等)
