Skip to main content

Model Quantization Guide

Quantization reduces model size and improves inference performance by converting floating-point weights and activations to lower precision formats (typically 8-bit integers). ONNX Runtime provides comprehensive quantization tools supporting both static and dynamic quantization.

Prerequisites

Quantization Methods

Dynamic Quantization

Dynamic quantization converts weights to int8 at runtime, with activations quantized dynamically during inference:

Static Quantization

Static quantization uses calibration data to determine optimal quantization parameters:

Configuration Options

Quantization Config

Use StaticQuantConfig for fine-grained control:

Calibration Methods

Advanced Quantization

Per-Channel Quantization

Quantize weights per output channel for better accuracy:

Selective Quantization

Quantize only specific operators:

QDQ Format Quantization

Quantize-Dequantize (QDQ) format is recommended for best compatibility:

Transformer Model Quantization

Specialized quantization for transformer models:

Calibration Data Best Practices

Representative Dataset

Quantization Extra Options

Model Preprocessing

Optimize model before quantization:

Validating Quantized Models

Performance Comparison

Best Practices

  1. Use representative calibration data: 100-1000 samples covering your use cases
  2. Choose appropriate method: Dynamic for ease, static for best performance
  3. Enable per-channel quantization: Better accuracy with minimal overhead
  4. Use QDQ format: Better compatibility with execution providers
  5. Preprocess models: Run preprocessing before quantization
  6. Validate accuracy: Always compare quantized vs original outputs
  7. Test on target hardware: Performance gains vary by platform
  8. Consider symmetric quantization: For GPU/TensorRT deployment

Hardware-Specific Quantization

For CPUs (VNNI support)

For GPUs (TensorRT)

Next Steps