优化方向一:计算优化
>>模型结构优化
针对业务特点,设计精度高、鲁棒性强深度学习模型,比如一些精度网络的设计:ResNet
, MobileNet
, GoogleNet
、YOLO
、SSD
等
>>深度模型剪枝
模型剪枝分:结构化剪枝和非结构化剪枝
结构化剪枝
- 滤波器剪枝:对卷积核进行纵向修剪
- 通道剪枝:对卷积核进行横向修剪
- 层剪枝:直接删除整个卷积层
非结构化剪枝
- 细粒度剪枝:对连接或神经元进行剪枝,类型
dropout
操作 - 向量剪枝:比细粒度剪枝粒度更大,对卷积核内部剪枝,类似
dropconnect
操作 - 卷积核剪枝:去除某个卷积核,类似
droplayer
优缺点: 受底层计算平台限制较多,精度损失明显失效,适用于精度不敏感的模型推理应用场景
>>深度模型量化
模型量化方法:将float-32映射到int类型,分为:线性量化和非线性量化
- 线性量化:float-32映射到int的间隔相同,对称量化
- 非线性量化:float-32映射到int类型间隔不同,非对称量化
- 随机量化:与非对称量化类型,在量化中引入噪音
量化类型:
- 动态量化:网络训练后量化。根据不同的输入,计算出不同的缩放因子,性能差、用于非常大的模型
- 静态量化:网络训练后量化。将缩放因子固定住,性能比动态量化好,适用中大型模型
- 量化感知:网络训练中量化。将量化插入到网络中,边训练边量化,训练速度低,精度高
优缺点: 技术适用较广,加速明显。
>>深度模型蒸馏
用teacher
模型指导student
模型,以期待提高student
模型精度,一般来说,teacher
模型精度高,不过计算复杂度也大
不适用在终端设备部署,而student
模型计算复杂度虽符合终端设备部署,但精度不够,为此可采用蒸馏处理
蒸馏更适合于分类任务,对于teacher
和student
模型的选择,对蒸馏也起到一定的作用
一般说,teacher
和students
的结构越是类似,蒸馏后的两者精度差异就越小
优化方向二:系统优化
通信机制优化:利用分布式集群等技术,提高模型训练速度和推理速度
可参见:https://www.usenix.org/conference/
优化方向三:硬件推理优化
>>深度模型推理硬件
GPU/TPU/NPU
>>深度模型推理加速库/部署工具:
NCNN:腾讯公司开发的移动端平台部署工具
TensorRT:NVIDIA公司针对自家GPU开发的部署工具
MediaPipe: 谷歌针对自家硬件设备和深度学习框架开发的部署工具
ONNX:微软、亚马逊等公司开发的神经网络交换格式
除此之外还有一些深度学习框架有自己的专用部署工具如:
TFLITE:tensorflow为自己提供的部署服务
LibTorch:pytorch为自己提供的部署服务