paddle模型cpu部署,压缩,量化

NAS介绍

神经结构搜索(Neural Architecture Search,简称NAS)
NAS的原理是给定一个称为搜索空间的候选神经网络结构集合,用某种策略从中搜索出最优网络结构。神经网络结构的优劣即性能用某些指标如精度、速度来度量,称为性能评估。这一过程如下图所示。
paddle模型cpu部署,压缩,量化_第1张图片

NAS 参数重要性定义

首先对预训练模型的参数和head根据其重要性进行重排序,把重要的参数和head排在参数的前侧,保证训练过程中的参数裁剪不会裁剪掉这些重要的参数。参数的重要性计算是先使用dev数据计算一遍每个参数的梯度,然后根据梯度和参数的整体大小来计算当前参数的重要性,head的的重要性计算是通过传入一个全1的对head的mask,并计算这个mask的梯度,根据mask的梯度来判断每个Multi-Head Attention层中每个Head的重要性。

两种蒸馏压缩方式差异

由BERT到Bi-LSTM的知识蒸馏和使用DynaBERT中的策略对BERT进行压缩本质上的原理是一样的,只不过第一种方式蒸馏到的学生模型的结构是已知固定提取定义好的,第二种方式是通过不断的搜索比对得出的。

量化部署

量化
一般而言,神经网络模型的参数都是用的32bit长度的浮点型数表示。实际上,有时不需要保留那么高的精度,可以通过量化的方法减少模型的存储空间,通常用INT8代替Float32存储。比如,SGD(Stochastic Gradient Descent)所需要的精度仅为6~8bit,因此合理的量化网络也可保证精度的情况下减小模型的存储体积,并且能够大幅度加速,使得神经网络在CPU上的运行成为可能。通常,量化包含多种方法,例如:二值神经网络、三元权重网络以及XNOR网络。

要求

5 Paddle Inference 部署量化模型
检查机器
大家可以通过在命令行红输入lscpu查看本机支持指令。
在支持avx512_vnni的CPU服务器上,如:Casecade Lake, Model name: Intel® Xeon® Gold X2XX,INT8精度和性能最高,INT8性能提升为FP32模型的3~3.7倍。
在支持avx512但是不支持avx512_vnni的CPU服务器上,如:SkyLake, Model name:Intel® Xeon® Gold X1XX,INT8性能为FP32性能的1.5倍左右。

请确保机器支持完整的avx512指令集。

步骤

X86 CPU部署量化模型的步骤:

产出量化模型:使用PaddleSlim训练并产出量化模型,用户可以使用PaddleSlim产出量化训练模型或者离线量化模型。
转换量化模型:将量化模型转换成最终部署的量化模型
部署量化模型:使用Paddle Inference预测库部署量化模型

流程步骤如下:

产出量化模型:使用PaddleSlim训练并产出量化模型。注意模型中被量化的算子的参数值应该在INT8范围内,但是类型仍为float型。
在CPU上转换量化模型:在CPU上使用DNNL库转化量化模型为INT8模型。
在CPU上部署预测:在CPU上部署样例并进行预测。

参考X86 Linux上预测部署示例和X86 Windows上预测部署示例,准备预测库,对模型进行部署。
请注意,在X86 CPU预测端部署量化模型,必须开启MKLDNN,不要开启IrOptim。

if args.model_dir == "":
    config = Config(args.model_file, args.params_file)
else:
    config = Config(args.model_dir)
config.enable_mkldnn()
config.set_cpu_math_library_num_threads(args.threads)
config.switch_ir_optim(False)
config.enable_memory_optim()

predictor = create_predictor(config)

你可能感兴趣的:(PaddlePaddle,paddle模型部署,NLP实战项目,paddle,神经网络,深度学习)