算法模型的轻量化

01. 背景

当前已经进入了智能时代,国家的十四五规划也在大力推进数字化和智能化转型。而视觉智能(Computer Vision)是实现智能化的一个重要组成部分。在视觉AI算法的落地过程中,算力越来越想前端推移。这有多方面的原因:

AI算力成本

通常来说,跑在数据中心的算力都是通用算力(例如英伟达的GPU),相对来说成本都比较高。现实中也有一些专用的加速卡(基于FPGA和ASIC的),单位算力成本也可以做到很低,但是如果考虑到搭载的服务器、机柜、电费等其他外围成本,还是相对较高。售卖边缘和终端设备给客户后,电费是客户承担的,即使有机房也是客户现有的,配套的嵌入式主机系统也比常规的服务器更便宜。综合起来,算力放到边缘和终端侧的成本无疑是更低的。

网络带宽与实时性

如果把视频流放到中心侧来进行分析,势必需要把视频流拉取到中心侧,进行视频解码后才能进行分析。传输视频流比较消耗带宽,很多现场的网络情况并没有较大的上行带宽,而且还不稳定,从而影响实时性。对于一些至关重要的场合这是无法接受的。

解码算力成本

视频流为了便于传输和存储都是经过编码算法压缩过的。视频解码也是一个比较消耗计算力的环节,不管有没有解码的硬件加速,都会带来不小的解码算力成本。对于终端侧,Sensor直接出的未压缩数据就可以送给AI算法进行处理,就省掉了解码的算力开销;即使是在边缘设备上,对应的解码算力成本也相对比中心侧的解码算力成本更低(原因同上面的AI算力成本)。

02. 模型轻量化的方法

既然AI算力需要往前端移动,那么对应的算法模型会遇到哪些挑战呢?最直接、最现实的挑战就是边缘和终端设备的计算和存储资源是受限的,并不能简单的把跑在服务端的大模型直接放到边、端设备上跑。需要使用一系列的技术手段来进行模型的压缩。

模型量化

最简单直接的压缩模型的方式是对网络模型进行量化。我们知道一个网络模型有大量的权重参数,中间会有很多很多的计算。如果都是FP32的计算,那么计算量就会很大。我们可以把浮点数空间映射到INT16或INT8的空间进行计算,最终的计算结果会经过反量化变换回来,这样就能极大的提升计算的效率,不过量化会带来模型精度的损失。这里需要找到一个平衡点,既能满足业务精度需要,又能满足硬件的算力约束。顺便提一下,各个NPU厂商在宣传算力时,为了让数字更大,都使用INT8的算力指标,简单的用OPS来代替,而不像早期的英伟达都以FLOPS来标注算力。

quantization

当前主流的NPU厂商都提供了模型转换工具,使之能使用NPU提供的算力进行推理。这些工具除了能做模型转换外,一般还提供量化功能。这些量化可以在训练完后做,也可以在训练中来做。不管什么方式,最终得到的就是一个较小、更快的模型,但是牺牲一定的精度。

知识蒸馏

蒸馏是机器学习中的一种学习方法,通常来说会有一个较大的Teacher(老师)网络和一个较小的Student(学生)网络,Teacher网络的学习能力更强,通过对Student网络训练的指导,把学到的知识再”传授“给学生网络。

distillation

通过这种方式可以使得用较小的网络就能达到比较好的精度。当然这里会有一个疑问,为直接用小模型训练就不能达到对应的精度呢?技术上的一种解释是大模型输出的是大模型输出的是软标签(softlabel),比直接人工标注的硬标签(hardlabel)携带更多的信息。个人有一个直观上的解释,就是老师网络更像一个专家或更会学习的人,他更能认识事物的本质,然后把他学到的东西以他的表征方式来传授给普通的大众,就能让普通大众也能掌握。

模型剪枝

除了前面的量化和蒸馏,剪枝也是一种常用的压缩模型的方法。朴素的理解,神经网络有诸多的计算路径,但是有些神经云路径对结果的贡献不大,去掉对应的部分对结果影响并不大。剪枝也分剪路径和剪节点,当然剪掉节点后,从这个节点出发后续的路径也就相应的都剪掉了。这么直接剪裁后,毕竟还是对模型产生了一定的影响,可以通过一定的retrain进行一部分的恢复。

Pruning

03. 总结

上面提到了几种模型压缩的方法,其实不管是何种手段,原始的大模型都是根基,各种手段只是在尽量少的牺牲精度的情况下,极大的降低计算开销,而不可能提升精准度。当前学术界还是在拼命的刷指标,工程界则在不停降低计算量,提升性能。学术界和工程界一起来完成AI的“顶天立地”,既要攀登科学高峰,探索AI能力的边界和极限,又要解决实际的工程和成本问题,是AI应用到具体实际的场景中。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