当前位置: 首页 > news >正文

o2o网站建设案例免费咨询男科医院

o2o网站建设案例,免费咨询男科医院,泉州网站建设企业,个人网页制作模板图片代码量化工具箱pytorch_quantization 通过提供一个方便的 PyTorch 库来补充 TensorRT #xff0c;该库有助于生成可优化的 QAT 模型。该工具包提供了一个 API 来自动或手动为 QAT 或 PTQ 准备模型。 API 的核心是 TensorQuantizer 模块#xff0c;它可以量化、伪量化或收集张量的…量化工具箱pytorch_quantization 通过提供一个方便的 PyTorch 库来补充 TensorRT 该库有助于生成可优化的 QAT 模型。该工具包提供了一个 API 来自动或手动为 QAT 或 PTQ 准备模型。 API 的核心是 TensorQuantizer 模块它可以量化、伪量化或收集张量的统计信息。它与 QuantDescriptor 一起使用后者描述了如何量化张量。在 TensorQuantizer 之上的是量化模块这些模块被设计为 PyTorch 全精度模块的替代品。这些是使用 TensorQuantizer 对模块的权重和输入进行伪量化或收集统计信息的方便模块。 API 支持将 PyTorch 模块自动转换为其量化版本。转换也可以使用 API 手动完成这允许在不想量化所有模块的情况下进行部分量化。例如一些层可能对量化更敏感并且使其未量化可提高任务精度。 量化第一步是将量化器模块添加到神经网络图中。该包提供了许多量化层模块其中包含用于输入和权重的量化器。例如quant_nn.QuantLinear它可以用来代替nn.Linear。这些量化层可以通过猴子修补或手动修改模型定义来自动替换。自动层替换是使用quant_module完成的。这应该在创建模型之前调用。 首先看以下代码 from pytorch_quantization import quant_modules quant_modules.initialize()initialize()会动态地修改 PyTorch 代码适用于每个模块的所有实例将 torch.nn.module 的一些子类替换为对应的量化版本。如果不希望所有模块都量化则应手动替换量化模块。独立量化器也可以添加到带有quant_nn.TensorQuantizer的模型中。 initialize()位于tools\pytorch-quantization\pytorch_quantization\quant_modules.py作用使用使用monkey patching进行动态模块更换为量化版本 什么是猴子补丁 Python是一种典型的动态脚本语言。它不仅具有 动态类型(dynamic type) 而且它的 对象模型(object model) 也是动态的。Python的类是可变的(mutable)方法(methods)只是类的属性(attributes)这允许我们在 运行时(run time) 修改其行为。这被称为猴子补丁(Monkey Patching) 它指的是偷偷地更改代码。Monkey Patching只是在 运行时(run time) 动态替换属性(attributes)。而在Python中术语monkey patch指的是对函数(function)、类(class)或模块(module)的动态或运行时修改。 def initialize(float_module_listNone, custom_quant_modulesNone):用量化版本动态地替换模块。在内部,状态由helper类对象维护,该对象有助于将原始模块替换回去。参数float_module_list:列表,用户提供的列表其中指明哪些模块不可执行替换custom_quant_modules:一个字典。用户提供的映射,用于指示除torch.nn及其相应量化版本之外的任何其他模块。Returns:空# 准备monkey patching中使用的内部变量quant_map和orginal_func_map_quant_module_helper_object.prepare_state(float_module_list, custom_quant_modules)#执行量化模块替换_quant_module_helper_object.apply_quant_modules()def deactivate():动态模块更换,可逆转monkey patching使用维护状态的helper类对象动态地替换回先前在initialize()函数调用中被monkey patching的原始模块。_quant_module_helper_object.restore_float_modules()# 维护被替换模块状态的全局对象。 _quant_module_helper_object QuantModuleReplacementHelper()自定义量化模块使用示例 # torch.nn模块定义不可执行替换列表 float_module_list [Linear] # torch.nn以外的模块自定义映射 custom_quant_modules [(torch.nn, Linear, quant_nn.QuantLinear)] # Monkey修补模块 pytorch_quantization.quant_modules.initialize(float_module_list, custom_modules) # 使用量化模块 pytorch_quantization.quant_modules.deactivate()继续看helper类QuantModuleReplacementHelper class QuantModuleReplacementHelper():帮助量化版本替换torch.nn模块术语monkey patch指的是对函数(function)、类(class)或模块(module)的动态或运行时修改该模块用工具内部实现或任何其他用户提供的自定义模块提供的量化版 替换通过monkey patchingtorch.nn模块属性orginal_func_map:一个dict.维护原始torch.nn模块字典quant_support_list:列表,包含工具提供的量化版本的模块名称quant_map:一个字典,包含模块名称及其量化版本的字典quant_switch_opt:一个字典,用于指示哪些模块不能替换其量化版本。该dict由用户提供的列表更新,该列表指示在monkey patching中要忽略的模块def __init__(self):# 保留要更换的原始模块self.orginal_func_map set()# 默认情况下维护工具支持的量化模块列表self.default_quant_map _DEFAULT_QUANT_MAP# 保存最终量化模块。self.quant_map set()_DEFAULT_QUANT_MAP是包含量化模块映射的文件的全局成员 _DEFAULT_QUANT_MAP [_quant_entry(torch.nn, Conv1d, quant_nn.QuantConv1d),_quant_entry(torch.nn, Conv2d, quant_nn.QuantConv2d),_quant_entry(torch.nn, Conv3d, quant_nn.QuantConv3d),_quant_entry(torch.nn, ConvTranspose1d, quant_nn.QuantConvTranspose1d),_quant_entry(torch.nn, ConvTranspose2d, quant_nn.QuantConvTranspose2d),_quant_entry(torch.nn, ConvTranspose3d, quant_nn.QuantConvTranspose3d),_quant_entry(torch.nn, Linear, quant_nn.QuantLinear),_quant_entry(torch.nn, LSTM, quant_nn.QuantLSTM),_quant_entry(torch.nn, LSTMCell, quant_nn.QuantLSTMCell),_quant_entry(torch.nn, AvgPool1d, quant_nn.QuantAvgPool1d),_quant_entry(torch.nn, AvgPool2d, quant_nn.QuantAvgPool2d),_quant_entry(torch.nn, AvgPool3d, quant_nn.QuantAvgPool3d),_quant_entry(torch.nn, AdaptiveAvgPool1d, quant_nn.QuantAdaptiveAvgPool1d),_quant_entry(torch.nn, AdaptiveAvgPool2d, quant_nn.QuantAdaptiveAvgPool2d),_quant_entry(torch.nn, AdaptiveAvgPool3d, quant_nn.QuantAdaptiveAvgPool3d),]_quant_entry定义命名元组用于存储量化模块映射它拥有三个属性orig_mod mod_name replace_mod _quant_entry namedtuple(quant_entry, orig_mod mod_name replace_mod)QuantModuleReplacementHelper类的属性方法 prepare_state 准备稍后在monkey patching机制中使用的量化模块的命名字典quant_map和更换为原始模块orginal_func_map 设置torch.nn工具支持的量化模块列表为torch.nn以外的模块设置自定义映射使用float_module_list关闭用户指示模块的monkey patching替换 def prepare_state(self, float_module_listNone, custom_mapNone):# 对于支持的默认量化模块生成quant_mapfor item in self.default_quant_map:if float_module_list is not None and item.mod_name in float_module_list:# 如果float_module_list中存在此模块则跳过此模块continueelse:# 将模块追加到将在monkey patching中使用的变量中self.quant_map.add(item)# 存储要在反向monkey patching中使用的原始模块self.orginal_func_map.add(_quant_entry(item.orig_mod, item.mod_name,getattr(item.orig_mod, item.mod_name)))# 将自定义模块添加到quant_mapif custom_map is not None:for item in custom_map:# 将自定义模块附加到将在monkey补丁中使用的列表中# 将元组转换为命名元组self.quant_map.add(_quant_entry(item[0], item[1], item[2]))# 将原始模块存储在另一个列表中该列表将用于反向monkey patchingself.orginal_func_map.add(_quant_entry(item[0], item[1], getattr(item[0], item[1])))apply_quant_modules根据quant_map,执行替换为量化模块 def apply_quant_modules(self):for entry in self.quant_map:# 用于设置属性值该属性不一定是存在的,对应函数 getattr()setattr(entry.orig_mod, entry.mod_name, entry.replace_mod)restore_float_modules通过使用orginal_func_map替换回原始模块,反转monkey patch的效果 def restore_float_modules(self):for entry in self.orginal_func_map:setattr(entry.orig_mod, entry.mod_name, entry.replace_mod)
http://www.dnsts.com.cn/news/240296.html

