知乎大佬们好,我懂深度学习算法,目前想往模型部署优化这个方向发展,请问学习路线是什么?
- 发表时间:2024-05-06
- 来源:网络
- 人气:
请问如何满足如图所示jd,我现在只会Python,每天工作就是写脚本处理数据,训练模型,但是没什么工程能力,我想往模型部署优化,算法落地这个方向发展,请问该怎么学习与规划。
请学习路线是什么?
一般你部署的每一个硬件平台都有自己家的推理框架,需要自己做的任务基本也就是调用api来对一些模型进行落地,这其实不难,只要稍微熟悉一些c/c++即可。如果想进阶,学习一些优化的知识,比如卷积优化算法winograd,sgemm,或者更深入的汇编优化等等可以关注知乎移动端专栏或者GiantPandaCV公众号,都会带来一些比较良心的部署优化相关的文章。
模型部署优化这个方向其实比较宽泛。从模型完成训练,到最终将模型部署到实际硬件上,整个流程中会涉及到很多不同层面的工作,每一个环节对技术点的要求也不尽相同。
文:王佩琪
部署的流程大致可以分为以下几个环节:
从训练框架得到模型后,根据需求转换到相应的模型格式。模型格式的选择通常是根据公司业务端 SDK 的需求,通常为 caffe 模型或 onnx 模型,以方便模型在不同的框架之间适配。
该环节的工作需要对相应的训练框架以及 caffe/onnx 等模型格式有所了解。
常用的 Pytorch 和 TensorFlow 等框架都有十分成熟的社区和对应的博客或教程;caffe 和 onnx 模型格式也有很多可参考和学习的公开文档。
即使没找到有可参考的文章时,好在二者都是开源的,依然可以通过对源码和样例代码的阅读来寻找答案。
此处的模型优化是指与后端无关的通用优化,比如常量折叠、算数优化、依赖优化、函数优化、算子融合以及模型信息简化等等。
部分训练框架会在训练模型导出时就包含部分上述优化过程,同时如果模型格式进行了转换操作,不同IR表示之间的差异可能会引入一些冗余或可优化的计算,因此在模型转换后通常也会进行一部分的模型优化操作。
该环节的工作需要对计算图的执行流程、各个 op 的计算定义、程序运行性能模型有一定了解,才能知道如果进行模型优化,如何保证优化后的模型具有更好的性能。
了解得越深入,越可以挖掘到更多的模型潜在性能。
广义上来讲,模型压缩也属于模型优化的一部分。模型压缩本身也包括很多种方法,比如剪枝、蒸馏、量化等等。模型压缩的根本目的是希望获得一个较小的模型,减少存储需求的同时降低计算量,从而达到加速的目的。
该环节的工作需要对压缩算法本身、模型涉及到的算法任务及模型结构设计、硬件平台计算流程三个方面都有一定的了解。
当因模型压缩操作导致模型精度下降时,对模型算法的了解,和该模型在硬件上的计算细节有足够的了解,才能分析出精度下降的原因,并给出针对性的解决方案。
对于模型压缩更重要的往往是工程经验,因为在不同的硬件后端上部署相同的模型时,由于硬件计算的差异性,对精度的影响往往也不尽相同,这方面只有通过积累工程经验来不断提升。
OpenPPL 也在逐步开源自己的模型压缩工具链,并对上述提到的模型算法、压缩算法和硬件平台适配等方面的知识进行介绍。
四、模型部署
模型部署是整个过程中最复杂的环节。从工程上讲,主要的核心任务是模型打包、模型加密,并进行SDK封装。
在一个实际的产品中,往往会用到多个模型。
模型打包是指将模型涉及到的前后处理,以及多个模型整合到一起,并加入一些其他描述性文件。模型打包的格式和模型加密的方法与具体的 SDK 相关。在该环节中主要涉及到的技能与 SDK 开发更为紧密。
从功能上讲,对部署最后的性能影响最大的肯定是 SDK 中包含的后端库,即实际运行模型的推理库。开发一个高性能推理库所需要的技能点就要更为广泛,并且专业。
并行计算的编程思想在不同的平台上是通用的,但不同的硬件架构的有着各自的特点,推理库的开发思路也不尽相同,这也就要求对开发后端的架构体系有着一定的了解。
具体到不同架构的编程学习,建议参考当前各大厂开源的推理库来进一步学习。
尝试一下:《从 0 到 1,使用 OpenPPL 实现一个 AI 推理应用》
加入我们:《OpenPPL 招人啦!》
交流 QQ 群:627853444,入群密令 OpenPPL
这个jd看上去是一个算法中心里面工程组发的,大概率进去之后是做一些工具来帮助算法同学将算法落地到业务上,这个在我看来主要分为两个角度,性能优化的算法角度与工程角度,目标就是用尽可能低的代价取得尽可能高的指标
1、算法角度
从算法侧来做性能优化基本就是这几个套路:设计紧凑模型,模型剪枝,模型量化,知识蒸馏等等,除此之外就是在这几个套路上面再套个automl。要入手这个方向比较简单,顺着mit的hansong组最新的论文看就好,再顺着里面提到的参考文献挑感兴趣的看,不过他们组大部分工作是关于cv的,如果要做特定应用的性能优化直接在Google用关键字搜一下相关论文即可(只看大组和高引论文)。总体来说在算法角度上这个事没有特别深。
2、工程角度
工程角度上感觉这个事会更深一些,相对算法角度而言个人感觉难度也大很多,需要比较扎实的计算机基础。
如果从一个经过充分算法优化的pretrained模型出发,首先这个pretrained模型本质上就是一个经过序列化的DAG图,其中的每个节点就是一个算子(例如卷积),模型进行推理其实就是从输入节点开始遍历这个图,每个节点执行对应的算子进行计算,直到最后的输出节点。只从优化模型推理时间的角度来考虑的话(先不考虑peak memory优化,数据加载优化等),整个过程的时间其实就是花在每个节点上的时间之和,那么可以做的事情有两个:减小遍历的节点数和减小在单个节点上的时间。减小遍历的节点数也就是计算图优化,例如可以从输出节点反向遍历依赖的节点,将不需要的节点进行裁剪,还有就是将一些算子进行融合,例如将matmul+add操作合并为gemm,以及conv+bn层融合进单个conv层,计算图优化比较好的实践是Google的grappler。减小单个节点上的时间也就是算子优化,单个节点上花的时间由访存+计算两方面组成,有的算子是计算密集型的(例如conv),有的算子是访存密集型的(例如add),如果某个模型绝大部分都是访存密集型算子,那通过优化计算时间能得到的加速也会很有限(参考Amdahl加速定律)。优化算子除了高效的实现(例如用Winograd计算卷积,矩阵相乘时分块开多线程计算等)之外,还需要考虑部署平台的特性,例如不同平台不同指令集对低精度计算的支持不一样,Intel直到Cascade Lake才开始支持半精度浮点计算(bf16),在gpu上用半精度加速计算的套路在前几年的Intel cpu上就不好使了。
前面光是推理加速就一堆东西可以做,除此之外还有流计算等方向可以做很多事。总而言之工程方面想做的深不太容易,建议多看看计算机系统类的书籍(csapp和计算机系统量化方法等),除此之外再看看现有的解决方案(tensorrt,ncnn,tvm等),以及多实践。
模型部署优化可简单分为三个大方向:
- 模型结构优化:设计出更适合目标硬件的模型结构,目前人工设计居多,也有一些NAS
- 模型压缩:不改变模型框架的情况下,压缩其理论计算量,其中模型剪枝、模型量化最为常用
- 推理优化:编写高性能的算子来加速模型在目标硬件的计算(需要优化到汇编级别)
答主的训练框架是PyTorch,我推荐一个相对简单的路线,把各个部分过一下,然后你可以选择自己感兴趣的点深入
- 结构:学习一下 MobileNet(当初面试,就被问了MobileNet的特点和实现细节)、ShuffleNet 、Yolo等面向部署的模型结构,最好读读论文搞懂为什么要这样设计
- 剪枝:用NNI、TinyNeuralNetwork 等框架对模型进行剪枝,并阅读其源码了解常用的剪枝方法
- 量化:用PyTorch 的 FX 模块、TinyNeuralNetwork等框架完成模型的量化,如果要深入了解原理建议阅读Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference 这篇论文(非常经典,里面还有汇编如何实现等底层细节)。
- 推理:这块已经很成熟了,基本就调用目标芯片对应的框架,例如TensorRT(NVIDIA GPU),OpenVINO(Intel CPU),MNN、TNN、TFLite(大部分移动端芯片),TFLite Micro、Tengine(特定嵌入式芯片),除此之外很多芯片厂商还提供了自己的解决方案此处不多赘述。
- 推理性能优化:目前深度学习推理性能优化,大部分情况下等同于矩阵乘法的加速,因此题主可以找几篇矩阵乘法加速的文章阅读并实践一下。此处不建议直接去读推理框架源码,除非真的很感兴趣并决定深耕,因为这块较为底层,上手难度很大。
-----2023-6-7更新-----
最近大模型比较火,我们组最近做了一点大模型相关的模型压缩工作,可以参考看看:
TinyNN 开源超便捷大模型量化推理工具
我想往模型部署优化,算法落地这个方向发展,请问该怎么学习与规划?Q:当年作为核心SE在MindSpore团队从0到1构建了MindSpore Lite推理引擎!现在在华为和荣耀手机上的AI能力都是基于Lite推理引擎,调用次数已经超过10亿/天啦!!!
所以就基于之前的工作,总结了《AI推理引擎:核心原理》这个系列的内容:从推理系统整体架构开始,然后到模型小型化、模型压缩,在真正推理之前需要进行模型转换和图优化,最后到kernel和runtime优化。还是很有意思的,也花了很多时间,希望能够帮助到大家啦!!!
在讲推理引擎/推理系统,又或者是推理部署之前呢,我们回顾下训练和推理的区别 ^_^
训练过程通过设定数据处理方式,并设计合适的网络模型结构以及损失函数和优化算法,在此基础上将数据集以小批量(mini-batch)反复进行前向计算并计算损失,然后反向计算梯度利用特定的优化函数来更新模型,来使得损失函数达到最优的结果。训练过程最重要的就是梯度的计算和反向传播。
而推理就是在训练好的模型结构和参数基础上,做一次前向传播得到模型输出的过程。相对于训练而言,推理不涉及梯度和损失优化。推理的最终目标是将训练好的模型部署生产环境中。真正让 AI 能够运用起来。推理引擎可以将深度学习模型部署到云(Cloud)端或者边缘(Edge)端,并服务用户的请求。模型训练过程好比是传统软件工程中的代码开发的过程,而开发完的代码势必要打包,部署给用户使用,那么推理系统就负责应对模型部署的生命周期中遇到的挑战和问题。
当推理系统将完成训练的模型进行部署,并在服务时还需要考虑设计和提供负载均衡,请求调度,加速优化,多副本和生命周期管理等支持。相比深度学习框架等为训练而设计的系统,推理系统不仅关注低延迟,高吞吐,可靠性等设计目标,同时受到资源,服务等级协议(Service-Level Agreement),功耗等约束。本章将围绕深度学习推理系统的设计,实现与优化内容展开,同时还会在最后介绍部署和 MLOps 等内容。
移动端的推理引擎应该挺多的了,google在2017年推出了TF-Lite,腾讯在2017年推出了ncnn,Apple在2017也推出了CoreML,阿里在2018年推出了MNN,华为2019年推出了MindSpsore-Lite。距今已经过去了快5年的时间,技术上也接近收敛。下面让我们一起打开推理引擎的技术吧!
- 《推理系统》推理系统是本分享的重点概述,推理就是在训练好的模型结构和参数基础上,执行前向传播得到模型输出的过程。相对于训练而言,推理不涉及梯度和损失优化。推理的最终目标是将训练好的模型部署生产环境中,真正让 AI 能够运用起来。推理引擎可以将深度学习模型部署到云(Cloud)端或者边缘(Edge)端,并服务用户的请求。模型训练过程好比是传统软件工程中的代码开发的过程,而开发完的代码势必要打包,部署给用户使用,那么推理系统就负责应对模型部署的生命周期中遇到的挑战和问题。
- 《轻量网络》在端侧推理引擎中,主要是执行轻量的模型结构。主要思想是针对神经网络模型设计更高效的网络计算方式,从而使神经网络模型的参数量减少的同时,不损失网络精度,并进一步提高模型的执行效率。本节主要集中介绍模型小型化中需要注意的参数和指标,接着深入了解CNN经典的轻量化模型和Transformer结构的轻量化模型。
- 《模型压缩》模型压缩跟轻量化网络模型不同,压缩主要是对轻量化或者非轻量化模型执行剪枝、蒸馏、量化等压缩算法和手段,使得模型更加小、更加轻便、更加利于执行。
- 《模型转换&优化》在这一节当中分为模型转换和模型优化,在整体架构图中属于离线模型转换模块。一方面,推理引擎需要把不同 AI 框架训练得到的模型进行转换;另外一方面需要对转换后的模型进行图优化等技术。
- 《Kernel优化》在上层应用或者 AI 网络模型中,看到的是算子;但是在推理引擎实际执行的是具体的 Kernel,而推理引擎中 CNN 占据了主要是得执行时间,因此其 Kernel 优化尤为重要。
希望这个系列能够给大家、朋友们带来一些些帮助,也希望自己能够继续坚持完成所有内容哈!
希望这个系列能够给大家、朋友们带来一些些帮助,也希望自己能够继续坚持完成所有内容哈!
然这里不是打广告,而是希望跟所有关注开源项目的好朋友一起探讨研究,共同促进学习讨论,也欢迎各位专家和朋友多拍拍砖,多提点意见。相关的材料都开源在这里:
https://github.com/chenzomi12/DeepLearningSystem/tree/main/Inference
通过《推理引擎:核心原理》系列,我们会给大家介绍下面一些内容:
名称 | 具体内容 |
---|---|
推理系统 | 推理系统整体介绍,推理引擎架构梳理 |
轻量网络 | 轻量化主干网络,MobileNet等SOTA模型介绍 |
模型压缩 | 模型压缩4件套,量化、蒸馏、剪枝和二值化 |
模型转换&优化 | AI框架训练后模型进行转换,并对计算图优化 |
Kernel优化 | Kernel层、算子层优化,对算子、内存、调度优化 |
- 压缩四件套介绍(video)
- 低比特量化原理(video)
- 感知量化训练 QAT(video)
- 训练后量化PTQ与部署(video)
- 模型剪枝(video)
- (上) 知识蒸馏原理(video)
- (下) 知识蒸馏算法(video)
完结,撒花!
- 2024-05-13精简 OS、单一实例和映像优化
- 2024-05-13对低俗网络用语说“不”
- 2024-05-13短视频(douyin)去水印工具的实现代码
- 2024-05-13华为鸿蒙 HarmonyOS 4 系统正式发布:新增“实况窗”、小艺 AI 大升级、方舟引擎
- 2024-05-13腾讯视频qlv格式转换为mp4格式(完整版)
- 2024-05-13抖音团购可以直播带货吗?
- 2024-05-13山西持续优化营商环境 助力高质量发展
- 2024-05-132021年中国外卖行业市场规模及竞争格局分析 抖音进军外卖市场两大优势
- 2024-05-13也谈深度学习中的一阶优化算法
- 2024-05-13抖音信息流表单广告投放获客代运营
- 2024-05-13浅谈参数优化
- 2024-05-13权威访谈丨构建房地产发展新模式 推动房地产高质量发展——访住房城乡建设部党组书记、部长倪虹
- 2024-05-13有哪些让人眼前一亮的的旅行文案呢?
- 2024-05-132021小红书美食行业数据报告——不可小觑的美食赛道
- 2024-05-13密码子优化,codon optimization英语短句,例句大全
- 2024-05-13能源结构优化调整对碳减排贡献显著
- 产品中心标题一
用于生产保险粉,磺胺二甲基嘧啶安乃近,己内酰胺等以及氯仿,苯丙砜和苯甲醛的净化。照相工业用作定影剂的配料。香料工业用于生产香草醛。用作酿造工业防腐剂,橡胶凝固剂和
- 产品中心标题二
用于生产保险粉,磺胺二甲基嘧啶安乃近,己内酰胺等以及氯仿,苯丙砜和苯甲醛的净化。照相工业用作定影剂的配料。香料工业用于生产香草醛。用作酿造工业防腐剂,橡胶凝固剂和
- 产品中心标题九
岗亭,英文名字为Watch House,字面理解就是岗哨工作的小房子。在车场管理中,岗亭常常也称之为收费亭,是停车场管理人员收取停车费的工作场所,除此以外还可用作小区保安门卫值
- 产品中心标题八
岗亭,英文名字为Watch House,字面理解就是岗哨工作的小房子。在车场管理中,岗亭常常也称之为收费亭,是停车场管理人员收取停车费的工作场所,除此以外还可用作小区保安门卫值