代码拉取完成,页面将自动刷新
同步操作将从 PaddlePaddle/PaddleSlim 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
动态离线量化,将模型中特定OP的权重从FP32类型量化成INT8/16类型。
量化前需要有训练好的预测模型,可以根据需要将模型转化为INT8或INT16类型,目前只支持反量化预测方式,主要可以减小模型大小,对特定加载权重费时的模型可以起到一定加速效果。
主要代码实现如下:
import paddleslim
model_dir = path/to/fp32_model_params
save_model_dir = path/to/save_model_path
paddleslim.quant.quant_post_dynamic(model_dir=model_dir,
save_model_dir=save_model_dir,
weight_bits=8,
quantizable_op_type=['conv2d', 'mul'],
weight_quantize_type="channel_wise_abs_max",
generate_test_model=False)
静态离线量化是基于采样数据,采用KL散度等方法计算量化比例因子的方法。相比量化训练,静态离线量化不需要重新训练,可以快速得到量化模型。
静态离线量化的目标是求取量化比例因子,主要有两种方法:非饱和量化方法 ( No Saturation) 和饱和量化方法 (Saturation)。非饱和量化方法计算FP32类型Tensor中绝对值的最大值abs_max
,将其映射为127,则量化比例因子等于abs_max/127
。饱和量化方法使用KL散度计算一个合适的阈值T
(0<T<mab_max
),将其映射为127,则量化比例因子等于T/127
。一般而言,对于待量化op的权重Tensor,采用非饱和量化方法,对于待量化op的激活Tensor(包括输入和输出),采用饱和量化方法 。
静态离线量化的实现步骤如下:
主要代码实现如下:
import paddleslim
exe = paddle.static.Executor(place)
paddleslim.quant.quant_post(
executor=exe,
model_dir=model_path,
quantize_model_path=save_path,
sample_generator=reader,
model_filename=model_filename,
params_filename=params_filename,
batch_nums=batch_num)
详细代码与例程请参考:静态离线量化
模型 | 压缩方法 | 原模型Top-1/Top-5 Acc | 量化模型Top-1/Top-5 Acc |
---|---|---|---|
MobileNetV1 | quant_post_static | 70.99%/89.65% | 70.18%/89.25% |
MobileNetV2 | quant_post_static | 72.15%/90.65% | 71.15%/90.11% |
ResNet50 | quant_post_static | 76.50%/93.00% | 76.33%/93.02% |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。