fx模式量化感知训练的典型代码如下: torch版本为1.12,最新torch代码可能部分api接口不一样 from torch.quantization.quantize_fx import prepare_qat_fx,convert_fx import torch.quantization.observer as observer #将模型转换为QAT版本模型,其他训练过程与正常训练类似 def qat_version_model(model): qconfig_dict = ...
eval_accuracy = running_corrects / len(test_loader.dataset)returneval_loss, eval_accuracy def quant_fx(model, data_loader): model_to_quantize = copy.deepcopy(model) model_to_quantize.eval() qconfig = get_default_qconfig("fbgemm") qconfig_dict = {"": qconfig} prepared_model = prepare_f...
工作原理: torch.quantization.prepare_qat 使用 FakeQuantize 模块递归包装每个合格层,默认的 FBGEMM qconfig 选择适合服务器/边缘 CPU 的每个张量权重观察器和每个通道激活观察器。2. FX Graph 模式量化 这是 PyTorch 中的自动量化工作流程,目前处于维护模式。它通过支持函数和自动化量化过程来增强 Eager Mode ...
model_to_quantize = mAlexNet(num_classes= 10).to(device) qconfig_mapping = get_default_qat_qconfig_mapping("qnnpack") model_to_quantize.train() # prepare model_prepared = quantize_fx.prepare_qat_fx(model_to_quantize, qconfig_mapping, example_inputs) # training loop model_trained_prepared =...
由于FX 可以自动跟踪 forward 里面的代码,因此它是真正记录了网络里面的每个节点,在 fuse 和动态插入量化节点方面,要比 Eager 模式强太多。还是前面那个模型代码,我们不需要对网络做修改,直接让 FX 帮我们自动修改网络即可: fromtorch.quantizationimportget_default_qconfig, quantize_jit ...
model_quantized = quantize_dynamic( model=m, qconfig_spec={nn.LSTM, nn.Linear}, dtype=torch.qint8, inplace=False ) ## FX MODE from torch.quantization import quantize_fx qconfig_dict = {"": torch.quantization.default_dynamic_qconfig} # An empty key denotes the default applied to all mod...
model_quantized_dynamic = quantize_fx.convert_fx(model_prepared) 正如你所看到的,只需要通过模型传递一个示例输入来校准量化层,所以代码十分简单,看看我们的模型对比: print_model_size(model) print_model_size(model_quantized_dynamic) 可以看到的,减少了0.03 MB或者说模型变为了原来的75%,我们可以通过静态模式...
2.2 fx 量化步骤: 根据官方文档,各个模式下量化步骤: import torch from torch.ao.quantization import QConfigMapping import torch.quantization.quantize_fx as quantize_fx import copy model_fp = UserModel() ###动态量化 # we need to deepcopy if we still want to keep model_fp unchanged after quantiza...
FX Graph Mode Quantization (Prototype) Weight Only Quantization API 示例: import torch.quantization.quantize_fx as quantize_fx import copy model_to_quantize = UserModel(...) model_to_quantize.eval() # 下面的qconfig指定了某类型的层为weight_only 量化 ...
# quantize model_quantized_dynamic = quantize_fx.convert_fx(model_prepared) 正如你所看到的,只需要通过模型传递一个示例输入来校准量化层,所以代码十分简单,看看我们的模型对比: print_model_size(model)print_model_size(model_quantized_dynamic) 可以看到的,减少了0.03 MB或者说模型变为了原来的75%,我们可以通...