算法面试高频知识点:模型部署总结

图片说明

----【模型部署】----

【一】模型压缩的必要性与可行性?

模型压缩是指对算法模型进行精简,进而得到一个轻量且性能相当的小模型,压缩后的模型具有更小的结构和更少的参数,可以有效降低计算和存储开销,便于部署在端侧设备中。

随着AI技术的飞速发展,不管是移动端产品还是线上产品,进行AI赋能都成为了趋势。这种情况下,AI算法的实时性与减少内存占用都显得极为重要。AI模型的参数在一定程度上能够表达其复杂性,但并不是所有的参数都在模型中发挥作用,部分参数作用有限,表达冗余,甚至会降低模型的性能。

【二】X86和ARM架构在深度学习侧的区别?

AI服务器与PC端一般都是使用X86架构,因为其高性能;AI端侧设备(手机/端侧盒子等)一般使用ARM架构,因为需要低功耗

X86指令集中的指令是复杂的,一条很长指令就可以很多功能;而ARM指令集的指令是很精简的,需要几条精简的短指令完成很多功能。

X86的方向是高性能方向,因为它追求一条指令完成很多功能;而ARM的方向是面向低功耗,要求指令尽可能精简。

【三】FP32,FP16以及Int8的区别?

常规精度一般使用FP32(32位浮点,单精度)占用4个字节,共32位;低精度则使用FP16(半精度浮点)占用2个字节,共16位,INT8(8位的定点整数)八位整型,占用1个字节等。

混合精度(Mixed precision)指使用FP32和FP16。 使用FP16 可以减少模型一半内存,但有些参数必须采用FP32才能保持模型性能。

虽然INT8精度低,但是数据量小、能耗低,计算速度相对更快,更符合端侧运算的特点。

不同精度进行量化的归程中,量化误差不可避免

在模型训练阶段,梯度的更新往往是很微小的,需要相对较高的精度,一般要用到FP32以上。在inference的阶段,精度要求没有那么高,一般F16或者INT8就足够了,精度影响不会很大。同时低精度的模型占用空间更小了,有利于部署在端侧设备中。

【四】GPU显存占用和GPU利用率的定义

GPU在训练时有两个重要指标可以查看,即显存占用和GPU利用率。

显存指的是GPU的空间,即内存大小。显存可以用来放模型,数据等。

GPU 利用率主要的统计方式为:在采样周期内,GPU 上有 kernel 执行的时间百分比。可以简单理解为GPU计算单元的使用率。

【五】神经网络的显存占用分析

Float32 是在深度学习中最常用的数值类型,称为单精度浮点数,每一个单精度浮点数占用4Byte的显存。

在整个神经网络训练周期中,在GPU上的显存占用主要包括:数据,模型参数,模型输出等。

数据侧:举个🌰,一个323128128的四维矩阵,其占用的显存 = 323128128*4 /1000 / 1000 = 6.3M

模型侧:占用显存的层包括卷积层,全连接层,BN层,梯度,优化器的参数等。

输出侧:占用的显存包括网络每一层计算出来的feature map以及对应的梯度等。

【六】影响模型inference速度的因素?

  1. FLOPs(模型总的加乘运算)
  2. MAC(内存访问成本)
  3. 并行度(模型inference时操作的并行度越高,速度越快)
  4. 计算平台(GPU,AI协处理器,CPU等)

【七】为何在AI端侧设备一般不使用传统图像算法?

AI端侧设备多聚焦于深度学习算法模型的加速与赋能,而传统图像算法在没有加速算子赋能的情况下,在AI端侧设备无法发挥最优的性能。

【八】减小模型内存占用有哪些办法?

  1. 模型剪枝
  2. 模型蒸馏
  3. 模型量化
  4. 模型结构调整

【九】有哪些经典的轻量化网络?

  1. SqueezeNet
  2. MobileNet
  3. ShuffleNet
  4. Xception
  5. GhostNet

【十】模型参数计算?

首先,假设卷积核的尺寸是,有个特征图作为输入,每个输出的特征图大小为,输出为个特征图。

由于模型参数量主要由卷积,全连接层,BatchNorm层等部分组成,我们以卷积的参数量为例进行参数量的计算分析:

卷积核参数量:

偏置参数量:

总体参数量:

【十一】模型FLOPs怎么算?

同样,我们假设卷积核的尺寸是,有个特征图作为输入,每个输出的特征图大小为,输出为个特征图。

由于在模型中卷积一般占计算量的比重是最高的,我们依旧以卷积的计算量为例进行分析:

FLOPS(全大写):是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。

FLOPs(s小写):是floating point operations的缩写(s表示复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

针对模型的计算量应该指的是FLOPs。

在上述情况下,卷积神经网络一次前向传播需要的乘法运算次数为:

同时,所要进行的加法计算次数分为考虑偏置和不考虑偏置:

(1)考虑偏置的情况:

为了得到输出的特征图的一个未知的像素,我们需要进行
$K\times KK\times K - 1$次加法,由于有C个通道,所以需要将结果乘以C,每个通道间的数要相加,所以需要C - 1次加法,最后再加上偏置的1次加法。

所以总的加法计算量如下:

所以总的卷积运算计算量(乘法+加法):

(2)不考虑偏置的情况:

总的卷积计算量:

卷积运算过程

#秋招##实习##面经##面霸的自我修养##面试八股文#
全部评论
佩服楼主啊
点赞
送花
回复 分享
发布于 2022-08-21 21:09 陕西
虽然我不懂,但看起来很厉害呀
点赞
送花
回复 分享
发布于 2022-08-22 16:36 北京
秋招专场
校招火热招聘中
官网直投
有用!
点赞
送花
回复 分享
发布于 2023-09-14 18:44 北京

相关推荐

21 147 评论
分享
牛客网
牛客企业服务