【AI】推理系统和推理引擎的整体架构

news/2024/12/18 23:43:02/

本文主要是对 B 站 Up 主 ZOMI酱 推理系统系列视频 的理解,可以认为是重点笔记。

一、深度学习模型的全生命周期

相信很多人和我一样,刚看到深度学习模型中的推理系统或推理引擎时是一头雾水,因为学习 DL 时通常关注于模型的设计和训练。下图是深度学习模型的全生命周期图,主要分为两大类任务,训练任务和推理任务。

  • 训练任务:通常需要执行数小时、数天,一般配置较大的 batch size 以实现较大的吞吐量,训练模型直到指定的准确度或错误率。
  • 推理任务:执行 7 x 24 小时服务,此时模型已稳定无需训练,服务于真实数据进行推理预测,一般 batch size 较小。

训练过程通过设计合适的 AI 模型以及损失函数、优化算法等,前向传播并计算损失函数,反向计算梯度,利用优化函数来更新模型,最终目标是使损失函数最小。推理过程是在训练好的模型上,进行一次前向传播得到输出,最终目标是将模型部署在生产环境中

推理任务相比训练任务的挑战有如下几点:

  1. 模型被部署为长期运行的服务(需要稳定可靠);
  2. 推理时有更苛刻的资源约束(需要在有限算力下服务);
  3. 部署的设备型号更加多样,意味着设备架构多样(需要具有通用性)。

二、推理系统架构

推理系统的作用可以理解为提供一个服务,服务的形式可以是 C/S 架构,也可以是微服务架构;服务的内容可以是推荐感兴趣的文章,也可以是精准投放广告。因此,推荐系统的输入应通过 HTTP 或 gRPC 等请求发送,输出则根据业务需要进行定义。下图是推荐系统的架构图,请求响应与处理、监控和调度队列应该是高性能系统的常见组成部分,而推理系统的关键在于模型管理推理引擎。模型管理可以选择合适的 AI 模型执行推理任务,推理引擎则将各个任务合理分配给各种处理单元(xPU)进行处理。

推理系统的设计通常需要从以下几点考虑:低延迟、高吞吐、准确性、高效率和扩展性。

三、推理引擎架构

下图是推理引擎架构图,推理引擎本身也可以认为是一个基础软件,它提供了一组 API 用于在特定平台(如 CPU、GPU 和 VPU)上进行推理任务。英特尔的 OpenVINO 这样定义推理引擎:

(OpenVINO)推理引擎是一组 C++ 库,提供通用 API,可在您选择的平台(CPU、GPU 或 VPU)上提供推理解决方案。使用推理引擎 API 读取中间表示(IR)、设置输入和输出格式并在设备上执行模型。 虽然 C++ 库是主要实现,但 C 库和 Python bindings(通过 Python 调用 C/C++ 库)也可用。

隐藏在推理引擎的 API 下有许多功能可以实现,如同 Linux 提供的 API 一样,通过暴露的编程接口可以配置网络、管理文件、实现算法等。推理引擎首先要实现的是模型格式转换,深度学习框架多种多样,包括流行的 PyTorch、TensorFlow,以及 Keras、mxnet 等,因此需要转换它们的数据格式以便后续处理。模型压缩的目的是将一个大模型压缩为精简的小模型,由于端侧设备(移动端、桌面端、嵌入式等)的算力有限,参数很多的深度神经网络必须经过压缩才能部署,常用的方法在架构图中也有体现,包括知识蒸馏、剪枝、二值化等。架构中的 Runtime 部分就是实际的推理执行,而 Kernel 则是在具体的设备上进行运算。

推理引擎架构的每一层都有各自的问题,从上到下可以总结出如下问题:

  1. 如何对不同深度学习框架进行模型转换?(模型转换部分)
  2. 如何加快调度和执行?(Runtime 部分)
  3. 如何提高算子的性能?(Kernel 部分)
  4. 如何利用边缘设备/端侧设备算力?(设备部分)

http://www.ppmy.cn/news/1109495.html

相关文章

解决hadoop使用put上传报错问题

hadoop使用put上传报错 WARN hdfs.DataStreamer: DataStreamer Exception org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /input/yxqzdata.COPYING could only be replicated to 0 nodes instead of minReplication (1). There are 0 datanode(s) runnin…

07 目标检测-YOLO的基本原理详解

一、YOLO的背景及分类模型 1、YOLO的背景 上图中是手机中的一个app,在任何场景下(工业场景,生活场景等等)都可以试试这个app和这个算法,这个app中间还有一个button,来调节app使用的模型的大小,更大的模型实时性差但精…

Type mismatch: inferred type is Activity? but Context was expected

kt 编译运行错误 Running Gradle task assembleDebug... e: /home/leon/AndroidStudioProjects/samples/kkview_chuan/plugins/flutter_app_upgrade/android/src/main/kotlin/com/flutter/flutter_app_upgrade/FlutterAppUpgradePlugin.kt: (51, 23): Type mismatch: inferred…

【送书活动】用“价值”的视角来看安全:《构建新型网络形态下的网络空间安全体系》

文章目录 每日一句正能量前言本书概况赠书活动目录 每日一句正能量 成功与失败,幸福与不幸,在各自心里的定义都不会相同。 前言 过去,安全从未如此复杂; 现在,安全从未如此重要; 未来,安全更需如…

GIS前端-地图事件编程

GIS前端-地图事件编程 图层操作事件地图状态事件交互事件弹出框事件导出PDF 在地图上的一切操作均要采用地图事件机制来实现,即通过鼠标、键盘等交互,触发地图相关事件,进而调用相关功能接口函数实现相应的GIS功能。在具体的实现过程中&#…

探索装饰艺术的未来,留存传统的精髓

近一个世纪后,装饰艺术终于卷土重来。正如我们在全球新的项目、室内空间和家具中所看到的,那种令我们渴望20世纪初20年代繁荣时期的奢华和魅力。作为装饰艺术建筑和设计的独特身份一直在世界上继续启发着人们,那么从新的设计和现有设计的保留…

本地缓存 guava

缓存接口 集成guava本地缓存

十六、Webpack常见的插件和模式

一、认识插件Plugin Webpack的另一个核心是Plugin,官方有这样一段对Plugin的描述: While loaders are used to transform certain types of modules, plugins can be leveraged to perform a wider range of tasks like bundle optimization, asset m…