范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

PTQ(PostTrainingQuantization)源码阅读二

  PTQ(Post Training Quantization)源码阅读二
  上文提到了  PTQRegistry  这个类,主要功能是作为dict来存储 nn.Layer -> LayerInfo  的映射。我们看下这个类的实现。LayerInfoclass LayerInfo(object):     """     Store the argnames of the inputs and outputs.     """      def __init__(self, layer, input_names: List[TEXT], weight_names: List[TEXT], output_names: List[TEXT]):         super().__init__()         self.layer = layer         self.input_names = input_names         self.weight_names = weight_names         self.output_names = output_names
  主要存储  nn.Layer ,及其对应的输入、权重和输出名。
  全局参数  PTQ_LAYERS_INFO , QUANT_LAYERS_INFO  和 SIMULATED_LAYERS  汇总目前支持量化的层的 LayerInfo  如下: PTQ_LAYERS_INFO = [     LayerInfo(paddle.nn.Conv2D, ["Input"], ["Filter"], ["Output"]),     LayerInfo(paddle.nn.Linear, ["X"], ["Y"], ["Out"]),     LayerInfo(paddle.nn.BatchNorm2D, ["X"], [], ["Y"]),     LayerInfo(paddle.nn.AdaptiveMaxPool2D, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.AdaptiveAvgPool2D, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.AvgPool2D, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.MaxPool2D, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.ReLU, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.ReLU6, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.Hardswish, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.Swish, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.Sigmoid, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.Softmax, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.Tanh, ["X"], [], ["Out"]),     LayerInfo(paddle.nn.quant.add, ["X", "Y"], [], ["Out"]), ]  QUANT_LAYERS_INFO = [     LayerInfo(         paddle.nn.quant.quant_layers.QuantizedConv2D,         ["Input"],         ["Filter"],         ["Output"],     ),     LayerInfo(         paddle.nn.quant.quant_layers.QuantizedLinear, ["X"], ["Y"], ["Out"]     ), ]  SIMULATED_LAYERS = [paddle.nn.Conv2D, paddle.nn.Linear]
  PTQ_LAYERS_INFO 中存储目前支持量化的层和对应的输入、输出、权重名字。
  QUANT_LAYERS_INFO  是量化新实现支持的 LayerInfo。这种实现方式等价 torch 基于 nn.QuantModule 的实现。
  SIMULATED_LAYERS  存储的针对 input/weight 量化的层。模拟量化层会采集层的 input 的分布。weight 分布不需要采集。
  模拟量化这里应该指的是 Fake Quantization.
  PTQRegistry
  PTQRegistry  用于对上面三个全局变量查询访问使用.class PTQRegistry(object):     """     Register the supported layers for PTQ and provide layers info.     """      supported_layers_map = {}     registered_layers_map = {}     is_inited = False      def __init__(self):         super().__init__()      @classmethod     def _init(cls):         if not cls.is_inited:             for layer_info in PTQ_LAYERS_INFO:                 cls.supported_layers_map[layer_info.layer] = layer_info              all_layers_info = PTQ_LAYERS_INFO + QUANT_LAYERS_INFO             for layer_info in all_layers_info:                 cls.registered_layers_map[layer_info.layer] = layer_info         cls.is_inited = True
  cls.supported_layers_map  存储 PTQ_LAYERS_INFO  的内容。
  cls.registered_layers_map  存储 PTQ_LAYERS_INFO + QUANT_LAYERS_INFO  的内容。
  注意,这里的 key 是 nn.Layer 子类。
  四个查询接口如下,不做过多介绍了。:  @classmethod     def is_supported_layer(cls, layer):         """         Analyze whether the layer supports quantization.         Args:             layer(Layer): The input layer can be a python class or an instance.         Returns:             flag(bool): Whther the layer is supported.         """         cls._init()         return layer in cls.supported_layers_map or isinstance(             layer, tuple(cls.supported_layers_map.keys())         )      @classmethod     def is_registered_layer(cls, layer):         """         Analyze whether the layer is register layer_info.         Args:             layer(Layer): The input layer can be a python class or an instance.         Returns:             flag(bool): Wether the layer is register layer_info.         """         cls._init()         return layer in cls.registered_layers_map or isinstance(             layer, tuple(cls.registered_layers_map.keys())         )      @classmethod     def is_simulated_quant_layer(cls, layer):         """         Analyze whether the layer is simulated quant layer.         Args:             layer(Layer): The input layer can be a python class or an instance.         Returns:             flag(bool): Whther the layer is supported.         """         return layer in SIMULATED_LAYERS or isinstance(             layer, tuple(SIMULATED_LAYERS)         )      @classmethod     def layer_info(cls, layer):         """         Get the infomation for the layer.         Args:             layer(Layer): The input layer can be a python class or an instance.         Returns:             layer_info(LayerInfo): The layer info of the input layer.         """         assert cls.is_registered_layer(             layer         ), "The input layer is not register."          for layer_key, layer_info in cls.registered_layers_map.items():             if layer == layer_key or isinstance(layer, layer_key):                 return layer_info 参考文献利用 NVIDIA TensorRT 量化感知训练实现 INT8 推理的 FP32 精度