相关文章:

  • 巢湖网站开发免费体验服务器
  • 网站开发的前景中小微企业查询平台
  • 百度站长平台安卓版最新发布地址跳转
  • 如何自己做自己的网站注册公司最少需要多少钱
  • 美容院门户网站开发网站 搜索引擎 提交
  • 怎样免费做网站推广建一个网页网站
  • 深圳网站制作公司怎么样免费咨询大夫
  • 网站建设一样注意什么表白视频制作
  • 番禺网站建设培训网络建设公司方案
  • 网站首页标题友情链接工具
  • 网站建设价格标准信息涿州网站建设有限公司
  • 云南网站建设首选公司太原小程序开发定制
  • 网站开发所需要的条件廊坊百度快照优化排名
  • 建设银行官方网站个人系统板块做公寓酒店跟网站合作有什么技巧
  • 洛阳网站建设哪家便宜公司可以备案几个网站
  • 公司网站下二级站点如何做成品在线网站免费入口
  • 做seo网站优化多少钱怎样设计一个logo
  • 云南集优科技网站中国纪检监察报电子报
  • 在大网站做网页广告需要多少钱十堰网站建设怎么样
  • 网站备案了有什么好处vue快速建站
  • 网站开发产品经理小刘网站建设
  • 网站建设综合实训总结与体会做梯子的企业网站
  • 回收手机的网站哪家好甜点网站建设的功能及意义
  • 冠县网站建设网站建设电话
  • 实验室网站建设百度做一个网站怎么做呢
  • 合肥网站建设工作室兰州市网站
  • 医疗 网站前置审批番禺网站建设技术
  • 做爰网站下载地址百姓网招聘最新招聘信息
  • 网站开发维护协议天津黑曼巴网站建设
  • 建设安全带官方网站淄博电商网站建设