城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

PTQ(PostTrainingQuantization)源

4月28日 辞凤阙投稿
  PTQ(PostTrainingQuantization)源码阅读一
  最近在做模型量化相关工作,就研究下PTQ的原理和代码实现。PTQ原理部分已经有很多文章讲的都很好,有时间的话后面自己总结一篇原理篇。本文主要从PTQ代码实现来阐述。
  讲解代码前我们先看下PTQ的使用:loadmodelmodelloadmodel(modelpath)model。eval()registerquanthandlehookinforwardposthooksptqPTQ()modelptq。quantize(model)calibrationforkey,inputinreader:model(input)computequantparamsptq。ptq。convert(model)savequantmodeljit。save(model,quantmodelpath)
  我们先看下如何收集activation量化信息。ImperativePTQclassImperativePTQ(object):Staticposttrainingquantization。definit(self,quantconfigptqconfig。defaultptqconfig):Constructor。Args:quantconfig(PTQConfig):theconfigofposttrainingquantization。Theconfighasweightquantizerandactivationquantizer。Indefault,theweightquantizerisPerChannelAbsmaxQuantizerandtheactivationquantizerisKLQuantizer。super()。init()assertisinstance(quantconfig,ptqconfig。PTQConfig)self。quantconfigquantconfig
  ImperativePTQ是PTQ的实现类。输出参数为quantconfig,主要指明weightactivation的量化方法。默认的activationquantizer使用KLQuantizer,weightquntizer使用PerChannelAbsmaxQuantizer。classPTQConfig(object):ThePTQconfigshowshowtoquantizetheinputsandoutputs。definit(self,activationquantizer,weightquantizer):Constructor。Args:activationquantizer(BaseQuantizer):Theactivationquantizer。ItshouldbetheinstanceofBaseQuantizer。weightquantizer(BaseQuantizer):Theweightquantizer。ItshouldbetheinstanceofBaseQuantizer。super()。init()assertisinstance(activationquantizer,tuple(SUPPORTACTQUANTIZERS))assertisinstance(weightquantizer,tuple(SUPPORTWTQUANTIZERS))self。inactquantizercopy。deepcopy(activationquantizer)self。outactquantizercopy。deepcopy(activationquantizer)self。wtquantizercopy。deepcopy(weightquantizer)self。quanthookhandleNoneInordertowrapsimulatedlayers,useinactquantizertocalculatetheinputthresholdsforconv2d,linearandetc。self。enableinactquantizerFalsedefaultptqconfigPTQConfig(KLQuantizer(),PerChannelAbsmaxQuantizer())
  其中quanthookhandle是Layer的fowardposthook的handle。
  enableinactquantizer是否使用inactquantizer计算输入激活的量化参数。activation默认使用KLQuantizer量化器。weight默认使用PerChannelAbsmaxQuantizer量化器。isskiplayer和isquantlayer
  模型一般是一层一层堆叠起来的,框架提供的nn。Conv2d,nn。Linear层一般作为基础层来搭建模型网络。量化时我们需要知道哪些层需要量化,哪些层不需要量化。可以通过isskiplayer和isquantlayer两个静态类方法获得。staticmethoddefisskiplayer(layer):returnhasattr(layer,skipquant)andlayer。skipquantTruestaticmethoddefisquantlayer(layer):returnhasattr(layer,quantconfig)isleaflayerdefisleaflayer(layer):Whetherthelayerisleaflayer。returnisinstance(layer,paddle。nn。Layer)andlen(layer。sublayers())0
  layer的sublayers空时为叶子节点。quantizedefquantize(self,model,inplaceFalse,fuseFalse,fuselistNone):Addquantconfigandhooktothetargetlayer。Args:model(paddle。nn。Layer):Themodeltobequantized。inplace(bool):Whetherapplyquantizationtotheinputmodel。Default:False。fuse(bool):Whethertofuselayers。Default:False。fuselist(list):Thelayersnamestobefused。Forexample,fuselist〔〔conv1,bn1〕,〔conv2,bn2〕〕。ATypeErrorwouldberaisediffusewassetasTruebutfuselistwasNone。Default:None。Returnquantizedmodel(paddle。nn。Layer):Thequantizedmodel。assertisinstance(model,paddle。nn。Layer),Themodelmustbetheinstanceofpaddle。nn。Layer。ifnotinplace:modelcopy。deepcopy(model)iffuse:model。eval()modelfuseutils。fuselayers(model,fuselist)
  我们看下模型量化的入口,model是模型实例,inplace指明是否在原图上操作,fuse和fuselist用户指定是否对模型做fuse操作。该接口最终返经过处理(用于收集模型各层activation的信息)后的模型。forname,layerinmodel。namedsublayers():if(PTQRegistry。issupportedlayer(layer)andutils。isleaflayer(layer)andnotself。isskiplayer(layer)):Addquantconfigquantconfigcopy。deepcopy(self。quantconfig)ifPTQRegistry。issimulatedquantlayer(layer):quantactivationquantconfig。enableinactquantizerTruelayer。quantconfigquantconfigregisterhookhookptqhooks。quantforwardposthookquanthookhandlelayer。registerforwardposthook(hook)quantconfig。quanthookhandlequanthookhandlelayer。forwardposthooks。movetoend(quanthookhandle。hookid,lastFalse)returnmodel
  首先遍历各层,判断该层:是否支持量化。是否是叶子层。是否跳过该层。
  PTQRegistry是一个字典,后续再看下其实现。
  如果满足上述条件,则对该层添加量化处理:层中保存量化配置参数quantconfig。如果是模拟量化层(针对inputweight量化)的话,开启enableinactquantizer。再层中注册registerforwardposthook,其实现为ptqhooks。quantforwardposthook。
  我们看下quantforwardposthook的实现:defquantforwardposthook(layer,inputs,outputs):TheforwardposthookforPTQ。asserthasattr(layer,quantconfig),Thelayershouldhavequantconfigattrqclayer。quantconfigifqc。enableinactquantizer:qc。inactquantizer。sampledata(layer,inputs)qc。outactquantizer。sampledata(layer,(outputs,))
  在forward完成后,通过qc。outactquantizer收集outputs的activation数据。
  根据qc。enableinactquantizer的配置确定是否收集inputs的activation数据。
  我们知道,只有PTQRegistry。issimulatedquantlayer(layer)真(目前只有nn。Conv2Dnn。Linaer时为真)的时候qc。enableinactquantizer为真。
  KLQuantizer、PerChannelAbsmaxQuantizer的实现我们后面再讨论。
  至此,处理完各层后返回model对象。后续使用校准数据过model,收集activation分布。
