Thanks, Andrew.
When attempting static quantization, I get:
AssertionError: Embedding quantization is only supported with float_qparams_weight_only_qconfig.
So, I tried:
roberta_model.qconfig = (
torch.quantization.qconfig.float_qparams_weight_only_qconfig
)
roberta_quant_model = torch.quantization.prepare(roberta_model)
After calibration, when I finally called:
roberta_quant_model = torch.quantization.convert(roberta_quant_model)
It ran into:
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
Input In [19], in <cell line: 3>()
1 from tqdm.auto import tqdm
----> 3 roberta_quant_model = torch.quantization.convert(roberta_quant_model)
5 for batch in tqdm(test_loader):
6 with torch.no_grad():
File ~/.local/bin/.virtualenvs/plm/lib/python3.8/site-packages/torch/ao/quantization/quantize.py:505, in convert(module, mapping, inplace, remove_qconfig, convert_custom_config_dict)
503 if not inplace:
504 module = copy.deepcopy(module)
--> 505 _convert(
506 module, mapping, inplace=True,
507 convert_custom_config_dict=convert_custom_config_dict)
508 if remove_qconfig:
509 _remove_qconfig(module)
File ~/.local/bin/.virtualenvs/plm/lib/python3.8/site-packages/torch/ao/quantization/quantize.py:541, in _convert(module, mapping, inplace, convert_custom_config_dict)
536 for name, mod in module.named_children():
537 # both fused modules and observed custom modules are
538 # swapped as one unit
539 if not isinstance(mod, _FusedModule) and \
540 type(mod) not in custom_module_class_mapping:
--> 541 _convert(mod, mapping, True, # inplace
542 convert_custom_config_dict)
543 reassign[name] = swap_module(mod, mapping, custom_module_class_mapping)
545 for key, value in reassign.items():
File ~/.local/bin/.virtualenvs/plm/lib/python3.8/site-packages/torch/ao/quantization/quantize.py:541, in _convert(module, mapping, inplace, convert_custom_config_dict)
536 for name, mod in module.named_children():
537 # both fused modules and observed custom modules are
538 # swapped as one unit
539 if not isinstance(mod, _FusedModule) and \
540 type(mod) not in custom_module_class_mapping:
--> 541 _convert(mod, mapping, True, # inplace
542 convert_custom_config_dict)
543 reassign[name] = swap_module(mod, mapping, custom_module_class_mapping)
545 for key, value in reassign.items():
File ~/.local/bin/.virtualenvs/plm/lib/python3.8/site-packages/torch/ao/quantization/quantize.py:543, in _convert(module, mapping, inplace, convert_custom_config_dict)
539 if not isinstance(mod, _FusedModule) and \
540 type(mod) not in custom_module_class_mapping:
541 _convert(mod, mapping, True, # inplace
542 convert_custom_config_dict)
--> 543 reassign[name] = swap_module(mod, mapping, custom_module_class_mapping)
545 for key, value in reassign.items():
546 module._modules[key] = value
File ~/.local/bin/.virtualenvs/plm/lib/python3.8/site-packages/torch/ao/quantization/quantize.py:568, in swap_module(mod, mapping, custom_module_class_mapping)
566 swapped = True
567 elif type(mod) in mapping:
--> 568 new_mod = mapping[type(mod)].from_float(mod)
569 swapped = True
571 if swapped:
572 # Preserve module's pre forward hooks. They'll be called on quantized input
File ~/.local/bin/.virtualenvs/plm/lib/python3.8/site-packages/torch/nn/quantized/modules/normalization.py:34, in LayerNorm.from_float(cls, mod)
32 @classmethod
33 def from_float(cls, mod):
---> 34 scale, zero_point = mod.activation_post_process.calculate_qparams()
35 new_mod = cls(
36 mod.normalized_shape, mod.weight, mod.bias, float(scale),
37 int(zero_point), mod.eps, mod.elementwise_affine)
38 return new_mod
File ~/.local/bin/.virtualenvs/plm/lib/python3.8/site-packages/torch/ao/quantization/observer.py:1256, in PlaceholderObserver.calculate_qparams(self)
1254 @torch.jit.export
1255 def calculate_qparams(self):
-> 1256 raise Exception(
1257 "calculate_qparams should not be called for PlaceholderObserver"
1258 )
Exception: calculate_qparams should not be called for PlaceholderObserver