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

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逆转埃弗顿央视网消息北京时间10月10日200,202223赛季英超第10轮,曼联做客古迪逊公园球场挑战埃弗顿。伊沃比开场5分钟为埃弗顿首开纪录,安东尼第15分钟接马夏尔斜塞扳平比分,C罗第头发丝细的光纤如何实现300亿人同时通话?今天直播带你看全球95的信息都通过光纤来承载和传输而一根头发丝细的光纤可以实现近300亿人同时通话这是一种怎样神奇的存在?就在今天中央广播电视总台CGTN记者将走进武汉东湖高新区探访中国光谷带大女排第一美女赵蕊蕊41岁了!曾与姚明传绯闻,身高1米97至今单身近日体育界迎来了了不少好消息,每一名选手的表现都让我们非常的满意。除此之外,我们也了解到了,中国女排第一美女赵蕊蕊迎来了自己41岁的生日,为了庆祝自己的生日,赵蕊蕊打扮的非常的漂亮耻辱!希腊网球名将遭德约科维奇横扫,因不当言论疑遭央视禁播在哈萨克斯坦举行的阿斯塔纳ATP500积分赛最终落下帷幕,在万众瞩目的男单决赛中,21座大满贯得主德约科维奇兵不血刃地以63和64横扫希腊名将西西帕斯,斩获个人职业生涯第90座AT再见!申花赛季目标实现,吴金贵大力培养新人,5将难逃清洗厄运在中超联赛这个大江湖混,首先要学会做人。所以不少本土教练的处世哲学相当令人称道,比如上海申花队的老帅吴金贵。因为众所周知的原因,在本赛季的中超联赛开赛前,申花队曾普遍不被看好,很多意甲豪门对决,Ac米兰vs尤文图斯大家好,欢迎来到意甲第9轮的比赛,一场豪门对决即将打响,现场来自主场的球迷热情高涨,因为呈现他们的是一场激情四射的视觉盛宴!随着比赛的一声哨声,比赛正式开始,画风一转,比赛来到两分菲尼克斯迎3年来最大挑战!保罗是否还灵艾顿需证明自己面对新赛季,菲尼克斯太阳显然需要面对更多的问题,而他们在休赛期所经历的一切,也让这支西部强队遭受着巨大的考验。作为上赛季联盟第一战绩的球队,太阳依然具备足够强大的实力,而且他们的核单节轰48分!雷霆季前赛47分狂胜马卡比雷霆季前赛14497大胜以色列球队马卡比雷霆全场命中率高达59,命中21记三分,还抢下16个前场篮板。第三节雷霆单节打出4823的比分。诺里斯科尔威利沃克曼等人开场发挥出色,马卡比国乒男团主教练秦志戬斯韦思林杯太重了颁奖典礼现场,斯韦思林杯的重让秦志戬印象深刻封面新闻记者陈羽啸摄影报道10月9日晚,在成都高新体育中心进行的成都世乒赛团体赛男团决赛中,中国男乒3比0完胜德国男团,实现十连冠,第2关于U17中国男足13输给澳大利亚后的一些话其实我们踢得并不差图懂球帝提供北京时间10月09日在已结束的U17亚洲杯预选赛G组第3轮比赛中,中国U17国少队13不敌澳大利亚U17。上半场第6分钟,国少禁区内送点,伊兰坤达操刀命中为澳大利亚取得
第四季度台湾景气更惨?林祖嘉边境不对大陆及港澳开放很怪台湾景气灯号至今年8月为连六绿灯,但已经是濒临转灯号的临界点,其中制造营建及服务业已是连8个月呈现下滑趋势,尤其制造业衰败最为严重,已是自2020年6月以来最低的迷情况。台湾知名经一个跌落神坛,一个月销破3万,广汽的未来就靠它广汽集团旗下的自主双子星,正处于冰火两重天的境地。传祺汽车从巅峰跌落神坛,而埃安则乘风破浪,月销量突破3万台。广汽的未来,显而易见必须要靠埃安了。1。埃安销量破3万?成立还不到两年我们正站在大牛市起点周六离开市还有一天多时间,相信多数人已经急不可待,特别周末还需上班的,在假期前经历一波下跌后,节后想要捞点过节费回来。为什么节前市场这么弱,遍地黄金没人捡?在于悲观言论又开始冒出来楼市正在发生的两大骗局1hr目前楼市正在发生的第一大骗局新一轮救市开始了,我们正站在新一轮楼市行情的起点!这怎么可能是真的呢?只要不傻的都能感觉到,目前楼市基本面是,全国楼市还在底部徘徊。6月止跌,7月主场变客场,国安只能干吃亏,山东泰山便宜占大了国安本轮要打山东了,是主场,但国安的这个日照主场的真正主人却是客队山东泰山,前天夜里,就有不少日照当地球迷冒着寒风去迎接泰山队的到达。而且,本场主场作战的国安不但没有地利上的主队身CBA新赛季第一场常规赛!山东VS深圳,王晗带队复仇,陶队PK大鸟CBA新赛季终于要拉开大幕经历了一个动荡的休赛期后,CBA新赛季终于要拉开大幕。这个夏天,中国男篮在世预赛和亚洲杯中表现糟糕,郭艾伦周琦赵睿周鹏闹离队,CBA大环境非常差,外界的对克洛普执教利物浦7周年数据一览曾连续1369天英超主场不败直播吧10月8日讯今天是克洛普执教利物浦俱乐部的七周年纪念日,利物浦官网统计了克洛普的一些里程碑数据。1自2015年10月8日上任后,克洛普已赢得6座主要冠军,包括欧冠欧超杯世俱杯英超最新积分榜哈兰德破门!曼城40升榜首切尔西大胜升至第四刚刚,202223赛季英超联赛第10轮部分场次结束。曼城主场40轻取南安普顿,在多赛一场的情况下,超越阿森纳,升至积分榜首位。另一支BIG6球队切尔西,他们主场30大胜狼队,凭借着2000万!曝梅西回归巴萨,拉波尔塔下死命令,已和球王通电话10月8日,据虎扑转述世界体育报主编FrancescAguilar透露,巴塞罗那主席拉波尔塔已经决心将梅西待会俱乐部。在哈维的领导下,复兴中的红蓝军团在联赛风光无限,7轮取19分逆秦晓雯未下课依然把持首钢,方大爷还在坑首钢,二人组让首钢无望10月10日CBA新赛季即将打响,开启常规赛第一阶段的10轮比赛。近几日,为测试赛区情况锻炼队伍适应比赛也为赛季预热,各队在赛区纷纷捉对厮杀,将完成12轮的季前赛。北京首钢也于101。2亿卖出,2000万签回!西媒确认格列兹曼将从巴萨转会马竞每日体育报报道,巴萨与马竞已完成格列兹曼的转会,马竞向巴萨支付2000万欧转会费,还有价值400万欧的浮动条款。马卡报也确认,格列兹曼的买断费为2000万欧浮动条款,他将与马竞签约