投诉 评论 转载

vivoX90Pro深度评测一英寸大底蔡司光学影像旗舰,出片vivoX系列手机在影像着方面一直走在行业前列,我从X60Pro一直用到现在的X90Pro,每一代产品都没有让我失望,的确是没有最好,只有更好,所以对喜欢手机拍摄的朋友来说,v……请欣赏宁波家庭年宴(第一波)我和妻都是大家族,过年从各个长辈家一轮吃下来,春节这几天休息日根本不够,加上家族中有几对是外地媳妇或外地女婿,春节还要拖儿带女回老家住上几天,给当地长辈拜岁。所以在宁波的……12月时薪增长明显降温,美联储会放慢加息吗?记者崔璞玉美国劳动力市场继续保持强劲,但工资增速有所降温,为美联储放缓加息提供了空间。美国劳工部周五发布的数据显示,去年12月美国非农就业人数新增22。3万,低于下……落后43分,落后25分!3。4亿豪阵现原形,王朝终结者作茧自NBA常规赛激战正酣,30支球队大展拳脚,联盟格局初具雏形,每一支球队的崛起都有方法,每一支球队的挣扎都有原因。将时光拨回到常规赛开打之前,西部的勇士、快船,东部的篮网、绿军、……西施有礼文创品牌发布IP新形象开启西子嘉年华活动为迎接西施故里旅游区新产品、新业态的全面亮相,1月8日,由诸暨市文化旅游集团主办的西子嘉年华暨西施故里新品发布活动在西施故里旅游区举行,现场发放总额3000万元的西施有礼春暖暨……机迷游戏日报米哈游起诉三七互娱NIKKE总收入超1。7亿美元【《鹅鸭杀》Steam最高同时在线人数已突破56万】据SteamDB数据显示,《鹅鸭杀》Steam最高同时在线已经突破56。3万人,官方曾表示四十万左右是服务器的极限,看……凌晨突发!巴西球王贝利去世防控是否放开太快?国家卫健委回应!来看昨夜重要消息。北京时间12月30日凌晨,巴西圣保罗市阿尔伯特爱因斯坦医院发布公告称,巴西知名运动员、球王贝利因结肠癌引发多器官衰竭去世,终年82岁。贝利本名埃德……强大的新粒子,主宰初期宇宙,但最后消失了,怎么回事?图:早期的宇宙抽象图及量子物理当原始宇宙还处于第二阶段时,一种奇怪的超级粒子(实际上并不是粒子)主宰了整个时空,并释放出阵阵涟漪。这种被称为示波器的物质可能充满能量波,并……Java中synchronized的底层实现原理一、对象头、MarkWord、monitor、synchronized怎么关联起来(1)首先java里面每个对象JVM底层都会为它创建一个监视器monitor,这个是JV……女人过得好不好,看心就知道作家王尔德说:我们都生活在阴沟里,但仍有人仰望星空。面对生活的不如意,有的人难免心怀怨念,或者灰心丧气,但有的人,却可以把目光投向星辰大海。同样的困境,不同的结局,……对亲人暴躁,对外人和气的人,多半是这种生活状态,看完值得反思来源:大河报对陌生人和气,对亲人暴躁,大多数人好像都如此。迫于生活的压力,出门在外,对别人礼貌客气,回家就变成了易燃易爆炸。一边控制不住脾气,一边又感到后悔不已。总……PTQ(PostTrainingQuantization)源PTQ(PostTrainingQuantization)源码阅读一最近在做模型量化相关工作,就研究下PTQ的原理和代码实现。PTQ原理部分已经有很多文章讲的都很好,有时……
列那狐诱捕公鸡尚特克勒500万一场未打,4000万场场拉跨!仅靠三旬老汉何以打天下原来秋天可以这么美,是时候为广西的秋天刷下存在感了安徽考生初到浙江,在小饭馆里点5个菜,没想到口味十分正宗令人无法拒绝的新疆水果摊,网友我的梦中情摊不同风格全拿下,松下纤尚系列冰箱为厨居一体松带来新主张时隔多年!大兴小商品这块儿又要热闹起来了2022年总统系列游轮详细介绍,长江上最具性价比的豪华游轮坏消息?WWE为何一直不让布利斯回归,原因是不是与伤病有关?摘抄分享4WTT新加坡大满贯王曼昱孙颖莎女双夺冠樊振东马龙男单争冠杨帆AI基础设施为其发展提供规模化高效率低成本的基础支撑
中学生抑郁症有什么特征最令人窒息的婚姻,不是争吵,而是寸步不让哭着造句用哭着造句大全我看到了阳光作文天路辛路第九页怎样克服恋物癖送房送车送抽奖活动是如何成为推广者互动引流的利器如何更好的教育孩子教育孩子的方法猴面包树为什么是非洲的生命之树?浑身是宝,可以在中国种植吗?未来10年首批6G产品及基础设施会面世中国工程院院士张平来渝孕妇强迫症发生在什么时候南充黄金今日多少钱一克

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