模型部署优化的学习路线是什么?

简介: 我现在只会 Python,每天工作就是写脚本处理数据、训练模型,但是没什么工程能力,我想往模型部署优化、算法落地这个方向发展,请问该怎么学习与规划?

模型部署优化这个方向其实比较宽泛。从模型完成训练,到最终将模型部署到实际硬件上,整个流程中会涉及到很多不同层面的工作,每一个环节对技术点的要求也不尽相同。

部署的流程大致可以分为以下几个环节:

image.png

一、模型转换

从训练框架得到模型后,根据需求转换到相应的模型格式。模型格式的选择通常是根据公司业务端 SDK 的需求,通常为 caffe 模型或 onnx 模型,以方便模型在不同的框架之间适配。

该环节的工作需要对相应的训练框架以及 caffe/onnx 等模型格式有所了解。

常用的 Pytorch 和 TensorFlow 等框架都有十分成熟的社区和对应的博客或教程;caffe 和 onnx 模型格式也有很多可参考和学习的公开文档。

即使没找到有可参考的文章时,好在二者都是开源的,依然可以通过对源码和样例代码的阅读来寻找答案。

二、模型优化

此处的模型优化是指与后端无关的通用优化,比如常量折叠、算数优化、依赖优化、函数优化、算子融合以及模型信息简化等等。

部分训练框架会在训练模型导出时就包含部分上述优化过程,同时如果模型格式进行了转换操作,不同 IR 表示之间的差异可能会引入一些冗余或可优化的计算,因此在模型转换后通常也会进行一部分的模型优化操作。

该环节的工作需要对计算图的执行流程、各个 op 的计算定义、程序运行性能模型有一定了解,才能知道如果进行模型优化,如何保证优化后的模型具有更好的性能。

了解得越深入,越可以挖掘到更多的模型潜在性能。

三、模型压缩

广义上来讲,模型压缩也属于模型优化的一部分。模型压缩本身也包括很多种方法,比如剪枝、蒸馏、量化等等。模型压缩的根本目的是希望获得一个较小的模型,减少存储需求的同时降低计算量,从而达到加速的目的。

该环节的工作需要对压缩算法本身、模型涉及到的算法任务及模型结构设计、硬件平台计算流程三个方面都有一定的了解。

当因模型压缩操作导致模型精度下降时,对模型算法的了解,和该模型在硬件上的计算细节有足够的了解,才能分析出精度下降的原因,并给出针对性的解决方案。

对于模型压缩更重要的往往是工程经验, 因为在不同的硬件后端上部署相同的模型时,由于硬件计算的差异性,对精度的影响往往也不尽相同,这方面只有通过积累工程经验来不断提升。

OpenPPL也在逐步开源自己的模型压缩工具链,并对上述提到的模型算法、压缩算法和硬件平台适配等方面的知识进行介绍。

四、模型部署

模型部署是整个过程中最复杂的环节。从工程上讲,主要的核心任务是模型打包、模型加密,并进行SDK封装。

在一个实际的产品中,往往会用到多个模型。

模型打包是指将模型涉及到的前后处理,以及多个模型整合到一起,并加入一些其他描述性文件。模型打包的格式和模型加密的方法与具体的 SDK 相关。在该环节中主要涉及到的技能与 SDK 开发更为紧密。

从功能上讲,对部署最后的性能影响最大的肯定是SDK中包含的后端库,即实际运行模型的推理库。开发一个高性能推理库所需要的技能点就要更为广泛,并且专业。

并行计算的编程思想在不同的平台上是通用的,但不同的硬件架构的有着各自的特点,推理库的开发思路也不尽相同,这也就要求对开发后端的架构体系有着一定的了解。

具体到不同架构的编程学习,建议参考当前各大厂开源的推理库来进一步学习。

目录
相关文章
|
存储 SQL 分布式计算
【存储】2022 年的 4 个开源对象存储平台
【存储】2022 年的 4 个开源对象存储平台
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
1079 10
|
4月前
|
Kubernetes 负载均衡 Ubuntu
Kubernetes安装详细教程 Ubuntu版
本教程基于Ubuntu 22.04配置Kubernetes环境,涵盖依赖安装、swap关闭、内核参数调整、containerd与Kubernetes组件安装、集群初始化及CNI网络插件部署等内容,并提供常见问题处理方法和相关工具推荐。
|
Java Spring
从@Async案例找到Spring框架的bug:exposeProxy=true不生效原因大剖析+最佳解决方案【享学Spring】(上)
从@Async案例找到Spring框架的bug:exposeProxy=true不生效原因大剖析+最佳解决方案【享学Spring】(上)
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
744 1
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI系统】知识蒸馏原理
本文深入解析知识蒸馏(Knowledge Distillation, KD),一种将大型教师模型的知识高效转移至小型学生模型的技术,旨在减少模型复杂度和计算开销,同时保持高性能。文章涵盖知识蒸馏的基本原理、不同类型的知识(如响应、特征、关系知识)、蒸馏方式(离线、在线、自蒸馏)及Hinton的经典算法,为读者提供全面的理解。
911 2
【AI系统】知识蒸馏原理
|
vr&ar 图形学 API
Unity与VR控制器交互全解:从基础配置到力反馈应用,多角度提升虚拟现实游戏的真实感与沉浸体验大揭秘
【8月更文挑战第31天】虚拟现实(VR)技术迅猛发展,Unity作为主流游戏开发引擎,支持多种VR硬件并提供丰富的API,尤其在VR控制器交互设计上具备高度灵活性。本文详细介绍了如何在Unity中配置VR支持、设置控制器、实现按钮交互及力反馈,结合碰撞检测和物理引擎提升真实感,助力开发者创造沉浸式体验。
791 1
|
编解码 算法 前端开发
聊聊我从底层算法到业务算法转型的这一年
聊聊我从底层算法到业务算法转型的这一年
583 0
|
机器学习/深度学习 存储 物联网
深度学习模型的优化与部署
【8月更文第18天】随着深度学习技术的发展,模型规模变得越来越大,这对计算资源的要求也越来越高。为了能够在资源有限的边缘设备(如智能手机、物联网设备)上运行复杂的深度学习模型,我们需要采用一系列优化方法来减少模型大小和计算复杂度。本文将介绍几种常用的模型优化技术,并讨论如何在边缘设备或云端服务器上部署这些优化后的模型。
512 0
如何将文章同步到其他平台?
如何将文章同步到其他平台?
618 0
如何将文章同步到其他平台?