您好!欢迎光临恒彩娱乐消防灭火设备站,我们竭诚为您服务!

专注消防器材研发制造

打造消防器材行业领军品牌

服务咨询热线:

13988888888
当前位置: 主页 > 新闻动态 > 行业新闻

知乎大佬们好,我懂深度学习算法,目前想往模型部署优化这个方向发展,请问学习路线是什么?

  • 发表时间: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 招人啦!


openppl-public/ppl.nn
交流 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等),以及多实践。

模型部署优化可简单分为三个大方向:

  1. 模型结构优化:设计出更适合目标硬件的模型结构,目前人工设计居多,也有一些NAS
  2. 模型压缩:不改变模型框架的情况下,压缩其理论计算量,其中模型剪枝、模型量化最为常用
  3. 推理优化:编写高性能的算子来加速模型在目标硬件的计算(需要优化到汇编级别)

答主的训练框架是PyTorch,我推荐一个相对简单的路线,把各个部分过一下,然后你可以选择自己感兴趣的点深入

  1. 结构:学习一下 MobileNet(当初面试,就被问了MobileNet的特点和实现细节)、ShuffleNet 、Yolo等面向部署的模型结构,最好读读论文搞懂为什么要这样设计
  2. 剪枝:用NNI、TinyNeuralNetwork 等框架对模型进行剪枝,并阅读其源码了解常用的剪枝方法
  3. 量化:用PyTorch 的 FX 模块、TinyNeuralNetwork等框架完成模型的量化,如果要深入了解原理建议阅读Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference 这篇论文(非常经典,里面还有汇编如何实现等底层细节)。
  4. 推理:这块已经很成熟了,基本就调用目标芯片对应的框架,例如TensorRT(NVIDIA GPU),OpenVINO(Intel CPU),MNN、TNN、TFLite(大部分移动端芯片),TFLite Micro、Tengine(特定嵌入式芯片),除此之外很多芯片厂商还提供了自己的解决方案此处不多赘述。
  5. 推理性能优化:目前深度学习推理性能优化,大部分情况下等同于矩阵乘法的加速,因此题主可以找几篇矩阵乘法加速的文章阅读并实践一下。此处不建议直接去读推理框架源码,除非真的很感兴趣并决定深耕,因为这块较为底层,上手难度很大。


-----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 优化尤为重要。

希望这个系列能够给大家、朋友们带来一些些帮助,也希望自己能够继续坚持完成所有内容哈!

希望这个系列能够给大家、朋友们带来一些些帮助,也希望自己能够继续坚持完成所有内容哈!

然这里不是打广告,而是希望跟所有关注开源项目的好朋友一起探讨研究,共同促进学习讨论,也欢迎各位专家和朋友多拍拍砖,多提点意见。相关的材料都开源在这里:

github.com/chenzomi12/D

通过《推理引擎:核心原理》系列,我们会给大家介绍下面一些内容:


名称具体内容
推理系统推理系统整体介绍,推理引擎架构梳理
轻量网络轻量化主干网络,MobileNet等SOTA模型介绍
模型压缩模型压缩4件套,量化、蒸馏、剪枝和二值化
模型转换&优化AI框架训练后模型进行转换,并对计算图优化
Kernel优化Kernel层、算子层优化,对算子、内存、调度优化
  1. 推理内容介绍(video
  2. 什么是推理系统(video
  3. 推理流程全景(video
  4. 推理系统架构(video
  5. (上) 推理引擎架构(video
  6. (下) 推理引擎架构(video
  1. 推理参数了解(video
  2. (上) CNN模型小型化(video
  3. (下) CNN模型小型化(video
  4. Transformer小型化(video
  1. 压缩四件套介绍(video
  2. 低比特量化原理(video
  3. 感知量化训练 QAT(video
  4. 训练后量化PTQ与部署(video
  5. 模型剪枝(video
  6. (上) 知识蒸馏原理(video
  7. (下) 知识蒸馏算法(video
  1. 基本介绍(video
  2. 架构与文件格式(video
  3. 自定义计算图IR(video
  4. 流程细节(video
  1. 计算图优化策略(video
  2. 常量折叠&冗余节点消除(video
  3. 算子融合/替换/前移(video
  4. 数据布局转换&内存优化(video
  1. Kernel优化架构(video
  2. 卷积操作基础原理(video
  3. Im2Col算法(video
  4. Winograd算法(video
  5. QNNPack算法(video
  6. 推理内存布局(video

完结,撒花!

推荐产品
  • 产品中心标题一 产品中心标题一
    用于生产保险粉,磺胺二甲基嘧啶安乃近,己内酰胺等以及氯仿,苯丙砜和苯甲醛的净化。照相工业用作定影剂的配料。香料工业用于生产香草醛。用作酿造工业防腐剂,橡胶凝固剂和
  • 产品中心标题二 产品中心标题二
    用于生产保险粉,磺胺二甲基嘧啶安乃近,己内酰胺等以及氯仿,苯丙砜和苯甲醛的净化。照相工业用作定影剂的配料。香料工业用于生产香草醛。用作酿造工业防腐剂,橡胶凝固剂和
  • 产品中心标题九 产品中心标题九
    岗亭,英文名字为Watch House,字面理解就是岗哨工作的小房子。在车场管理中,岗亭常常也称之为收费亭,是停车场管理人员收取停车费的工作场所,除此以外还可用作小区保安门卫值
  • 产品中心标题八 产品中心标题八
    岗亭,英文名字为Watch House,字面理解就是岗哨工作的小房子。在车场管理中,岗亭常常也称之为收费亭,是停车场管理人员收取停车费的工作场所,除此以外还可用作小区保安门卫值

平台注册入口