推理引擎架构

date
Dec 19, 2024
slug
infer-eng
status
Published
tags
AI-Infra
summary
type
Post

推理引擎特点

High Performance 高性能

  1. 适配iOS、Android和PC的硬件架构和操作系统,优化单线程运行深度学习模型以实现设备最大算力。
  1. 对主流加速芯片进行深度调优,如OpenCL优化推理性能,Vulkan减少初始化时间。
  1. 编写SIMD代码或手写汇编以充分发挥芯片算力,并针对不同kernel算法提升性能。
  1. 支持多种计算精度以提高推理性能,并适配ARMv8.2和AVX5I2架构的指令集。
notion image
 

Lightness 轻量

  1. 主体功能无任何依赖,代码精简,可以方便地部署到移动设备和各种嵌入式设备中。
  1. 支持Minⅰ编辑选项进一步降低包大小,大约能在原库体积基础上进一步降低体积
  1. 支持模型更新精度FP16/Int8压缩与量化,可减少模型50%-75%的体积
 

Versatility 通用

  1. 支持Tensorflow、PyTorch、MindSpore、ONNX等主流模型文件格式。
  1. 支持CNN / RNN / GAN / Transformer等主流网络结构。
  1. 支持多输入多输出,任意维度输入输出,支持动态输入,支持带控制流的模型。
  1. 支持服务器 / 个人电脑 / 手机及具有POSIX接口的嵌入式设备。
  1. 支持Windows / iOS8.0+ / Android4.3+ / Linux / ROS等操作系统。
 

Accessibility 可拓展的

  1. 支持使用算子进行常用数值计算,覆盖numpy常用功能
  1. 提供CV / NLP等任务的常用模块
  1. 支持各平台下的模型训练
  1. 支持丰富的API接口
notion image
 

整体架构

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

工作流程

notion image

开发推理程序

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

© Morgan Woods 2024 - 2025