Skip to content

Release version 0.6.0

Compare
Choose a tag to compare
@volcacius volcacius released this 04 Jun 11:48
· 609 commits to master since this release

Breaking changes

  • Quantizers now require to specify a matching proxy class as proxy_class attribute. This is necessary to export more custom quantization techniques through BrevitasONNX. Quantization solvers like WeightQuantSolver already specify their corresponding proxy_class. Any custom quantizer that doesn't inherit from built-in solvers or quantizers will break.

Features

  • New brevitas.fx subpackage with:
    • A backport of torch.fx from version 1.8.1 to earlier versions of PyTorch down to 1.3.1.
    • A generalized tracer (brevitas.fx.value_tracer) that is capable of partially evaluating against the concrete_args without reducing down to constants, as illustrated here pytorch/pytorch#56862. This allows to trace through conditionals and unpacking of tuples as long as representative input data is provided.
    • A symbolic tracer that accounts for Brevitas layers as leaf modules (brevitas.fx.brevitas_symbolic_trace) and its generalized variant (brevitas.fx.brevitas_value_trace).
  • Port existing graph quantization transformations in brevitas.graph to brevitas.fx. Still not ready for easy public consumption, but useful to anyone that knows what they are doing.
  • Rewrite bias export in the FINN ONNX export flow.
  • Add DPURound, with matching STE implementations and wrappers.
  • Add matching implementations for the symbolic ops Quant and DecoupledQuant in the BrevitasONNX export flow.

Bugfixes

  • Fix leftover issues with 16b datatypes not being preserved after quantization during mixed-precision training.
  • Fix per-channel quantization on QuantConvTranspose1d/2d.
  • Fix per-channel quantization whenever two layers with quantized weights share the same quantizer.
  • Fix export from non-CPU devices.