温馨!郎平新年喜迎魏秋月做客,1岁孙子叫姥姥,郎导叮嘱教他打排球1月4日消息,4日一大早,前中国女排主教练郎平在社交媒体上晒出了自己拍摄的微电影,其中与女排队长魏秋雨母子的甜蜜互动,让人十分暖心!今天一大早,前女排主教练郎平在社交媒体上晒出了自詹姆斯数据2022年1月4日实时播报勒布朗。詹姆斯三项主要数据得分篮板助攻2022年1月4日实时播报距离常规赛40000分还差3893分。目前得分36107分。距离常规赛10000个篮板还差54个,目前总篮板9946奥卡福加盟CBA!大杀器终于来了终于还是混到了这一步根据国内媒体人的报道,前NBA球员贾利尔奥卡福将加盟广厦男篮虽然目前没有官方明确的消息,但据该位爆料人表示,奥卡福已经来到了国内,开始进行一系列的隔离程序和注册失踪人口回归!中国首位入籍国脚恢复训练,已回英国近5个月了北京时间1月4日,中国首位入籍国脚李可晒出了自己健身房恢复训练的视频,这位28岁的中场的伤病问题终于好了。距离李可离开中国回到英国,已经接近5个月,李可,何时归来?作为中国足球史上职业选手名人堂丨爱打篮球的三分月果仔,新的一年重新出发第七期职业选手名人堂三分月果仔01选手介绍姓名姚兴选手ID三分月果仔生日1999年10月18日星座天秤座职业荣誉(近三年)2019年MPL夏季赛冠军秋季赛亚军娱乐星赛季冠军2020当年杨影被迫辞职,高菡顶替其上位,国乒选手真的不适合做解说吗昨天有粉丝私信我,国乒御用解说杨影干嘛去了?被高菡顶替了么?其实杨影一直是一位备受争议的国乒解说员,反观现在的高菡上位之后却好评不断,难道一个乒乓球世界冠军争不过一个主持人吗?还是knight再次登顶韩服榜首,同为顶级选手,UZI却只能在大师段混?大家好,我是燃烧。刚刚韩服Rank排行榜迎来了更新,knight再次超越xiaohuangren位列榜首,前三名分别是TES。knightTT。Y。xiaohuangrenBo。尽Faker成LCK最老选手!DRX组成半百下路,Chovy中文名曝光前言各大赛区2022年春季赛即将到来,LPL将于1月10日开始,而LCK赛区则是在1月12日开启。通过冬季转会期的操作,T1与GEN被认为是两支最有可能获得春季赛冠军的队伍。近日,艾达咖啡馆活动里的小细节,玩家我要当金牌店长要说幻塔现在什么活动最火,那一定是艾达咖啡馆无疑了。艾达咖啡馆是幻塔推出的一种休闲玩法,玩法简单有趣,但想要想做到完美也是非常不容易的。最近在各大论坛上经常能看见一些玩家的求助帖子14个排名赛冠军稳居历史前十!丁俊晖是名副其实的亚洲第一人丁俊晖是中国斯诺克历史以来最伟大的传奇球员,也是世界斯诺克历史以来最伟大的非英伦三岛球员之一。世界名将罗伯逊和塞尔比曾将丁俊晖誉为斯诺克的英雄,因为丁俊晖的出现为世界斯诺克带来了活34分狂胜,上海队6人上双打疯了!李春江撞大运,5球星助他冲冠北京时间1月3日,CBA常规赛继续进行,上海队迎来宁波队的挑战!上海队在进入第2阶段后表现愈发强势,取得了一波3连胜,以13胜3负的战绩位列联赛第4位,距离第1的辽宁也不过只有1场
老李带你走新疆(原创连载5)天山伊犁概述天山,位于欧亚大陆腹地,横跨中国哈萨克斯坦吉尔吉斯斯坦和乌兹别克斯坦四国,全长约2500千米,主峰托木尔峰海拔7443米,是世界上距离海洋最远的山系和全球干旱地区最大的山系。天吴忠琼宣布开工!2023年赣州首个预制菜项目在信丰开建1月6日上午,总投资10亿元年生产各类肉制品10万吨的得利斯华南预制食品产业园项目在信丰县正式签约开工。这是我市2023年开工的首个预制菜项目,是全市推进预制菜产业发展三年行动的重秦创原西咸新区氢能产业政策发布首批加氢站和氢能商用车投用来源西部网(陕西新闻网)西部网讯(记者刘望)今天(1月6日),秦创原西咸新区氢能产业政策发布,首批加氢站和氢能商用车投用。秦创原西咸新区氢能产业政策发布,首批加氢站和氢能商用车投用工联网2023年1月6日工业互联网产业新闻河北发布2022年工业互联网创新发展试点项目(第二批)名单50个项目入日前,河北省工业和信息化厅发布2022年工业互联网创新发展试点项目(第二批)名单,河钢集团石家庄钢铁有限责任公我家孩子什么时候可以开始使用代币了?家长提问1我的孩子对强化物太依赖了,有强化物就做任务,没有强化物就不做任务,怎么样才可以不需要每次都用强化物呢?家长提问2孩子每次做完任务我都会给强化物,开始的时候还能好好配合我做有种新型啃老悄然兴起,父母还不知情,对外夸赞孩子前途无量自古以来,父母养育子女是一个惯例和社会责任的问题。然而,孩子有一天会长大,父母也有一天变老。因此,一代又一代的年轻人长大后倾向于赡养年迈的父母,作为对他们养育的回报。然而,随着社会顺产派VS剖宫流,你站哪个?近年来,我国产妇剖宫产率逐年递增,许多城市的剖宫产率甚至超过50,大大超出了世界卫生组织规定的15到20的标准。这一数字或许已经为产妇该选择剖宫产还是顺产给出了答案。但小编提醒你,橙邀您来采摘甜蜜贡井区建设镇2023年白庙血橙采摘月启幕自贡网记者周嘉摄影宋姿熠一串串沉甸甸的果实缀满枝头,阵阵橘香沁人心脾,成片的柑橘园里到处是丰收的景象。1月6日,贡井区建设镇2023年白庙血橙采摘月拉开帷幕,以摘白庙血橙品农家美食和平精英全国大赛,参与破圈与爆发当四名主播组成的广东男团站在舞台中央接受冠军的加冕时,历时七个月,从特点迥异的四条赛道走出的20支队伍,最终实现了2022和平精英全国大赛赛事宣传片里提到的从八十亿分之一成为百分之王鹤棣陈钰琪浮图缘一周播放破千万,登顶全球Top1,凭什么?开场先给大家说一个喜报古偶剧浮图缘在爱奇艺海外站内预约第一名,一周破千万播放,并在美国加拿大新加坡越南泰国等地登顶TOP1。看来被肖铎美色所误的人真不少!不少网友还风趣地表示海外的全球首款数字电源快充充电器,来了如果说这两年关于充电,大家听到最多的词是什么,我相信大部分人都会脱口而出GaN氮化镓。这要从近两年充电器上的疯狂内卷开始说起。好像从某个时间点开始,一夜之间,氮化镓就如雨后春笋般出