Pytorch 量化后权重参数导出

Pytorch 量化模型权重导出实践
本文介绍如何在Pytorch中导出量化后的网络权重参数,特别是以int8整数形式,并讨论了权重导出过程中遇到的问题和解决方法,如偏置bias的量化处理。同时提到了相关Python库的使用,如pandas、numpy和openpyxl。尽管找到了直接导出权重的方法,但后续仍需将权重转换为二进制bin格式。文章最后为高考考生送上了祝福。

Pytorch 网络量化后权重等参数导出

Topic : 网络参数导出

时间 :2022 / 6 / 07


写在最前:

在这篇文章中Pytorch 提取权重等参数 写入Excel以为量化后只给出了相应层的s、z值,需要将网络中的参数导出进行再处理

需要用到的Python库:

  • pytorch
  • pandas
  • numpy
  • openpyxl

今天才发现其实权重参数可以直接以int8整数形式导出如下图所示,不过后续仍然需要转换为二进制bin

(此处偏置bias仍然需要手动量化)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZLd6TE6g-1654611905443)(../../../../../../WindowsUsers/Admin/Documents/Typora/images/image-20220607222430399.png)]

是用到 t.int_repr().但是这边并没有查到关于这个函数的更多信息。这里仅作为使用。

### PyTorch量化工具及其使用教程 #### 一、PyTorch官方量化支持概述 PyTorch提供了全面的支持来实现模型的量化,这不仅有助于减少模型大小和提高推理速度,还能够降低功耗,在资源受限设备上尤为重要[^2]。 #### 二、静态量化流程详解 对于已训练好的浮点数模型应用静态量化时,主要涉及以下几个方面的工作: - **校准数据集准备**:为了获得更精确的结果,通常需要一个小规模的数据集用于计算统计信息。 - **定义量化配置**:通过设置`qconfig`参数指定如何对权重和激活函数执行量化操作。可以采用默认配置或者自定义特定层的行为。 ```python import torch.quantization as quantization model.qconfig = quantization.get_default_qconfig('fbgemm') ``` - **转换模型结构**:利用`convert()`方法将原始模型转变为适合量化的版本,并插入必要的伪量化节点以便后续模拟量化效果。 ```python quantized_model = quantization.convert(model) ``` #### 三、动态量化实践指南 当目标仅限于压缩模型体积而不影响精度过多的情况下,可以选择只针对某些部分(如线性变换)实施动态量化策略。这种方式不需要额外的校准过程即可完成整个工作流。 ```python from torch.quantization import QuantWrapper, default_dynamic_qconfig wrapped_module = QuantWrapper(module_to_be_quantized) wrapped_module.qconfig = default_dynamic_qconfig dynamic_quantized_model = quantization.prepare(wrapped_module).eval() ``` #### 四、量化感知训练(QAT)入门指导 如果希望进一步提升量化后的性能表现,则可以通过引入QAT技术来进行微调优化。此过程中会调整网络内部参数使得其更加适应低比特表示形式下的运算需求[^1]。 ```python for epoch in range(num_epochs): model.train() for data, target in train_loader: optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() # After training completes... quantized_model = prepare_qat(model) ``` #### 五、导出至ONNX格式注意事项 一旦完成了上述任一种类型的量化处理之后,还可以借助ONNX作为中间件把最终成果迁移到其他平台上去运行。需要注意的是并非所有的算子都能被完美映射过去因此可能需要做一些适配性的修改才能确保兼容性良好[^3]。 ```bash pip install onnxruntime-tools ``` ```python torch.onnx.export(quantized_model, dummy_input, "quantized_model.onnx", export_params=True, opset_version=10, do_constant_folding=True, input_names=['input'], output_names=['output'], dynamic_axes={'input': {0: 'batch_size'}, }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值