paddleslim 目录1.简介2.paddleS
作者:admin 发布时间:2023-04-05 13:16:40 分类:答疑 浏览:117
目录
1.简介
2.paddleSlim量化步骤
2.1量化训练API
2.2示例
1.简介
量化训练要解决的问题是将FP32浮点数量化成INT8整数进行存储和计算,通过在训练中建模量化对模型的影响,降低量化误差。
PaddleSlim使用的是模拟量化训练方案,一般模拟量化需要先对网络计算图进行一定的处理,先在需要量化的算子前插入量化-反量化节点,再经过finetune训练减少量化运算带来的误差,降低量化模型的精度损失。
2.paddleSlim量化步骤
构建模型和数据集进行预训练量化训练导出预测模型
2.1量化训练API
classpaddleslim.QAT(config=None, weight_preprocess=None, act_preprocess=None, weight_quantize=None, act_quantize=None)
使用该API可将模型转为模拟量化模型,使用量化训练方法QAT?(Quant Aware Training, QAT)。
参数:
config(dict, Optional)?- 量化配置表。 默认为None,表示使用默认配置, 默认配置参考下方文档。weight_preprocess(class, Optional)?- 自定义在对权重做量化之前,对权重进行处理的逻辑。这一接口只用于实验不同量化方法,验证量化训练效果。默认为None, 表示不对权重做任何预处理。act_preprocess(class, Optional)?- 自定义在对激活值做量化之前,对激活值进行处理的逻辑。这一接口只用于实验不同量化方法,验证量化训练效果。默认为None, 表示不对激活值做任何预处理。weight_quantize(class, Optional)?- 自定义对权重量化的方法。这一接口只用于实验不同量化方法,验证量化训练效果。默认为None, 表示使用默认量化方法。act_quantize(class, Optional)?- 自定义对激活值量化的方法。这一接口只用于实验不同量化方法,验证量化训练效果。默认为None, 表示使用默认量化方法。
?模型转换为模拟量化的三步:定义模型、配置config、转换为模拟量化模型。
from paddle.vision.models import mobilenet_v1
from paddleslim import QAT
net=mobilenet_v1(pretrained=False)
# 配置config
quant_config={
'activation_preprocess_type': 'PACT',
'quantizable_layer_type': ['Conv2D', 'Linear'],
}
# 模型转换
quanter=QAT(config=quant_config)
quanter.quantize(lenet)
# 打印模型信息
paddle.summary(net, (1, 3, 224, 224))
config的配置
{
# weight预处理方法,默认为None,代表不进行预处理;当需要使用`PACT`方法时设置为`"PACT"`
'weight_preprocess_type': None,
# activation预处理方法,默认为None,代表不进行预处理`
'activation_preprocess_type': None,
# weight量化方法, 默认为'channel_wise_abs_max', 此外还支持'channel_wise_abs_max'
'weight_quantize_type': 'channel_wise_abs_max',
# activation量化方法, 默认为'moving_average_abs_max', 此外还支持'abs_max'
'activation_quantize_type': 'moving_average_abs_max',
# weight量化比特数, 默认为 8
'weight_bits': 8,
# activation量化比特数, 默认为 8
'activation_bits': 8,
# 'moving_average_abs_max'的滑动平均超参, 默认为0.9
'moving_rate': 0.9,
# 需要量化的算子类型
'quantizable_layer_type': ['Conv2D', 'Linear'],
}
2.2示例
创建模型和数据
import paddle
import paddle.vision.models as models
from paddle.static import InputSpec as Input
from paddle.vision.datasets import Cifar10
import paddle.vision.transforms as T
from paddleslim.dygraph.quant import QAT
net=models.mobilenet_v1(pretrained=False, scale=1.0, num_classes=10)
inputs=Input([None, 3, 32, 32], dtype='float32', name='image')
labels=Input([None, 1], dtype='int64', name='label')
optmizer=paddle.optimizer.Momentum(learning_rate=1e-1, parameters=net.parameters())
model=paddle.Model(net, inputs, labels)
model.prepare(optimizer=optmizer, loss=paddle.nn.CrossEntropyLoss(), metrics=paddle.metric.Accuracy(topk=(1, 5)))
transform=T.Compose([T.Transpose(), T.Normalize([127.5], [127.5])])
train_dataset=Cifar10(mode='train', backend='cv2', transform=transform)
val_dataset=Cifar10(mode='test', backend='cv2', transform=transform)
预训练?
model.fit(train_dataset, epochs=5, batch_size=256, verbose=1)
model.evaluate(val_dataset, batch_size=256, verbose=1)
评估精度为0.94?
{'loss': [1.0521829], 'acc': 0.943}
?转化为量化模型
# 当使用普通量化策略时weight_preprocess_type 用默认设置None即可,当需要使用PACT量化策略时,则设置为’PACT’。
quant_config={
# weight preprocess type, default is None and no preprocessing is performed.
'weight_preprocess_type': None,
# for dygraph quantization, layers of type in quantizable_layer_type will be quantized
'quantizable_layer_type': ['Conv2D', 'Linear'],
}
quanter=QAT(quant_config)
quanter.quantize(net)
微调
# finetune量化模型
model.fit(train_dataset, epochs=2, batch_size=256, verbose=1)
model.evaluate(val_dataset, batch_size=256, verbose=1)
评估精度为0.94,未见明显下降。
{'loss': [0.9758247], 'acc': 0.9447}
?导出的量化模型相比原始FP32模型,模型体积没有明显差别,这是因为量化预测模型中的权重依旧保存为FP32类型。在部署时,使用PaddleLite opt工具转换量化预测模型后,模型体积才会真实减小。
pytorch的量化:深度学习模型量化(低精度推理)大总结
相关推荐
- 奥比岛邮递员 1、《奥比岛》由广州百田信息科
- 核级阀门 1、大连大高阀门有限公司是在原
- 房屋建筑风水 房子对于人们来说是一件重大的事
- 木瓜牛奶 木瓜是很常见的水果,含有丰富的
- 太阳神战记 1、太阳神之翼神龙(ラーの翼神
- 属于你我的森林 01穿过挪威的森林让我走进你梦
- 权嘉云 权嘉云的拼音怎么读权嘉云的拼音
- 新天骄外挂 巨野幻境过图脚本不是壤城幻境搞
- 康达尔集团 1、罗爱华,女,1960年12
- 如何进行投资理财 经常投资的投资者都知道,小额理
- 梵怎么读 梵,汉语汉字,读音为fàn,意
- 柯尔特双枪 1、柯尔特双枪,游戏《穿越火线
- 古田二路翠堤春晓 1、翠堤春晓小区是位于成都市武
- 汤淼现任妻子 1、汤淼现在是有老婆的!汤淼什
- 波音公司声明 自从2000年开始到现在波音7
- 欣杨无圣光 近日有网友晒出了一张欣杨无圣光
- 牵挂的近义词 1、牵挂的近义词是惦念、想念、
- 果蔬纤维代餐粉 1、康比特果蔬纤维代餐粉以天然
- 泰国英拉简介 英拉简介2019-02-281
- 堂皇的意思 堂,正房,高大的房子,可以用来
- 海南style 1、海南屯昌农博会历经4年,成
- 北京上调养老金标准 北京市人社局发布了北京市202
- 浙江传媒学院校花 1,伶佳是浙江传媒学院大一的是
- 李一男 【导语】华为的牛人有很多,无论
- 童年读后感600字 在现实生活或工作学习中,大家都
- 百世金谷 1、百世金谷实业有限公司自成立
- 秦安一中 秦安一中前身是“秦安县立初级中
- 湖南广益大宗商品 在金融行业,大宗商品是一个比较
- 彭冠英的老婆 近日,有媒体目击到彭冠英出现在
- 成也萧何败萧何是什么意思 1、萧何:汉高祖刘邦的丞相。2
- 最新推荐
-
- 野心勃勃的意思 【野心勃勃】的意思,拼音,读音
- 梦幻诛仙青云门加点 梦幻诛仙青云门加点,相信很多小
- 卡天赋bug 卡天赋bug之前,最烦人的就是
- 颊 【颊】字的意思解释,拼音,组词
- 百无禁忌什么意思 【百无禁忌】的意思,拼音,读音
- 对方 【对方】的意思,拼音,读音
- profiled单词的意思,例句
- 自树一帜的意思,拼音
- 拾人牙慧什么意思 【拾人牙慧】的意思,拼音,读音
- 倦的组词 疲倦
- 酒席 【酒席】的意思,拼音,读音等)
- 步步生莲游戏 阴阳师谋士任务中怎么种莲花?玩
- 叠组词 重叠
- 雀圣1演员表 演员表角色演员备注十三飞元秋雀
- 火炬之光2修改器怎么用 火炬之光2修改器怎么用?《火炬
- 地牢围攻1攻略 地牢围攻1攻略及地牢围攻1攻略
- derivative单词的意思,例句
- 硬派 【硬派】的意思,拼音,读音等)
- 年年 【年年】的意思,拼音,读音
- supplying单词的意思,例句
- 繁弦急管的意思 【繁弦急管】的意思,拼音,读音
- 引诱 【引诱】的意思,拼音,读音
- 遗嘱的拼音 【遗嘱】的意思,拼音,读音等)
- 求道 【求道】的意思,拼音,读音等)
- 夏组词 “夏”组词,拼音,解释夏橘夏成
- brutally单词的意思,例句
- 生化危机5秘籍 生化危机5攻略秘籍及生化危机5
- 国手是什么意思 【国手】的意思,拼音,读音
- bitty单词的意思,例句
- 瓜田李下的意思,拼音
- 天下3职业介绍 天下3职业加点和天下3职业技能
- looting单词的意思,例句
- 缀的组词和拼音 【缀】字的意思解释,拼音,组词
- 慎的组词 “慎”组词,拼音,解释慎狱慎防
- 中国乒乓球运动员 中国乒乓球十大巨星中国乒乓球十
- 诡组词 【诡】字的意思解释,拼音,组词
- 极限的祭坛攻略 极限的祭坛攻略及地下城极限的祭
- 冷暖自知的意思 【冷暖自知】的意思,拼音,读音
- 跳水拼音 【跳水】的意思,拼音,读音等)
- 朱墨 【朱墨】的意思,拼音,读音等)
- 刀剑2公测 刀剑2什么时候公测?可能有部分
- 通天塔电影解析 2007年奥斯卡结束当夜,罗杰
- 楷怎么读 【楷】字的意思解释,拼音,组词
- 受罚 【受罚】的意思,拼音,读音
- 鬼镜1 (本文由火锅剧场原创:hott
- 瞎子摸象的意思,拼音
- 弦组词 “弦”组词,拼音,解释弦脉弦韦
- tighten单词的意思,例句
- 莫须有 【莫须有】的意思,拼音,读音等
- 无能 【无能】的意思,拼音,读音等)
- 凉帽 【凉帽】的意思,拼音,读音
- 隐姓埋名 【隐姓埋名】的意思,拼音,读音
- 清理平台 清理平台任务完成攻略清理平台任
- 四不像是什么 【四不像】的意思,拼音,读音等
- 驱魔师pk加点 驱魔师pk加点和法驱魔师加点,
- 猎刃好玩吗 猎刃好玩吗?猎刃怎么样?猎刃游
- 国统纲领 国统纲领全名为国家统一纲领,经
- 验的组词 “验”组词,拼音,解释验明正身
- 独组词 独立
- 外宽内深 【外宽内深】的意思,拼音,读音